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;