Revert "Remove now-unused interp_filter_selected[][]"

This reverts commit 062e57214ea52b22c0de306020a2c1c62206906a.

Reason for revert:
The CL(https://aomedia-review.googlesource.com/c/aom/+/77661)
optimizes the interp filter search, and needs interp_filter_selected.

Change-Id: I645a858961568894d280f491079743479ceb2397
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 44b7c4a..3140551 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -627,6 +627,7 @@
           av1_extract_interp_filter(mbmi->interp_filters, dir);
       aom_write_symbol(w, filter, ec_ctx->switchable_interp_cdf[ctx],
                        SWITCHABLE_FILTERS);
+      ++cpi->interp_filter_selected[0][filter];
       if (cm->seq_params.enable_dual_filter == 0) return;
     }
   }
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 5a5cffd..46554d0 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -421,10 +421,12 @@
   if (cm->current_frame.frame_type == KEY_FRAME && cm->show_frame) {
     cpi->refresh_golden_frame = 1;
     cpi->refresh_alt_ref_frame = 1;
+    av1_zero(cpi->interp_filter_selected);
     set_sb_size(&cm->seq_params, select_sb_size(cpi));
   } else if (frame_is_sframe(cm)) {
     cpi->refresh_golden_frame = 1;
     cpi->refresh_alt_ref_frame = 1;
+    av1_zero(cpi->interp_filter_selected);
     set_sb_size(&cm->seq_params, select_sb_size(cpi));
   } else {
     const RefCntBuffer *const primary_ref_buf = get_primary_ref_frame_buf(cm);
@@ -435,6 +437,7 @@
     } else {
       *cm->fc = primary_ref_buf->frame_context;
     }
+    av1_zero(cpi->interp_filter_selected[0]);
   }
 
   cm->prev_frame = get_primary_ref_frame_buf(cm);
@@ -3533,6 +3536,12 @@
     const int ref_idx = ref_frame - LAST_FRAME;
     cpi->common.remapped_ref_idx[ref_idx] =
         cpi->common.remapped_ref_idx[ref_idx - 1];
+
+    if (!cpi->rc.is_src_frame_alt_ref) {
+      memcpy(cpi->interp_filter_selected[ref_frame],
+             cpi->interp_filter_selected[ref_frame - 1],
+             sizeof(cpi->interp_filter_selected[ref_frame - 1]));
+    }
   }
 }
 
@@ -3547,6 +3556,11 @@
                                       EXTREF_FRAME };
 
   for (int i = 2; i > 0; --i) {
+    // [0] is allocated to the current coded frame, i.e. bwdref
+    memcpy(cpi->interp_filter_selected[ordered_bwd[i]],
+           cpi->interp_filter_selected[ordered_bwd[i - 1]],
+           sizeof(cpi->interp_filter_selected[ordered_bwd[i - 1]]));
+
     cpi->common.remapped_ref_idx[ordered_bwd[i] - LAST_FRAME] =
         cpi->common.remapped_ref_idx[ordered_bwd[i - 1] - LAST_FRAME];
   }
@@ -3562,6 +3576,11 @@
                                       EXTREF_FRAME };
 
   for (int i = 0; i < 2; ++i) {
+    // [0] is allocated to the current coded frame, i.e. bwdref
+    memcpy(cpi->interp_filter_selected[ordered_bwd[i]],
+           cpi->interp_filter_selected[ordered_bwd[i + 1]],
+           sizeof(cpi->interp_filter_selected[ordered_bwd[i + 1]]));
+
     cpi->common.remapped_ref_idx[ordered_bwd[i] - LAST_FRAME] =
         cpi->common.remapped_ref_idx[ordered_bwd[i + 1] - LAST_FRAME];
   }
@@ -3633,6 +3652,9 @@
     cm->remapped_ref_idx[ALTREF_FRAME - LAST_FRAME] =
         get_ref_frame_map_idx(cm, GOLDEN_FRAME);
     cm->remapped_ref_idx[GOLDEN_FRAME - LAST_FRAME] = tmp;
