Add speed feature smooth interintra for speed >= 4

Added a speed feature to disable smooth interintra mode for inter frames
in highest layer while speed >= 4

For speed 4 preset, BD-rate drop is seen by 0.03% (as per AWCY runs)
with encode time reduction of 2% (averaged across multiple test cases).

STATS_CHANGED

Change-Id: I3ffede30ec5658b2068749cd4bae77eb43ebec27
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index fe1a2ac..4d9bb7a 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -8953,7 +8953,8 @@
   mbmi->ref_frame[1] = INTRA_FRAME;
   best_interintra_mode = args->inter_intra_mode[mbmi->ref_frame[0]];
 
-  if (cpi->oxcf.enable_smooth_interintra) {
+  if (cpi->oxcf.enable_smooth_interintra &&
+      !cpi->sf.disable_smooth_interintra) {
     mbmi->use_wedge_interintra = 0;
     int j = 0;
     if (cpi->sf.reuse_inter_intra_mode == 0 ||
@@ -8978,7 +8979,8 @@
       }
       args->inter_intra_mode[mbmi->ref_frame[0]] = best_interintra_mode;
     }
-    assert(IMPLIES(!cpi->oxcf.enable_smooth_interintra,
+    assert(IMPLIES(!cpi->oxcf.enable_smooth_interintra ||
+                       cpi->sf.disable_smooth_interintra,
                    best_interintra_mode != II_SMOOTH_PRED));
     rmode = interintra_mode_cost[best_interintra_mode];
     if (j == 0 || best_interintra_mode != II_SMOOTH_PRED) {
@@ -9010,7 +9012,8 @@
       rwedge = av1_cost_literal(get_interintra_wedge_bits(bsize)) +
                x->wedge_interintra_cost[bsize][1];
 
-      if (!cpi->oxcf.enable_smooth_interintra) {
+      if (!cpi->oxcf.enable_smooth_interintra ||
+          cpi->sf.disable_smooth_interintra) {
         if (best_interintra_mode == INTERINTRA_MODES) {
           mbmi->interintra_mode = II_SMOOTH_PRED;
           best_interintra_mode = II_SMOOTH_PRED;
@@ -9091,7 +9094,8 @@
                     rd_stats.dist);
       }
       best_interintra_rd_wedge = rd;
-      if (!cpi->oxcf.enable_smooth_interintra &&
+      if ((!cpi->oxcf.enable_smooth_interintra ||
+           cpi->sf.disable_smooth_interintra) &&
           best_interintra_rd_wedge == INT64_MAX)
         return -1;
       if (best_interintra_rd_wedge < best_interintra_rd_nowedge) {
@@ -9106,10 +9110,14 @@
                                       AOM_PLANE_Y, AOM_PLANE_Y);
       }
     } else {
-      if (!cpi->oxcf.enable_smooth_interintra) return -1;
+      if (!cpi->oxcf.enable_smooth_interintra ||
+          cpi->sf.disable_smooth_interintra)
+        return -1;
       mbmi->use_wedge_interintra = 0;
     }
-  }  // if (is_wedge_used)
+  } else {
+    if (best_interintra_rd == INT64_MAX) return -1;
+  }
   if (num_planes > 1) {
     av1_enc_build_inter_predictor(cm, xd, mi_row, mi_col, orig_dst, bsize,
                                   AOM_PLANE_U, num_planes - 1);
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 5237b03..93d6ea4 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -344,6 +344,13 @@
     sf->mv.subpel_search_method = SUBPEL_TREE_PRUNED;
     sf->adaptive_pred_interp_filter = 0;
     sf->adaptive_mode_search = 1;
+    // TODO(any): evaluate this speed feature for 2 and 3
+    if (cpi->oxcf.enable_smooth_interintra) {
+      sf->disable_smooth_interintra =
+          (boosted || cpi->refresh_bwd_ref_frame || cpi->refresh_alt2_ref_frame)
+              ? 0
+              : 1;
+    }
     sf->cb_partition_search = !boosted;
     sf->alt_ref_search_fp = 1;
     sf->skip_sharp_interp_filter_search = 1;
@@ -774,6 +781,7 @@
   sf->skip_sharp_interp_filter_search = 0;
   sf->prune_comp_type_by_comp_avg = 0;
   sf->disable_interinter_wedge_newmv_search = 0;
+  sf->disable_smooth_interintra = 0;
   sf->prune_motion_mode_level = 0;
   sf->prune_warp_using_wmtype = 0;
   sf->disable_wedge_interintra_search = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index b055904..66c096d 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -615,6 +615,9 @@
   // Enable/disable ME for interinter wedge search.
   int disable_interinter_wedge_newmv_search;
 
+  // Enable/disable smooth inter-intra mode
+  int disable_smooth_interintra;
+
   // skip sharp_filter evaluation based on regular and smooth filter rd for
   // dual_filter=0 case
   int skip_sharp_interp_filter_search;