Resubmit consolidate skip extended comp mode speed features
This patch combines prune_compound_using_neighbors
and prune_comp_using_best_single_mode_ref speed features
This patch reverts commit:
0e2b3d2a7083c32b10e0342aa762b93157c89017 with fix
Change-Id: I697bcce5f5c2046ab96a99c6a00367a8275a1e9f
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index c7540f2..0529ef1 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -4452,7 +4452,7 @@
// Prune compound mode using ref frames of neighbor blocks.
static INLINE int compound_skip_using_neighbor_refs(
MACROBLOCKD *const xd, const PREDICTION_MODE this_mode,
- const MV_REFERENCE_FRAME *ref_frames, int prune_compound_using_neighbors) {
+ const MV_REFERENCE_FRAME *ref_frames, int prune_extended_comp_mode) {
// Exclude non-extended compound modes from pruning
if (this_mode == NEAREST_NEARESTMV || this_mode == NEAR_NEARMV ||
this_mode == NEW_NEWMV || this_mode == GLOBAL_GLOBALMV)
@@ -4472,7 +4472,7 @@
const int track_ref_match = is_ref_match[0] + is_ref_match[1];
// Pruning based on ref frame match with neighbors.
- if (track_ref_match >= prune_compound_using_neighbors) return 0;
+ if (track_ref_match >= prune_extended_comp_mode) return 0;
return 1;
}
@@ -4490,8 +4490,7 @@
// Prune compound mode using best single mode for the same reference.
static INLINE int skip_compound_using_best_single_mode_ref(
const PREDICTION_MODE this_mode, const MV_REFERENCE_FRAME *ref_frames,
- const PREDICTION_MODE *best_single_mode,
- int prune_comp_using_best_single_mode_ref) {
+ const PREDICTION_MODE *best_single_mode) {
// Exclude non-extended compound modes from pruning
if (this_mode == NEAREST_NEARESTMV || this_mode == NEAR_NEARMV ||
this_mode == NEW_NEWMV || this_mode == GLOBAL_GLOBALMV)
@@ -4514,9 +4513,6 @@
const PREDICTION_MODE single_mode = best_single_mode[ref_frames[newmv_dir]];
if (single_mode == NEWMV) return 0;
- // Avoid pruning the compound mode when best single mode is not available
- if (prune_comp_using_best_single_mode_ref == 1)
- if (single_mode == MB_MODE_COUNT) return 0;
return 1;
}
@@ -4770,18 +4766,16 @@
return 1;
}
- if (sf->inter_sf.prune_compound_using_neighbors && comp_pred) {
+ if (sf->inter_sf.prune_extended_comp_mode && comp_pred) {
if (compound_skip_using_neighbor_refs(
- xd, this_mode, ref_frames,
- sf->inter_sf.prune_compound_using_neighbors))
+ xd, this_mode, ref_frames, sf->inter_sf.prune_extended_comp_mode))
return 1;
- }
- if (sf->inter_sf.prune_comp_using_best_single_mode_ref && comp_pred) {
- if (skip_compound_using_best_single_mode_ref(
- this_mode, ref_frames, args->search_state->best_single_mode,
- sf->inter_sf.prune_comp_using_best_single_mode_ref))
- return 1;
+ if (sf->inter_sf.prune_extended_comp_mode > 1) {
+ if (skip_compound_using_best_single_mode_ref(
+ this_mode, ref_frames, args->search_state->best_single_mode))
+ return 1;
+ }
}
return 0;
@@ -5472,7 +5466,7 @@
collect_single_states(x, &search_state, mbmi);
}
- if (sf->inter_sf.prune_comp_using_best_single_mode_ref > 0 &&
+ if (sf->inter_sf.prune_extended_comp_mode > 1 &&
is_inter_singleref_mode(this_mode))
update_best_single_mode(&search_state, this_mode, ref_frame, this_rd);
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 409394b..5744278 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -497,7 +497,7 @@
sf->inter_sf.disable_interinter_wedge_var_thresh = 100;
sf->inter_sf.fast_interintra_wedge_search = 1;
sf->inter_sf.prune_comp_search_by_single_result = boosted ? 4 : 1;
- sf->inter_sf.prune_compound_using_neighbors = 1;
+ sf->inter_sf.prune_extended_comp_mode = 1;
sf->inter_sf.prune_comp_type_by_comp_avg = 2;
sf->inter_sf.reuse_best_prediction_for_part_ab = 1;
sf->inter_sf.selective_ref_frame = 3;
@@ -611,8 +611,7 @@
sf->inter_sf.txfm_rd_gate_level = boosted ? 0 : 4;
sf->inter_sf.prune_inter_modes_based_on_tpl = boosted ? 0 : 2;
- sf->inter_sf.prune_compound_using_neighbors = 2;
- sf->inter_sf.prune_comp_using_best_single_mode_ref = 2;
+ sf->inter_sf.prune_extended_comp_mode = 2;
sf->inter_sf.disable_smooth_interintra = 1;
sf->inter_sf.disable_obmc = 1;
sf->inter_sf.disable_onesided_comp = 1;
@@ -1158,8 +1157,7 @@
inter_sf->skip_repeated_full_newmv = 0;
inter_sf->inter_mode_rd_model_estimation = 0;
inter_sf->prune_compound_using_single_ref = 0;
- inter_sf->prune_compound_using_neighbors = 0;
- inter_sf->prune_comp_using_best_single_mode_ref = 0;
+ inter_sf->prune_extended_comp_mode = 0;
inter_sf->disable_onesided_comp = 0;
inter_sf->prune_mode_search_simple_translation = 0;
inter_sf->prune_comp_type_by_comp_avg = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 6bcaa4b..04972a9 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -671,18 +671,12 @@
int prune_compound_using_single_ref;
// Skip extended compound mode using ref frames of above and left neighbor
- // blocks.
+ // blocks and also skip when ref frame NEWMV mode does not have NEWMV as
+ // single mode winner
// 0 : no pruning
// 1 : prune extended compound mode (less aggressiveness)
// 2 : prune extended compound mode (high aggressiveness)
- int prune_compound_using_neighbors;
-
- // Skip extended compound mode when ref frame corresponding to NEWMV does not
- // have NEWMV as single mode winner.
- // 0 : no pruning
- // 1 : prune extended compound mode (less aggressiveness)
- // 2 : prune extended compound mode (high aggressiveness)
- int prune_comp_using_best_single_mode_ref;
+ int prune_extended_comp_mode;
// Based on previous ref_mv_idx search result, prune the following search.
int prune_ref_mv_idx_search;