Add INTER_MODE_RD_TEST

Change-Id: I302e168925b7bf4d11ddbe0b19b46aa02fcd75b1
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index f096644..5d1b05e 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4496,6 +4496,12 @@
     else
       encode_tiles(cpi);
 
+#if CONFIG_COLLECT_INTER_MODE_RD_STATS
+#if INTER_MODE_RD_TEST
+    av1_inter_mode_data_show(cm);
+#endif
+#endif
+
     aom_usec_timer_mark(&emr_timer);
     cpi->time_encode_sb_row += aom_usec_timer_elapsed(&emr_timer);
   }
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 25ed967..7681b18 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -514,6 +514,7 @@
   double dist_mean;
   int skip_count;
   int non_skip_count;
+  int fp_skip_count;
   int bracket_idx;
 } InterModeRdModel;
 
@@ -542,10 +543,24 @@
     md->ready = 0;
     md->skip_count = 0;
     md->non_skip_count = 0;
+    md->fp_skip_count = 0;
     md->bracket_idx = 0;
   }
 }
 
+void av1_inter_mode_data_show(const AV1_COMMON *cm) {
+  printf("frame_offset %d\n", cm->frame_offset);
+  for (int i = 0; i < BLOCK_SIZES_ALL; ++i) {
+    const int block_idx = inter_mode_data_block_idx(i);
+    if (block_idx != -1) inter_mode_data_idx[block_idx] = 0;
+    InterModeRdModel *md = &inter_mode_rd_models[i];
+    if (md->ready) {
+      printf("bsize %d non_skip_count %d skip_count %d fp_skip_count %d\n", i,
+             md->non_skip_count, md->skip_count, md->fp_skip_count);
+    }
+  }
+}
+
 static int64_t get_est_rd(BLOCK_SIZE bsize, int rdmult, int64_t sse,
                           int curr_cost) {
   InterModeRdModel *md = &inter_mode_rd_models[bsize];
@@ -7988,11 +8003,18 @@
 #if CONFIG_COLLECT_INTER_MODE_RD_STATS
 #if !INTER_MODE_RD_STATS_DUMP
       InterModeRdModel *md = &inter_mode_rd_models[mbmi->sb_type];
+      int64_t est_rd = 0;
+      int est_skip = 0;
       if (md->ready) {
         const int64_t curr_sse = get_sse(cpi, x);
-        const int64_t est_rd =
-            get_est_rd(mbmi->sb_type, x->rdmult, curr_sse, rd_stats->rate);
-        if (est_rd * 0.8 > *best_est_rd) {
+        est_rd = get_est_rd(mbmi->sb_type, x->rdmult, curr_sse, rd_stats->rate);
+        est_skip = est_rd * 0.8 > *best_est_rd;
+#if INTER_MODE_RD_TEST
+        if (est_rd < *best_est_rd) {
+          *best_est_rd = est_rd;
+        }
+#else   // INTER_MODE_RD_TEST
+        if (est_skip) {
           ++md->skip_count;
           mbmi->ref_frame[1] = ref_frame_1;
           continue;
@@ -8002,6 +8024,7 @@
           }
           ++md->non_skip_count;
         }
+#endif  // INTER_MODE_RD_TEST
       }
 #endif  // !INTER_MODE_RD_STATS_DUMP
 #endif  // CONFIG_COLLECT_INTER_MODE_RD_STATS
@@ -8091,6 +8114,24 @@
       }
       *disable_skip = 0;
 #if CONFIG_COLLECT_INTER_MODE_RD_STATS
+#if INTER_MODE_RD_TEST
+      if (md->ready) {
+        int64_t real_rd = RDCOST(x->rdmult, rd_stats->rate, rd_stats->dist);
+        if (est_skip) {
+          ++md->skip_count;
+          if (real_rd < ref_best_rd) {
+            ++md->fp_skip_count;
+          }
+          // int fp_skip = real_rd < ref_best_rd;
+          // printf("est_skip %d fp_skip %d est_rd %ld best_est_rd %ld real_rd
+          // %ld ref_best_rd %ld\n",
+          //        est_skip, fp_skip, est_rd, *best_est_rd, real_rd,
+          //        ref_best_rd);
+        } else {
+          ++md->non_skip_count;
+        }
+      }
+#endif  // INTER_MODE_RD_TEST
       inter_mode_data_push(mbmi->sb_type, rd_stats->sse, rd_stats->dist,
                            rd_stats_y->rate + rd_stats_uv->rate +
                                x->skip_cost[skip_ctx][mbmi->skip],
diff --git a/av1/encoder/rdopt.h b/av1/encoder/rdopt.h
index a701898..4ae32d4 100644
--- a/av1/encoder/rdopt.h
+++ b/av1/encoder/rdopt.h
@@ -130,8 +130,10 @@
                                         int reduced_tx_set);
 
 #if CONFIG_COLLECT_INTER_MODE_RD_STATS
+#define INTER_MODE_RD_TEST 0
 void av1_inter_mode_data_init();
 void av1_inter_mode_data_fit(int rdmult);
+void av1_inter_mode_data_show(const AV1_COMMON *cm);
 #endif
 
 #ifdef __cplusplus