Fix intra pruning sfs in interframe

The SKIP_INTRA_BESTINTER and SKIP_INTRA_DIRMISMATCH speed features
currently prune all intramodes that's not DC if they are enabled. This
commit correct them to their original purpose.

No change is expected for normal encoding as they are not enabled, but
this might affect rt-mode.

Change-Id: I68e02382623587857a74680f9b54873120121927
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index cbdb832..91d3dbd 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -12705,21 +12705,6 @@
             search_state.best_pred_sse)
           continue;
 
-      if (this_mode != DC_PRED) {
-        // Only search the oblique modes if the best so far is
-        // one of the neighboring directional modes
-        if ((sf->mode_search_skip_flags & FLAG_SKIP_INTRA_BESTINTER) &&
-            (this_mode >= D45_PRED && this_mode <= PAETH_PRED)) {
-          if (search_state.best_mode_index >= 0 &&
-              search_state.best_mbmode.ref_frame[0] > INTRA_FRAME)
-            continue;
-        }
-        if (sf->mode_search_skip_flags & FLAG_SKIP_INTRA_DIRMISMATCH) {
-          if (conditional_skipintra(this_mode, search_state.best_intra_mode))
-            continue;
-        }
-      }
-
       // Intra modes will be handled in another loop later.
       assert(intra_mode_num < INTRA_MODES);
       intra_mode_idx_ls[intra_mode_num++] = midx;
@@ -12975,11 +12960,29 @@
   for (int j = 0; j < intra_mode_num; ++j) {
     if (sf->skip_intra_in_interframe && search_state.skip_intra_modes) break;
     const int mode_index = intra_mode_idx_ls[j];
+    const MODE_DEFINITION *mode_order = &av1_mode_order[mode_index];
+    const PREDICTION_MODE this_mode = mode_order->mode;
+
     assert(av1_mode_order[mode_index].ref_frame[0] == INTRA_FRAME);
     assert(av1_mode_order[mode_index].ref_frame[1] == NONE_FRAME);
     init_mbmi(mbmi, mode_index, cm);
     x->skip = 0;
 
+    if (this_mode != DC_PRED) {
+      // Only search the oblique modes if the best so far is
+      // one of the neighboring directional modes
+      if ((sf->mode_search_skip_flags & FLAG_SKIP_INTRA_BESTINTER) &&
+          (this_mode >= D45_PRED && this_mode <= PAETH_PRED)) {
+        if (search_state.best_mode_index >= 0 &&
+            search_state.best_mbmode.ref_frame[0] > INTRA_FRAME)
+          continue;
+      }
+      if (sf->mode_search_skip_flags & FLAG_SKIP_INTRA_DIRMISMATCH) {
+        if (conditional_skipintra(this_mode, search_state.best_intra_mode))
+          continue;
+      }
+    }
+
     RD_STATS intra_rd_stats, intra_rd_stats_y, intra_rd_stats_uv;
     intra_rd_stats.rdcost = handle_intra_mode(
         &search_state, cpi, x, bsize, mi_row, mi_col, intra_ref_frame_cost, ctx,
@@ -13374,21 +13377,6 @@
         if ((x->source_variance << num_pels_log2_lookup[bsize]) >
             search_state.best_pred_sse)
           continue;
-
-      if (this_mode != DC_PRED) {
-        // Only search the oblique modes if the best so far is
-        // one of the neighboring directional modes
-        if ((sf->mode_search_skip_flags & FLAG_SKIP_INTRA_BESTINTER) &&
-            (this_mode >= D45_PRED && this_mode <= PAETH_PRED)) {
-          if (search_state.best_mode_index >= 0 &&
-              search_state.best_mbmode.ref_frame[0] > INTRA_FRAME)
-            continue;
-        }
-        if (sf->mode_search_skip_flags & FLAG_SKIP_INTRA_DIRMISMATCH) {
-          if (conditional_skipintra(this_mode, search_state.best_intra_mode))
-            continue;
-        }
-      }
     }
 
     // Select prediction reference frames.
@@ -13564,11 +13552,27 @@
 
   for (int j = 0; j < intra_mode_num; ++j) {
     const int mode_index = intra_mode_idx_ls[j];
+    const MODE_DEFINITION *mode_order = &av1_mode_order[mode_index];
+    const PREDICTION_MODE curr_mode = mode_order->mode;
     const MV_REFERENCE_FRAME ref_frame =
         av1_mode_order[mode_index].ref_frame[0];
     assert(av1_mode_order[mode_index].ref_frame[1] == NONE_FRAME);
     assert(ref_frame == INTRA_FRAME);
     if (sf->skip_intra_in_interframe && search_state.skip_intra_modes) break;
+    if (curr_mode != DC_PRED) {
+      // Only search the oblique modes if the best so far is
+      // one of the neighboring directional modes
+      if ((sf->mode_search_skip_flags & FLAG_SKIP_INTRA_BESTINTER) &&
+          (curr_mode >= D45_PRED && curr_mode <= PAETH_PRED)) {
+        if (search_state.best_mode_index >= 0 &&
+            search_state.best_mbmode.ref_frame[0] > INTRA_FRAME)
+          continue;
+      }
+      if (sf->mode_search_skip_flags & FLAG_SKIP_INTRA_DIRMISMATCH) {
+        if (conditional_skipintra(curr_mode, search_state.best_intra_mode))
+          continue;
+      }
+    }
     init_mbmi(mbmi, mode_index, cm);
     x->skip = 0;
     set_ref_ptrs(cm, xd, INTRA_FRAME, NONE_FRAME);