+
+    // TODO(zoeliu): Do we need to copy cpi->interp_filter_selected[0] over to
+    // cpi->interp_filter_selected[GOLDEN_FRAME]?
   } else if (cpi->rc.is_src_frame_ext_arf && encode_show_existing_frame(cm)) {
 #if CONFIG_DEBUG
     const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
@@ -3653,6 +3675,9 @@
     cm->remapped_ref_idx[LAST_FRAME - LAST_FRAME] =
         get_ref_frame_map_idx(cm, bwdref_to_show);
 
+    memcpy(cpi->interp_filter_selected[LAST_FRAME],
+           cpi->interp_filter_selected[bwdref_to_show],
+           sizeof(cpi->interp_filter_selected[bwdref_to_show]));
 #if USE_SYMM_MULTI_LAYER
     if (cpi->new_bwdref_update_rule == 1) {
       lshift_bwd_ref_frames(cpi);
@@ -3670,6 +3695,10 @@
     if (cpi->refresh_alt_ref_frame) {
       int arf_idx = get_ref_frame_map_idx(cm, ALTREF_FRAME);
       assign_frame_buffer_p(&cm->ref_frame_map[arf_idx], cm->cur_frame);
+
+      memcpy(cpi->interp_filter_selected[ALTREF_FRAME],
+             cpi->interp_filter_selected[0],
+             sizeof(cpi->interp_filter_selected[0]));
     }
 
     // === GOLDEN_FRAME ===
@@ -3677,6 +3706,10 @@
       assign_frame_buffer_p(
           &cm->ref_frame_map[get_ref_frame_map_idx(cm, GOLDEN_FRAME)],
           cm->cur_frame);
+
+      memcpy(cpi->interp_filter_selected[GOLDEN_FRAME],
+             cpi->interp_filter_selected[0],
+             sizeof(cpi->interp_filter_selected[0]));
     }
 
     // === BWDREF_FRAME ===
@@ -3700,6 +3733,9 @@
 #if USE_SYMM_MULTI_LAYER
       }
 #endif
+      memcpy(cpi->interp_filter_selected[BWDREF_FRAME],
+             cpi->interp_filter_selected[0],
+             sizeof(cpi->interp_filter_selected[0]));
     }
 
     // === ALTREF2_FRAME ===
@@ -3707,6 +3743,10 @@
       assign_frame_buffer_p(
           &cm->ref_frame_map[get_ref_frame_map_idx(cm, ALTREF2_FRAME)],
           cm->cur_frame);
+
+      memcpy(cpi->interp_filter_selected[ALTREF2_FRAME],
+             cpi->interp_filter_selected[0],
+             sizeof(cpi->interp_filter_selected[0]));
     }
   }
 
@@ -3751,6 +3791,9 @@
     cm->remapped_ref_idx[LAST_FRAME - LAST_FRAME] = last3_remapped_idx;
 
     assert(!encode_show_existing_frame(cm));
+    memcpy(cpi->interp_filter_selected[LAST_FRAME],
+           cpi->interp_filter_selected[0],
+           sizeof(cpi->interp_filter_selected[0]));
 
     // If the new structure is used, we will always have overlay frames coupled
     // with bwdref frames. Therefore, we won't have to perform this update
@@ -3774,6 +3817,10 @@
       cm->remapped_ref_idx[LAST_FRAME - LAST_FRAME] =
           get_ref_frame_map_idx(cm, BWDREF_FRAME);
       cm->remapped_ref_idx[BWDREF_FRAME - LAST_FRAME] = last3_remapped_idx;
+
+      memcpy(cpi->interp_filter_selected[LAST_FRAME],
+             cpi->interp_filter_selected[BWDREF_FRAME],
+             sizeof(cpi->interp_filter_selected[BWDREF_FRAME]));
     }
   }
 
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 910b2de..adeba12 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -703,6 +703,12 @@
   RATE_CONTROL rc;
   double framerate;
 
+  // Relevant for an inter frame.
+  // - Index '0' corresponds to the values for the currently coded frame.
+  // - Indices LAST_FRAME ... EXTREF_FRAMES are used to store values for all the
+  // possible inter reference frames.
+  int interp_filter_selected[REF_FRAMES + 1][SWITCHABLE];
+
   struct aom_codec_pkt_list *output_pkt_list;
 
   MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS];