Modularize interp filter search params in AV1_COMP

This CL gropus interpolation filter search related variables from
AV1_COMP into a new struct InterpSearchFlags, and cleans up related
function interfaces.

BUG=aomedia:2610

Change-Id: Ib88245ece6de3de1fa4eeec7f7ffd60fdaacbd37
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index cf92f21..d2f9d95 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -5294,11 +5294,12 @@
   return 0;
 }
 
-static AOM_INLINE void set_default_interp_skip_flags(AV1_COMP *cpi) {
-  const int num_planes = av1_num_planes(&cpi->common);
-  cpi->default_interp_skip_flags = (num_planes == 1)
-                                       ? INTERP_SKIP_LUMA_EVAL_CHROMA
-                                       : INTERP_SKIP_LUMA_SKIP_CHROMA;
+static AOM_INLINE void set_default_interp_skip_flags(
+    const AV1_COMMON *cm, InterpSearchFlags *interp_search_flags) {
+  const int num_planes = av1_num_planes(cm);
+  interp_search_flags->default_interp_skip_flags =
+      (num_planes == 1) ? INTERP_SKIP_LUMA_EVAL_CHROMA
+                        : INTERP_SKIP_LUMA_SKIP_CHROMA;
 }
 
 // TODO(Remya): Can include erroradv_prod_tr[] for threshold calculation
@@ -5766,7 +5767,7 @@
   av1_initialize_me_consts(cpi, x, quant_params->base_qindex);
 
   init_encode_frame_mb_context(cpi);
-  set_default_interp_skip_flags(cpi);
+  set_default_interp_skip_flags(cm, &cpi->interp_search_flags);
   if (cm->prev_frame && cm->prev_frame->seg.enabled)
     cm->last_frame_seg_map = cm->prev_frame->seg_map;
   else
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 43f85a3..73e7b58 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -5399,7 +5399,8 @@
   set_size_independent_vars(cpi);
   if (is_stat_consumption_stage_twopass(cpi) &&
       cpi->sf.interp_sf.adaptive_interp_filter_search)
-    cpi->interp_filter_search_mask = setup_interp_filter_search_mask(cpi);
+    cpi->interp_search_flags.interp_filter_search_mask =
+        setup_interp_filter_search_mask(cpi);
   cpi->source->buf_8bit_valid = 0;
 
   av1_setup_frame_size(cpi);
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 6eadff3..f1d51f7 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -845,6 +845,14 @@
 } GlobalMotionInfo;
 
 typedef struct {
+  // Stores the default value of skip flag depending on chroma format
+  // Set as 1 for monochrome and 3 for other color formats
+  int default_interp_skip_flags;
+  // Filter mask to allow certain interp_filter type.
+  uint16_t interp_filter_search_mask;
+} InterpSearchFlags;
+
+typedef struct {
   // Largest MV component used in a frame.
   // The value from the previous frame is used to set the full pixel search
   // range for the current frame.
@@ -1204,11 +1212,9 @@
 #if CONFIG_DENOISE
   struct aom_denoise_and_model_t *denoise_and_model;
 #endif
-  // Stores the default value of skip flag depending on chroma format
-  // Set as 1 for monochrome and 3 for other color formats
-  int default_interp_skip_flags;
-  // Filter mask to allow certain interp_filter type.
-  uint16_t interp_filter_search_mask;
+
+  // Flags related to interpolation filter search.
+  InterpSearchFlags interp_search_flags;
 
   MultiThreadHandle multi_thread_ctxt;
   void (*row_mt_sync_read_ptr)(AV1RowMTSync *const, int, int);
diff --git a/av1/encoder/interp_search.c b/av1/encoder/interp_search.c
index 151281f..377eb66 100644
--- a/av1/encoder/interp_search.c
+++ b/av1/encoder/interp_search.c
@@ -163,6 +163,7 @@
     const BUFFER_SET *dst_bufs[2], int filter_idx, const int switchable_ctx[2],
     const int skip_pred) {
   const AV1_COMMON *cm = &cpi->common;
+  const InterpSearchFlags *interp_search_flags = &cpi->interp_search_flags;
   const int num_planes = av1_num_planes(cm);
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
@@ -190,7 +191,8 @@
   assert((rd_stats_luma->sse >= 0) && (rd_stats->sse >= 0));
   assert((rd_stats_luma->skip == 0) || (rd_stats_luma->skip == 1));
   assert((rd_stats->skip == 0) || (rd_stats->skip == 1));
-  assert((skip_pred >= 0) && (skip_pred <= cpi->default_interp_skip_flags));
+  assert((skip_pred >= 0) &&
+         (skip_pred <= interp_search_flags->default_interp_skip_flags));
 
   // When skip pred is equal to default_interp_skip_flags,
   // skip both luma and chroma MC.
@@ -199,9 +201,10 @@
   // skip_pred = 1: skip both luma and chroma
   // skip_pred = 0: Evaluate luma and as num_planes=1,
   // skip chroma evaluation
-  int tmp_skip_pred = (skip_pred == cpi->default_interp_skip_flags)
-                          ? INTERP_SKIP_LUMA_SKIP_CHROMA
-                          : skip_pred;
+  int tmp_skip_pred =
+      (skip_pred == interp_search_flags->default_interp_skip_flags)
+          ? INTERP_SKIP_LUMA_SKIP_CHROMA
+          : skip_pred;
 
   switch (tmp_skip_pred) {
     case INTERP_EVAL_LUMA_EVAL_CHROMA:
@@ -244,7 +247,7 @@
   if (tmp_rd < *rd) {
     *rd = tmp_rd;
     *switchable_rate = tmp_rs;
-    if (skip_pred != cpi->default_interp_skip_flags) {
+    if (skip_pred != interp_search_flags->default_interp_skip_flags) {
       if (skip_pred == INTERP_EVAL_LUMA_EVAL_CHROMA) {
         // Overwrite the data as current filter is the best one
         *rd_stats_luma = this_rd_stats_luma;
@@ -318,7 +321,9 @@
   // If no filter are set to be evaluated, return from function
   if (allow_interp_mask == 0x0) return best_filt_type;
   // For block width or height is 4, skip the pred evaluation of SHARP_SHARP
-  tmp_skip_pred = is_w4_or_h4 ? cpi->default_interp_skip_flags : skip_pred;
+  tmp_skip_pred = is_w4_or_h4
+                      ? cpi->interp_search_flags.default_interp_skip_flags
+                      : skip_pred;
 
   // Loop over the all filter types and evaluate for only allowed filter types
   for (int filt_type = SHARP_SHARP; filt_type >= REG_REG; --filt_type) {
@@ -379,6 +384,7 @@
     RD_STATS *rd_stats, int *const switchable_rate,
     const BUFFER_SET *dst_bufs[2], const int switchable_ctx[2],
     const int skip_hor, const int skip_ver) {
+  const InterpSearchFlags *interp_search_flags = &cpi->interp_search_flags;
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
   INTERP_PRED_TYPE pred_filter_type = INTERP_HORZ_NEQ_VERT_NEQ;
@@ -398,7 +404,8 @@
     const int bw = block_size_wide[bsize];
     const int bh = block_size_high[bsize];
     int best_dual_mode = 0;
-    int skip_pred = bw <= 4 ? cpi->default_interp_skip_flags : skip_hor;
+    int skip_pred =
+        bw <= 4 ? interp_search_flags->default_interp_skip_flags : skip_hor;
     // TODO(any): Make use of find_best_interp_rd_facade()
     // if speed impact is negligible
     for (int i = (SWITCHABLE_FILTERS - 1); i >= 1; --i) {
@@ -410,7 +417,8 @@
       skip_pred = skip_hor;
     }
     // From best of horizontal EIGHTTAP_REGULAR modes, check vertical modes
-    skip_pred = bh <= 4 ? cpi->default_interp_skip_flags : skip_ver;
+    skip_pred =
+        bh <= 4 ? interp_search_flags->default_interp_skip_flags : skip_ver;
     for (int i = (best_dual_mode + (SWITCHABLE_FILTERS * 2));
          i >= (best_dual_mode + SWITCHABLE_FILTERS); i -= SWITCHABLE_FILTERS) {
       interpolation_filter_rd(x, cpi, tile_data, bsize, orig_dst, rd,
@@ -429,11 +437,13 @@
     RD_STATS *rd_stats, int *const switchable_rate,
     const BUFFER_SET *dst_bufs[2], const int switchable_ctx[2],
     const int skip_ver, const int skip_hor) {
+  const InterpSearchFlags *interp_search_flags = &cpi->interp_search_flags;
   int8_t i;
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
 
-  uint16_t interp_filter_search_mask = cpi->interp_filter_search_mask;
+  uint16_t interp_filter_search_mask =
+      interp_search_flags->interp_filter_search_mask;
 
   if (cpi->sf.interp_sf.adaptive_interp_filter_search == 2) {
     const FRAME_UPDATE_TYPE update_type = get_frame_update_type(&cpi->gf_group);
@@ -459,7 +469,7 @@
   // Regular filter evaluation should have been done and hence the same should
   // be the winner
   assert(x->e_mbd.mi[0]->interp_filters.as_int == filter_sets[0].as_int);
-  if ((skip_hor & skip_ver) != cpi->default_interp_skip_flags) {
+  if ((skip_hor & skip_ver) != interp_search_flags->default_interp_skip_flags) {
     INTERP_PRED_TYPE pred_filter_type = INTERP_HORZ_NEQ_VERT_NEQ;
     int_interpfilters af = av1_broadcast_interp_filter(INTERP_INVALID);
     int_interpfilters lf = af;
@@ -497,9 +507,9 @@
 
   if ((bsize == BLOCK_4X4) ||
       (block_size_wide[bsize] == 4 &&
-       skip_ver == cpi->default_interp_skip_flags) ||
+       skip_ver == interp_search_flags->default_interp_skip_flags) ||
       (block_size_high[bsize] == 4 &&
-       skip_hor == cpi->default_interp_skip_flags)) {
+       skip_hor == interp_search_flags->default_interp_skip_flags)) {
     int skip_pred = skip_hor & skip_ver;
     uint16_t allowed_interp_mask = 0;
 
@@ -533,7 +543,7 @@
       // TODO(any): Refine this gating based on modelled rd only (i.e., by not
       // accounting switchable filter rate)
       if (cpi->sf.interp_sf.skip_sharp_interp_filter_search &&
-          skip_pred != cpi->default_interp_skip_flags) {
+          skip_pred != interp_search_flags->default_interp_skip_flags) {
         if (mbmi->interp_filters.as_int == filter_sets[SMOOTH_SMOOTH].as_int)
           break;
       }
@@ -600,6 +610,7 @@
     int64_t *const rd, int *const switchable_rate, int *skip_build_pred,
     HandleInterModeArgs *args, int64_t ref_best_rd) {
   const AV1_COMMON *cm = &cpi->common;
+  const InterpSearchFlags *interp_search_flags = &cpi->interp_search_flags;
   const int num_planes = av1_num_planes(cm);
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
@@ -686,8 +697,8 @@
   // luma and chroma MC"  Skip flag=1 corresponds to "Skip Luma MC only"
   // Skip_flag=2 is not a valid case
   // skip_flag=3 corresponds to "Skip both luma and chroma MC"
-  int skip_hor = cpi->default_interp_skip_flags;
-  int skip_ver = cpi->default_interp_skip_flags;
+  int skip_hor = interp_search_flags->default_interp_skip_flags;
+  int skip_ver = interp_search_flags->default_interp_skip_flags;
   calc_interp_skip_pred_flag(x, cpi, &skip_hor, &skip_ver);
 
   // do interp_filter search