Add FAST_BIGDIA motion search method

Change-Id: Ifc506a62719cfab0c1847f22b419ea9d29bd7998
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 375053f..d157685 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1719,7 +1719,7 @@
   av1_init_motion_fpf(&mv_search_params->search_site_cfg[SS_CFG_FPF],
                       fpf_y_stride);
 
-  if (cpi->sf.tpl_sf.search_method == FAST_DIAMOND) {
+  if (cpi->sf.tpl_sf.search_method == FAST_BIGDIA) {
     av1_init_motion_compensation_bigdia(
         &mv_search_params->search_site_cfg[SS_CFG_TPL_SRC], y_stride);
     av1_init_motion_compensation_bigdia(
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index d1e415e..1401963 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -234,7 +234,7 @@
   FULLPEL_MOTION_SEARCH_PARAMS ms_params;
   av1_make_default_fullpel_ms_params(&ms_params, cpi, x, bsize, ref_mv,
                                      first_pass_search_sites,
-                                     fine_search_interval, 0);
+                                     fine_search_interval);
   ms_params.search_method = NSTEP;
 
   FULLPEL_MV this_best_mv;
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c
index bdbff81..9767338 100644
--- a/av1/encoder/mcomp.c
+++ b/av1/encoder/mcomp.c
@@ -80,8 +80,7 @@
                                         const MACROBLOCK *x, BLOCK_SIZE bsize,
                                         const MV *ref_mv,
                                         const search_site_config *search_sites,
-                                        int fine_search_interval,
-                                        int fast_dia_search_level) {
+                                        int fine_search_interval) {
   const MV_SPEED_FEATURES *mv_sf = &cpi->sf.mv_sf;
 
   // High level params
@@ -106,7 +105,6 @@
   ms_params->prune_mesh_search = mv_sf->prune_mesh_search;
   ms_params->run_mesh_search = 0;
   ms_params->fine_search_interval = fine_search_interval;
-  ms_params->fast_dia_search_level = fast_dia_search_level;
 
   ms_params->is_intra_mode = 0;
 
@@ -1454,14 +1452,18 @@
                            const FULLPEL_MOTION_SEARCH_PARAMS *ms_params,
                            const int search_step, const int do_init_search,
                            int *cost_list, FULLPEL_MV *best_mv) {
-  if (ms_params->fast_dia_search_level)
-    return bigdia_search_level1(start_mv, ms_params,
-                                AOMMAX(MAX_MVSEARCH_STEPS - 3, search_step),
-                                do_init_search, cost_list, best_mv);
-  else
-    return bigdia_search(start_mv, ms_params,
-                         AOMMAX(MAX_MVSEARCH_STEPS - 2, search_step),
-                         do_init_search, cost_list, best_mv);
+  return bigdia_search(start_mv, ms_params,
+                       AOMMAX(MAX_MVSEARCH_STEPS - 2, search_step),
+                       do_init_search, cost_list, best_mv);
+}
+
+static int fast_bigdia_search(const FULLPEL_MV start_mv,
+                              const FULLPEL_MOTION_SEARCH_PARAMS *ms_params,
+                              const int search_step, const int do_init_search,
+                              int *cost_list, FULLPEL_MV *best_mv) {
+  return bigdia_search_level1(start_mv, ms_params,
+                              AOMMAX(MAX_MVSEARCH_STEPS - 3, search_step),
+                              do_init_search, cost_list, best_mv);
 }
 
 static int diamond_search_sad(FULLPEL_MV start_mv,
@@ -1888,6 +1890,10 @@
   }
 
   switch (search_method) {
+    case FAST_BIGDIA:
+      var = fast_bigdia_search(start_mv, ms_params, step_param, 0, cost_list,
+                               best_mv);
+      break;
     case FAST_DIAMOND:
       var = fast_dia_search(start_mv, ms_params, step_param, 0, cost_list,
                             best_mv);
diff --git a/av1/encoder/mcomp.h b/av1/encoder/mcomp.h
index d4e2d6f..7cef4fc 100644
--- a/av1/encoder/mcomp.h
+++ b/av1/encoder/mcomp.h
@@ -136,7 +136,8 @@
   BIGDIA = 3,
   SQUARE = 4,
   FAST_HEX = 5,
-  FAST_DIAMOND = 6
+  FAST_DIAMOND = 6,
+  FAST_BIGDIA = 7,
 } UENUM1BYTE(SEARCH_METHODS);
 
 // This struct holds fullpixel motion search parameters that should be constant
@@ -170,11 +171,6 @@
 
   // For calculating mv cost
   MV_COST_PARAMS mv_cost_params;
-
-  // Search level flag for FAST_DIAMOND search method.
-  // 0 : Number of search steps 2
-  // 1 : Number of search steps 3
-  int fast_dia_search_level;
 } FULLPEL_MOTION_SEARCH_PARAMS;
 
 void av1_make_default_fullpel_ms_params(FULLPEL_MOTION_SEARCH_PARAMS *ms_params,
@@ -182,8 +178,7 @@
                                         const MACROBLOCK *x, BLOCK_SIZE bsize,
                                         const MV *ref_mv,
                                         const search_site_config *search_sites,
-                                        int fine_search_interval,
-                                        int fast_dia_search_level);
+                                        int fine_search_interval);
 
 // Sets up configs for fullpixel diamond search
 void av1_init_dsmotion_compensation(search_site_config *cfg, int stride);
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c
index 809c08b..2db1c89 100644
--- a/av1/encoder/motion_search_facade.c
+++ b/av1/encoder/motion_search_facade.c
@@ -185,7 +185,7 @@
       &mv_search_params->search_site_cfg[SS_CFG_SRC];
   FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
   av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, &ref_mv,
