Consolidate disable wedge search features
This patch consolidates the following
speed features:
disable_wedge_interintra_search
disable_wedge_search_var_thresh
disable_interinter_wedge
Change-Id: Ieb13d9641bd08700099434cb44dff6318e3947a1
diff --git a/av1/encoder/compound_type.c b/av1/encoder/compound_type.c
index e846c6f..f504c26 100644
--- a/av1/encoder/compound_type.c
+++ b/av1/encoder/compound_type.c
@@ -97,25 +97,25 @@
return 0; // no match result found
}
-static INLINE bool enable_wedge_search(MACROBLOCK *const x,
- const AV1_COMP *const cpi) {
+static INLINE bool enable_wedge_search(
+ MACROBLOCK *const x, const unsigned int disable_wedge_var_thresh) {
// Enable wedge search if source variance and edge strength are above
// the thresholds.
- return x->source_variance > cpi->sf.inter_sf.disable_wedge_search_var_thresh;
+ return x->source_variance > disable_wedge_var_thresh;
}
static INLINE bool enable_wedge_interinter_search(MACROBLOCK *const x,
const AV1_COMP *const cpi) {
- return enable_wedge_search(x, cpi) &&
- cpi->oxcf.comp_type_cfg.enable_interinter_wedge &&
- !cpi->sf.inter_sf.disable_interinter_wedge;
+ return enable_wedge_search(
+ x, cpi->sf.inter_sf.disable_interinter_wedge_var_thresh) &&
+ cpi->oxcf.comp_type_cfg.enable_interinter_wedge;
}
static INLINE bool enable_wedge_interintra_search(MACROBLOCK *const x,
const AV1_COMP *const cpi) {
- return enable_wedge_search(x, cpi) &&
- cpi->oxcf.comp_type_cfg.enable_interintra_wedge &&
- !cpi->sf.inter_sf.disable_wedge_interintra_search;
+ return enable_wedge_search(
+ x, cpi->sf.inter_sf.disable_interintra_wedge_var_thresh) &&
+ cpi->oxcf.comp_type_cfg.enable_interintra_wedge;
}
static int8_t estimate_wedge_sign(const AV1_COMP *cpi, const MACROBLOCK *x,
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 7118486..7cd6777 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -496,7 +496,8 @@
// bit more closely to figure out why.
sf->inter_sf.adaptive_rd_thresh = 1;
sf->inter_sf.comp_inter_joint_search_thresh = BLOCK_SIZES_ALL;
- sf->inter_sf.disable_wedge_search_var_thresh = 100;
+ sf->inter_sf.disable_interintra_wedge_var_thresh = 100;
+ 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;
@@ -545,7 +546,7 @@
sf->inter_sf.mv_cost_upd_level = 1;
// TODO(yunqing): evaluate this speed feature for speed 1 & 2, and combine
// it with cpi->sf.disable_wedge_search_var_thresh.
- sf->inter_sf.disable_wedge_interintra_search = 1;
+ sf->inter_sf.disable_interintra_wedge_var_thresh = UINT_MAX;
sf->inter_sf.disable_smooth_interintra = boosted ? 0 : 1;
// TODO(any): Experiment with the early exit mechanism for speeds 0, 1 and 2
// and clean-up the speed feature
@@ -668,7 +669,7 @@
sf->part_sf.ext_partition_eval_thresh =
allow_screen_content_tools ? BLOCK_8X8 : BLOCK_16X16;
- sf->inter_sf.disable_interinter_wedge = 1;
+ sf->inter_sf.disable_interinter_wedge_var_thresh = UINT_MAX;
sf->inter_sf.prune_inter_modes_if_skippable = 1;
sf->inter_sf.txfm_rd_gate_level = boosted ? 0 : 5;
// Enable fast search for all valid compound modes.
@@ -757,7 +758,8 @@
// TODO(debargha): Test, tweak and turn on either 1 or 2
sf->inter_sf.inter_mode_rd_model_estimation = 0;
- sf->inter_sf.disable_wedge_search_var_thresh = 0;
+ sf->inter_sf.disable_interintra_wedge_var_thresh = 0;
+ sf->inter_sf.disable_interinter_wedge_var_thresh = 0;
sf->inter_sf.model_based_post_interp_filter_breakout = 1;
sf->inter_sf.prune_compound_using_single_ref = 0;
sf->inter_sf.prune_mode_search_simple_translation = 1;
@@ -807,7 +809,8 @@
sf->inter_sf.reuse_inter_intra_mode = 1;
sf->inter_sf.selective_ref_frame = 2;
sf->inter_sf.skip_repeated_newmv = 1;
- sf->inter_sf.disable_wedge_search_var_thresh = 0;
+ sf->inter_sf.disable_interintra_wedge_var_thresh = 0;
+ sf->inter_sf.disable_interinter_wedge_var_thresh = 0;
sf->inter_sf.prune_comp_type_by_comp_avg = 1;
sf->interp_sf.cb_pred_filter_search = 1;
@@ -835,7 +838,8 @@
sf->inter_sf.adaptive_rd_thresh = 1;
sf->inter_sf.comp_inter_joint_search_thresh = BLOCK_SIZES_ALL;
- sf->inter_sf.disable_wedge_search_var_thresh = 100;
+ sf->inter_sf.disable_interintra_wedge_var_thresh = 100;
+ sf->inter_sf.disable_interinter_wedge_var_thresh = 100;
sf->inter_sf.fast_wedge_sign_estimate = 1;
sf->inter_sf.prune_comp_type_by_comp_avg = 2;
sf->inter_sf.selective_ref_frame = 3;
@@ -869,7 +873,7 @@
sf->inter_sf.mv_cost_upd_level = 1;
// TODO(yunqing): evaluate this speed feature for speed 1 & 2, and combine
// it with cpi->sf.disable_wedge_search_var_thresh.
- sf->inter_sf.disable_wedge_interintra_search = 1;
+ sf->inter_sf.disable_interintra_wedge_var_thresh = UINT_MAX;
sf->inter_sf.prune_comp_search_by_single_result = 2;
sf->inter_sf.selective_ref_frame = 4;
@@ -1142,7 +1146,6 @@
inter_sf->alt_ref_search_fp = 0;
inter_sf->selective_ref_frame = 0;
inter_sf->prune_ref_frame_for_rect_partitions = 0;
- inter_sf->disable_wedge_search_var_thresh = 0;
inter_sf->fast_wedge_sign_estimate = 0;
inter_sf->prune_wedge_pred_diff_based = 0;
inter_sf->use_dist_wtd_comp_flag = DIST_WTD_COMP_ENABLED;
@@ -1165,13 +1168,13 @@
inter_sf->disable_interinter_wedge_newmv_search = 0;
inter_sf->enable_interinter_diffwtd_newmv_search = 0;
inter_sf->disable_smooth_interintra = 0;
- inter_sf->disable_wedge_interintra_search = 0;
inter_sf->fast_interintra_wedge_search = 0;
inter_sf->prune_comp_type_by_model_rd = 0;
inter_sf->perform_best_rd_based_gating_for_chroma = 0;
inter_sf->prune_obmc_prob_thresh = 0;
inter_sf->disable_obmc = 0;
- inter_sf->disable_interinter_wedge = 0;
+ inter_sf->disable_interinter_wedge_var_thresh = 0;
+ inter_sf->disable_interintra_wedge_var_thresh = 0;
inter_sf->prune_ref_mv_idx_search = 0;
inter_sf->prune_warped_prob_thresh = 0;
inter_sf->reuse_compound_type_decision = 0;
@@ -1353,7 +1356,7 @@
cpi->common.seq_params.enable_masked_compound &=
!sf->inter_sf.disable_masked_comp;
cpi->common.seq_params.enable_interintra_compound &=
- !sf->inter_sf.disable_wedge_interintra_search;
+ (sf->inter_sf.disable_interintra_wedge_var_thresh != UINT_MAX);
}
// sf->part_sf.partition_search_breakout_dist_thr is set assuming max 64x64
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 21258f2..d7117a8 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -698,15 +698,15 @@
// Prune warped motion search using previous frame stats.
int prune_warped_prob_thresh;
- // Enable/disable interintra wedge search.
- int disable_wedge_interintra_search;
+ // Variance threshold to enable/disable Interintra wedge search
+ unsigned int disable_interintra_wedge_var_thresh;
+
+ // Variance threshold to enable/disable Interinter wedge search
+ unsigned int disable_interinter_wedge_var_thresh;
// De-couple wedge and mode search during interintra RDO.
int fast_interintra_wedge_search;
- // Only enable wedge search if the variance is above this threshold.
- unsigned int disable_wedge_search_var_thresh;
-
// Whether fast wedge sign estimate is used
int fast_wedge_sign_estimate;
@@ -723,9 +723,6 @@
// Enable/disable smooth inter-intra mode
int disable_smooth_interintra;
- // Disable interinter_wedge
- int disable_interinter_wedge;
-
// Decide when and how to use joint_comp.
DIST_WTD_COMP_FLAG use_dist_wtd_comp_flag;