Fix interp filter type bit cost calculation

Fix interp filter type bit cost calculation when dual fitler
is disabled, which is the case for speed >= 2 currently.

Coding gains for speed 2 (150 frames, constant-q mode):
lowres 0.22%
midres 0.15%

STATS_CHANGED for speed >= 2.

Change-Id: I1057cf806b08e0144bdb6902c100de81e190a0aa
(cherry picked from commit 22100852882b21a0972c149789d7468d7f73f8ba)
diff --git a/av1/encoder/encodeframe_utils.h b/av1/encoder/encodeframe_utils.h
index e8ff43b..ef70292 100644
--- a/av1/encoder/encodeframe_utils.h
+++ b/av1/encoder/encodeframe_utils.h
@@ -165,6 +165,9 @@
 }
 
 static AOM_INLINE void update_filter_type_cdf(const MACROBLOCKD *xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                                              int dual_filter,
+#endif  // CONFIG_REMOVE_DUAL_FILTER
                                               const MB_MODE_INFO *mbmi) {
 #if CONFIG_REMOVE_DUAL_FILTER
   const int ctx = av1_get_pred_context_switchable_interp(xd, 0);
@@ -172,6 +175,7 @@
              SWITCHABLE_FILTERS);
 #else
   for (int dir = 0; dir < 2; ++dir) {
+    if (dir && !dual_filter) break;
     const int ctx = av1_get_pred_context_switchable_interp(xd, dir);
     InterpFilter filter = av1_extract_interp_filter(mbmi->interp_filters, dir);
     update_cdf(xd->tile_ctx->switchable_interp_cdf[ctx], filter,
diff --git a/av1/encoder/interp_search.c b/av1/encoder/interp_search.c
index 9e036cb..e38eb11 100644
--- a/av1/encoder/interp_search.c
+++ b/av1/encoder/interp_search.c
@@ -134,12 +134,14 @@
 #else
 static INLINE int get_switchable_rate(MACROBLOCK *const x,
                                       const int_interpfilters filters,
-                                      const int ctx[2]) {
-  int inter_filter_cost;
+                                      int dual_filter, const int ctx[2]) {
   const InterpFilter filter0 = filters.as_filters.y_filter;
-  const InterpFilter filter1 = filters.as_filters.x_filter;
-  inter_filter_cost = x->mode_costs.switchable_interp_costs[ctx[0]][filter0];
-  inter_filter_cost += x->mode_costs.switchable_interp_costs[ctx[1]][filter1];
+  int inter_filter_cost =
+      x->mode_costs.switchable_interp_costs[ctx[0]][filter0];
+  if (dual_filter) {
+    const InterpFilter filter1 = filters.as_filters.x_filter;
+    inter_filter_cost += x->mode_costs.switchable_interp_costs[ctx[1]][filter1];
+  }
   return SWITCHABLE_INTERP_RATE_FACTOR * inter_filter_cost;
 }
 #endif  // CONFIG_REMOVE_DUAL_FILTER
@@ -203,6 +205,7 @@
                                          mbmi->interp_fltr,
 #else
                                          mbmi->interp_filters,
+                                         cm->seq_params.enable_dual_filter,
 #endif  // CONFIG_REMOVE_DUAL_FILTER
                                          switchable_ctx);
 
@@ -736,6 +739,7 @@
                                          mbmi->interp_fltr,
 #else
                                          mbmi->interp_filters,
+                                         cm->seq_params.enable_dual_filter,
 #endif  // CONFIG_REMOVE_DUAL_FILTER
                                          switchable_ctx);
 
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 3584cb5..dd1b502 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1430,8 +1430,7 @@
   int best_filter_index = -1;
   InterpFilter filters[FILTER_SEARCH_SIZE] = { EIGHTTAP_REGULAR,
                                                EIGHTTAP_SMOOTH };