-                                     src_search_sites, fine_search_interval, 0);
+                                     src_search_sites, fine_search_interval);
 
   switch (mbmi->motion_mode) {
     case SIMPLE_TRANSLATION: {
@@ -421,7 +421,7 @@
     FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
     av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize,
                                        &ref_mv[id].as_mv, NULL,
-                                       /*fine_search_interval=*/0, 0);
+                                       /*fine_search_interval=*/0);
 
     av1_set_ms_compound_refs(&full_ms_params.ms_buffers, second_pred, mask,
                              mask_stride, id);
@@ -547,7 +547,7 @@
   FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
   av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize,
                                      &ref_mv.as_mv, NULL,
-                                     /*fine_search_interval=*/0, 0);
+                                     /*fine_search_interval=*/0);
 
   av1_set_ms_compound_refs(&full_ms_params.ms_buffers, second_pred, mask,
                            mask_stride, ref_idx);
@@ -765,7 +765,7 @@
   const int fine_search_interval = use_fine_search_interval(cpi);
   FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
   av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, &ref_mv,
-                                     src_search_sites, fine_search_interval, 0);
+                                     src_search_sites, fine_search_interval);
 
   var = av1_full_pixel_search(start_mv, &full_ms_params, step_param,
                               cond_cost_list(cpi, cost_list),
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 93a0c82..e2ccf6d 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -182,7 +182,7 @@
   FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
   av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, &center_mv,
                                      src_search_sites,
-                                     /*fine_search_interval=*/0, 0);
+                                     /*fine_search_interval=*/0);
 
   av1_full_pixel_search(start_mv, &full_ms_params, step_param,
                         cond_cost_list(cpi, cost_list), &tmp_mv->as_fullmv,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 2875e6d..4b77551 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2963,7 +2963,7 @@
       &cpi->mv_search_params.search_site_cfg[SS_CFG_LOOKAHEAD];
   av1_make_default_fullpel_ms_params(&fullms_params, cpi, x, bsize,
                                      &dv_ref.as_mv, lookahead_search_sites,
-                                     /*fine_search_interval=*/0, 0);
+                                     /*fine_search_interval=*/0);
   fullms_params.is_intra_mode = 1;
 
   for (enum IntrabcMotionDirection dir = IBC_MOTION_ABOVE;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index fdf6107..c58eca9 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -563,8 +563,7 @@
 
     sf->tpl_sf.prune_starting_mv = 2;
     sf->tpl_sf.subpel_force_stop = HALF_PEL;
-    sf->tpl_sf.search_method = FAST_DIAMOND;
-    sf->tpl_sf.fast_dia_search_level = 1;
+    sf->tpl_sf.search_method = FAST_BIGDIA;
 
     sf->tx_sf.tx_type_search.winner_mode_tx_type_pruning = 1;
     sf->tx_sf.tx_type_search.fast_intra_tx_type_search = 1;
@@ -844,8 +843,6 @@
     sf->rd_sf.optimize_coefficients = NO_TRELLIS_OPT;
     sf->rd_sf.simple_model_rd_from_var = 1;
 
-    sf->tpl_sf.search_method = FAST_DIAMOND;
-
     sf->lpf_sf.cdef_pick_method = CDEF_PICK_FROM_Q;
     sf->lpf_sf.lpf_pick = LPF_PICK_FROM_Q;
 
@@ -942,7 +939,6 @@
   tpl_sf->subpel_force_stop = EIGHTH_PEL;
   tpl_sf->search_method = NSTEP;
   tpl_sf->disable_filtered_key_tpl = 0;
-  tpl_sf->fast_dia_search_level = 0;
 }
 
 static AOM_INLINE void init_gm_sf(GLOBAL_MOTION_SPEED_FEATURES *gm_sf) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index a2d24fb..436d639 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -345,11 +345,6 @@
 
   // Not run TPL for filtered Key frame.
   int disable_filtered_key_tpl;
