diff --git a/av1/common/filter.h b/av1/common/filter.h
index 184f5b2..fa431fd 100644
--- a/av1/common/filter.h
+++ b/av1/common/filter.h
@@ -35,6 +35,7 @@
   SWITCHABLE_FILTERS = BILINEAR,
   SWITCHABLE = SWITCHABLE_FILTERS + 1, /* the last switchable one */
   EXTRA_FILTERS = INTERP_FILTERS_ALL - SWITCHABLE_FILTERS,
+  INTERP_INVALID = 0xff,
 } InterpFilter;
 
 enum {
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index c1afa8c..6ce45b5 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -8247,8 +8247,8 @@
 
 static INLINE int is_pred_filter_search_allowed(
     const AV1_COMP *const cpi, BLOCK_SIZE bsize, int mi_row, int mi_col,
-    InterpFilters af_horiz, InterpFilters af_vert, InterpFilters lf_horiz,
-    InterpFilters lf_vert) {
+    InterpFilter af_horiz, InterpFilter af_vert, InterpFilter lf_horiz,
+    InterpFilter lf_vert) {
   const AV1_COMMON *cm = &cpi->common;
   const int bsl = mi_size_wide_log2[bsize];
   int pred_filter_search =
@@ -8257,8 +8257,9 @@
              get_chessboard_index(cm->current_frame.frame_number)) &
                 0x1
           : 0;
-  pred_filter_search &= ((af_horiz == lf_horiz) && (af_horiz != SWITCHABLE)) ||
-                        ((af_vert == lf_vert) && (af_vert != SWITCHABLE));
+  pred_filter_search &=
+      ((af_horiz == lf_horiz) && (af_horiz != INTERP_INVALID)) ||
+      ((af_vert == lf_vert) && (af_vert != INTERP_INVALID));
   return pred_filter_search;
 }
 
@@ -8267,12 +8268,12 @@
     const TileDataEnc *tile_data, BLOCK_SIZE bsize, int mi_row, int mi_col,
     const BUFFER_SET *const orig_dst, int64_t *const rd,
     int *const switchable_rate, int *const skip_txfm_sb,
-    int64_t *const skip_sse_sb, const BUFFER_SET *dst_bufs[2],
-    InterpFilters filter_idx, const int switchable_ctx[2], const int skip_pred,
-    int *rate, int64_t *dist, InterpFilters af_horiz, InterpFilters af_vert,
-    InterpFilters lf_horiz, InterpFilters lf_vert) {
-  if ((af_horiz == lf_horiz) && (af_horiz != SWITCHABLE)) {
-    if (((af_vert == lf_vert) && (af_vert != SWITCHABLE))) {
+    int64_t *const skip_sse_sb, const BUFFER_SET *dst_bufs[2], int filter_idx,
+    const int switchable_ctx[2], const int skip_pred, int *rate, int64_t *dist,
+    InterpFilter af_horiz, InterpFilter af_vert, InterpFilter lf_horiz,
+    InterpFilter lf_vert) {
+  if ((af_horiz == lf_horiz) && (af_horiz != INTERP_INVALID)) {
+    if (((af_vert == lf_vert) && (af_vert != INTERP_INVALID))) {
       filter_idx = af_horiz + (af_vert * SWITCHABLE_FILTERS);
       if (filter_idx) {
         interpolation_filter_rd(x, cpi, tile_data, bsize, mi_row, mi_col,
@@ -8291,7 +8292,7 @@
         }
       }
     }
-  } else if ((af_vert == lf_vert) && (af_vert != SWITCHABLE)) {
+  } else if ((af_vert == lf_vert) && (af_vert != INTERP_INVALID)) {
     for (filter_idx = (af_vert * SWITCHABLE_FILTERS);
          filter_idx <= ((af_vert * SWITCHABLE_FILTERS) + 2); filter_idx += 1) {
       if (filter_idx) {
@@ -8323,20 +8324,21 @@
   assert(filter_set_size == DUAL_FILTER_SET_SIZE);
   if ((skip_hor & skip_ver) != cpi->default_interp_skip_flags) {
     int pred_filter_search;
-    InterpFilters af = SWITCHABLE, lf = SWITCHABLE, filter_idx = 0;
+    InterpFilter af_horiz = INTERP_INVALID, lf_horiz = INTERP_INVALID;
+    int filter_idx;
     const MB_MODE_INFO *const above_mbmi = xd->above_mbmi;
     const MB_MODE_INFO *const left_mbmi = xd->left_mbmi;
     if (above_mbmi && is_inter_block(above_mbmi)) {
-      af = above_mbmi->interp_filters;
+      af_horiz = av1_extract_interp_filter(above_mbmi->interp_filters, 1);
     }
     if (left_mbmi && is_inter_block(left_mbmi)) {
-      lf = left_mbmi->interp_filters;
+      lf_horiz = av1_extract_interp_filter(left_mbmi->interp_filters, 1);
     }
-    pred_filter_search = is_pred_filter_search_allowed(cpi, bsize, mi_row,
-                                                       mi_col, af, af, lf, lf);
+    pred_filter_search = is_pred_filter_search_allowed(
+        cpi, bsize, mi_row, mi_col, af_horiz, af_horiz, lf_horiz, lf_horiz);
     if (pred_filter_search) {
-      assert(af != SWITCHABLE);
-      filter_idx = SWITCHABLE * (af & 0xf);
+      assert(af_horiz != INTERP_INVALID);
+      filter_idx = SWITCHABLE * af_horiz;
       // This assert tells that (filter_x == filter_y) for non-dual filter case
       assert((filter_sets[filter_idx] & 0xffff) ==
              (filter_sets[filter_idx] >> 16));
@@ -8713,8 +8715,9 @@
     const int bh = block_size_high[bsize];
     int skip_pred;
     int pred_filter_search = 0;
-    InterpFilters af_horiz = SWITCHABLE, af_vert = SWITCHABLE,
-                  lf_horiz = SWITCHABLE, lf_vert = SWITCHABLE, filter_idx = 0;
+    InterpFilter af_horiz = INTERP_INVALID, af_vert = INTERP_INVALID,
+                 lf_horiz = INTERP_INVALID, lf_vert = INTERP_INVALID;
+    int filter_idx = 0;
     if (!have_newmv_in_inter_mode(mbmi->mode)) {
       const MB_MODE_INFO *const above_mbmi = xd->above_mbmi;
       const MB_MODE_INFO *const left_mbmi = xd->left_mbmi;
