Skip intra modes in interframe prediction

Skip remaining intra modes in rd search, when current intra_rd
is 1.5 times worse than current best_rd.

Performance: -0.01%
Speed: 5% faster.

Change-Id: I0265fe4618a23d676546b929cd5f694ce9a890f3
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index a6bb904..c6b0c16 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -9227,6 +9227,7 @@
   int64_t mode_threshold[MAX_MODES];
   int *mode_map = tile_data->mode_map[bsize];
   const int mode_search_skip_flags = sf->mode_search_skip_flags;
+  int skip_intra_modes = 0;
 
   HandleInterModeArgs args = {
     { NULL },  { MAX_SB_SIZE, MAX_SB_SIZE, MAX_SB_SIZE },
@@ -9510,6 +9511,10 @@
     second_ref_frame = av1_mode_order[mode_index].ref_frame[1];
     mbmi->ref_mv_idx = 0;
 
+    if (ref_frame == INTRA_FRAME) {
+      if (sf->skip_intra_in_interframe && skip_intra_modes) continue;
+    }
+
     if (sf->drop_ref) {
       if (ref_frame > INTRA_FRAME && second_ref_frame > INTRA_FRAME) {
         if (num_available_refs > 2) {
@@ -10211,6 +10216,11 @@
         best_intra_rd = this_rd;
         best_intra_mode = mbmi->mode;
       }
+
+      if (sf->skip_intra_in_interframe) {
+        if (best_rd != INT64_MAX && this_rd > (best_rd + (best_rd >> 1)))
+          skip_intra_modes = 1;
+      }
     }
 
     if (!disable_skip && ref_frame == INTRA_FRAME) {
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 2d19300..da52789 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -493,6 +493,7 @@
   sf->disable_wedge_search_var_thresh = 0;
   sf->fast_wedge_sign_estimate = 0;
   sf->drop_ref = 0;
+  sf->skip_intra_in_interframe = 1;
 
   for (i = 0; i < TX_SIZES; i++) {
     sf->intra_y_mode_mask[i] = INTRA_ALL;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index dc7d08f..6a3ce90 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -538,6 +538,9 @@
 
   // flag to drop some ref frames in compound motion search
   int drop_ref;
+
+  // flag to allow skipping intra mode for inter frame prediction
+  int skip_intra_in_interframe;
 } SPEED_FEATURES;
 
 struct AV1_COMP;