-
-  // Search level flag for FAST_DIAMOND search method.
-  // 0 : Number of search steps 2
-  // 1 : Number of search steps 3
-  int fast_dia_search_level;
 } TPL_SPEED_FEATURES;
 
 typedef struct GLOBAL_MOTION_SPEED_FEATURES {
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index 5a007b8..9ce3306 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -129,7 +129,7 @@
 
   av1_make_default_fullpel_ms_params(&full_ms_params, cpi, mb, block_size,
                                      &baseline_mv, &search_site_cfg,
-                                     /*fine_search_interval=*/0, 0);
+                                     /*fine_search_interval=*/0);
   full_ms_params.run_mesh_search = 1;
   full_ms_params.search_method = full_search_method;
   full_ms_params.mv_cost_params.mv_cost_type = mv_cost_type;
@@ -182,7 +182,7 @@
         av1_make_default_fullpel_ms_params(&full_ms_params, cpi, mb,
                                            subblock_size, &baseline_mv,
                                            &search_site_cfg,
-                                           /*fine_search_interval=*/0, 0);
+                                           /*fine_search_interval=*/0);
         full_ms_params.run_mesh_search = 1;
         full_ms_params.search_method = full_search_method;
         full_ms_params.mv_cost_params.mv_cost_type = mv_cost_type;
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 013d034..84975b2 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -165,7 +165,7 @@
 
   // When motion search method is FAST_DIAMOND retrive
   // search_site_cfg from corresponding buffers.
-  if (tpl_sf->search_method == FAST_DIAMOND) {
+  if (tpl_sf->search_method == FAST_BIGDIA) {
     search_site_cfg = &cpi->mv_search_params.search_site_cfg[SS_CFG_TPL_SRC];
     if (search_site_cfg->stride != stride_ref)
       search_site_cfg =
@@ -179,9 +179,9 @@
   assert(search_site_cfg->stride == stride_ref);
 
   FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
-  av1_make_default_fullpel_ms_params(
-      &full_ms_params, cpi, x, bsize, &center_mv, search_site_cfg,
-      /*fine_search_interval=*/0, cpi->sf.tpl_sf.fast_dia_search_level);
+  av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, &center_mv,
+                                     search_site_cfg,
+                                     /*fine_search_interval=*/0);
   full_ms_params.search_method = tpl_sf->search_method;
 
   av1_full_pixel_search(start_mv, &full_ms_params, step_param,