-  int i;
-  for (i = 0; i < FILTER_SEARCH_SIZE; ++i) {
+  for (int i = 0; i < FILTER_SEARCH_SIZE; ++i) {
     int64_t cost;
     InterpFilter filter = filters[i];
 #if CONFIG_REMOVE_DUAL_FILTER
@@ -1446,7 +1445,11 @@
     else
       model_rd_for_sb_y(cpi, bsize, x, xd, &pf_rd_stats[i], 1);
     pf_rd_stats[i].rate +=
-        av1_get_switchable_rate(x, xd, cm->features.interp_filter);
+        av1_get_switchable_rate(x, xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                                cm->seq_params.enable_dual_filter,
+#endif  // !CONFIG_REMOVE_DUAL_FILTER
+                                cm->features.interp_filter);
     cost = RDCOST(x->rdmult, pf_rd_stats[i].rate, pf_rd_stats[i].dist);
     pf_tx_size[i] = mi->tx_size;
     if (cost < best_cost) {
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c
index df9bc0e..183f06e 100644
--- a/av1/encoder/partition_search.c
+++ b/av1/encoder/partition_search.c
@@ -1066,7 +1066,11 @@
   if (inter_block && cm->features.interp_filter == SWITCHABLE &&
       mbmi->motion_mode != WARPED_CAUSAL &&
       !is_nontrans_global_motion(xd, mbmi)) {
-    update_filter_type_cdf(xd, mbmi);
+    update_filter_type_cdf(xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                           cm->seq_params.enable_dual_filter,
+#endif  // CONFIG_REMOVE_DUAL_FILTER
+                           mbmi);
   }
   if (inter_block &&
       !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 6176abc..6e5f347 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -1082,6 +1082,9 @@
 }
 
 int av1_get_switchable_rate(const MACROBLOCK *x, const MACROBLOCKD *xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                            int dual_filter,
+#endif  // !CONFIG_REMOVE_DUAL_FILTER
                             InterpFilter interp_filter) {
   if (interp_filter == SWITCHABLE) {
     const MB_MODE_INFO *const mbmi = xd->mi[0];
@@ -1092,6 +1095,7 @@
 #else
     int inter_filter_cost = 0;
     for (int dir = 0; dir < 2; ++dir) {
+      if (dir && !dual_filter) break;
       const int ctx = av1_get_pred_context_switchable_interp(xd, dir);
       const InterpFilter filter =
           av1_extract_interp_filter(mbmi->interp_filters, dir);
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index 0f0062b..5e9bfcd 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -243,6 +243,9 @@
                           double yl, double *rate_f, double *distbysse_f);
 
 int av1_get_switchable_rate(const MACROBLOCK *x, const MACROBLOCKD *xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                            int dual_filter,
+#endif  // !CONFIG_REMOVE_DUAL_FILTER
                             InterpFilter interp_filter);
 
 YV12_BUFFER_CONFIG *av1_get_scaled_ref_frame(const struct AV1_COMP *cpi,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 76573b8..4a2e8d3 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1330,8 +1330,13 @@
   MB_MODE_INFO best_mbmi;
   const int interp_filter = features->interp_filter;
   const int switchable_rate =
-      av1_is_interp_needed(xd) ? av1_get_switchable_rate(x, xd, interp_filter)
-                               : 0;
+      av1_is_interp_needed(xd)
+          ? av1_get_switchable_rate(x, xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                                    cm->seq_params.enable_dual_filter,
+#endif  // !CONFIG_REMOVE_DUAL_FILTER
+                                    interp_filter)
+          : 0;
   int64_t best_rd = INT64_MAX;
   int best_rate_mv = rate_mv0;
   const int mi_row = xd->mi_row;
@@ -5519,7 +5524,11 @@
 #else
         mbmi->interp_filters = av1_broadcast_interp_filter(i);
 #endif  // CONFIG_REMOVE_DUAL_FILTER
-        rs = av1_get_switchable_rate(x, xd, interp_filter);
+        rs = av1_get_switchable_rate(x, xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                                     cm->seq_params.enable_dual_filter,
+#endif  // !CONFIG_REMOVE_DUAL_FILTER
+                                     interp_filter);
         if (rs < best_rs) {
           best_rs = rs;
           best_filter = i;
@@ -5533,7 +5542,11 @@
 #else
   mbmi->interp_filters = av1_broadcast_interp_filter(best_filter);
 #endif  // CONFIG_REMOVE_DUAL_FILTER
-  rate2 += av1_get_switchable_rate(x, xd, interp_filter);
+  rate2 += av1_get_switchable_rate(x, xd,
+#if !CONFIG_REMOVE_DUAL_FILTER
+                                   cm->seq_params.enable_dual_filter,
+#endif  // !CONFIG_REMOVE_DUAL_FILTER
+                                   interp_filter);
 
   if (cm->current_frame.reference_mode == REFERENCE_MODE_SELECT)
     rate2 += comp_inter_cost[comp_pred];