Improve motion mode gating
Introduced a speed feature to gate motion modes based on transform token cost.
For speed = 3 and 4 presets, BD-rate drop is seen by 0.03% and 0.03% (as per AWCY runs) with encode time reduction
of 2.50% and 3.08% (averaged across multiple test cases) respectively.
STATS_CHANGED
Change-Id: I13b5aaf0213f86c9a0a0a8d820acad47c7d52186
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 5dd0d59..4b4d433 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -8683,7 +8683,7 @@
AOMMIN(RDCOST(x->rdmult, rd_stats_y->rate, rd_stats_y->dist),
RDCOST(x->rdmult, 0, rd_stats_y->sse));
// Invalidate rd_stats_y to skip the rest of the motion modes search
- if (tokenonly_rdy - (tokenonly_rdy >> cpi->sf.adaptive_txb_search_level) >
+ if (tokenonly_rdy - (tokenonly_rdy >> cpi->sf.prune_motion_mode_level) >
rd_thresh)
av1_invalid_rd_stats(rd_stats_y);
mbmi->ref_frame[1] = ref_frame_1;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index de4a906..c61c646 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -206,6 +206,7 @@
sf->prune_wedge_pred_diff_based = 1;
sf->disable_wedge_search_var_thresh = 0;
sf->disable_wedge_search_edge_thresh = 0;
+ sf->prune_motion_mode_level = 1;
if (speed >= 1) {
sf->gm_erroradv_type = GM_ERRORADV_TR_1;
@@ -246,6 +247,7 @@
sf->disable_wedge_search_var_thresh = 0;
sf->disable_wedge_search_edge_thresh = 0;
sf->prune_comp_type_by_comp_avg = 1;
+ sf->prune_motion_mode_level = 2;
}
if (speed >= 2) {
@@ -288,6 +290,7 @@
sf->tx_type_search.prune_mode = PRUNE_2D_FAST;
sf->gm_search_type = GM_DISABLE_SEARCH;
sf->prune_comp_search_by_single_result = 2;
+ sf->prune_motion_mode_level = boosted ? 2 : 3;
}
if (speed >= 4) {
@@ -524,6 +527,7 @@
sf->obmc_full_pixel_search_level = 0;
sf->skip_sharp_interp_filter_search = 0;
sf->prune_comp_type_by_comp_avg = 0;
+ sf->prune_motion_mode_level = 0;
if (oxcf->mode == GOOD)
set_good_speed_features_framesize_independent(cpi, sf, oxcf->speed);
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 9f0aac8..268410d 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -597,6 +597,12 @@
// prune wedge and compound segment approximate rd evaluation based on
// compound average rd/ref_best_rd
int prune_comp_type_by_comp_avg;
+
+ // Prune/gate motion mode evaluation based on token based rd
+ // during transform search for inter blocks
+ // Values are 0 (not used) , 1 - 3 with progressively increasing
+ // aggressiveness
+ int prune_motion_mode_level;
} SPEED_FEATURES;
struct AV1_COMP;