Remove lpf_sb

As loopfilter is not needed for intrabc, clean up related code.

Change-Id: If89d4969a7795cd8993e6add8fd03ef1296699ef
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c
index 46173f8..b9d3ca7 100644
--- a/av1/common/av1_loopfilter.c
+++ b/av1/common/av1_loopfilter.c
@@ -2208,18 +2208,8 @@
   const uint32_t scale_vert = plane_ptr->subsampling_y;
   uint8_t *const dst_ptr = plane_ptr->dst.buf;
   const int dst_stride = plane_ptr->dst.stride;
-#if CONFIG_LPF_SB
-  int y_range = mi_row ? MAX_MIB_SIZE : MAX_MIB_SIZE - FILT_BOUNDARY_MI_OFFSET;
-  y_range = AOMMIN(y_range, cm->mi_rows);
-  y_range >>= scale_vert;
-
-  int x_range = mi_col ? MAX_MIB_SIZE : MAX_MIB_SIZE - FILT_BOUNDARY_MI_OFFSET;
-  x_range = AOMMIN(x_range, cm->mi_cols);
-  x_range >>= scale_horz;
-#else
   const int y_range = (MAX_MIB_SIZE >> scale_vert);
   const int x_range = (MAX_MIB_SIZE >> scale_horz);
-#endif  // CONFIG_LPF_SB
   for (int y = 0; y < y_range; y += row_step) {
     uint8_t *p = dst_ptr + y * MI_SIZE * dst_stride;
     for (int x = 0; x < x_range; x += col_step) {
@@ -2329,18 +2319,8 @@
   const uint32_t scale_vert = plane_ptr->subsampling_y;
   uint8_t *const dst_ptr = plane_ptr->dst.buf;
   const int dst_stride = plane_ptr->dst.stride;
-#if CONFIG_LPF_SB
-  int y_range = mi_row ? MAX_MIB_SIZE : MAX_MIB_SIZE - FILT_BOUNDARY_MI_OFFSET;
-  y_range = AOMMIN(y_range, cm->mi_rows);
-  y_range >>= scale_vert;
-
-  int x_range = mi_col ? MAX_MIB_SIZE : MAX_MIB_SIZE - FILT_BOUNDARY_MI_OFFSET;
-  x_range = AOMMIN(x_range, cm->mi_cols);
-  x_range >>= scale_horz;
-#else
   const int y_range = (MAX_MIB_SIZE >> scale_vert);
   const int x_range = (MAX_MIB_SIZE >> scale_horz);
-#endif  // CONFIG_LPF_SB
   for (int y = 0; y < y_range; y += row_step) {
     uint8_t *p = dst_ptr + y * MI_SIZE * dst_stride;
     for (int x = 0; x < x_range; x += col_step) {
@@ -2443,9 +2423,6 @@
 
 void av1_loop_filter_rows(YV12_BUFFER_CONFIG *frame_buffer, AV1_COMMON *cm,
                           struct macroblockd_plane *planes, int start, int stop,
-#if CONFIG_LPF_SB
-                          int col_start, int col_end,
-#endif
                           int y_only) {
 #if CONFIG_LOOPFILTER_LEVEL
   // y_only no longer has its original meaning.
@@ -2459,12 +2436,10 @@
   const int plane_start = 0;
   const int plane_end = num_planes;
 #endif  // CONFIG_LOOPFILTER_LEVEL
-#if !CONFIG_LPF_SB
 #if CONFIG_PARALLEL_DEBLOCKING
   const int col_start = 0;
   const int col_end = cm->mi_cols;
 #endif
-#endif  // CONFIG_LPF_SB
   int mi_row, mi_col;
   int plane;
 
@@ -2516,12 +2491,7 @@
 #if CONFIG_LOOPFILTER_LEVEL
                            int frame_filter_level_r,
 #endif
-                           int y_only, int partial_frame
-#if CONFIG_LPF_SB
-                           ,
-                           int mi_row, int mi_col
-#endif
-                           ) {
+                           int y_only, int partial_frame) {
   int start_mi_row, end_mi_row, mi_rows_to_filter;
 #if CONFIG_EXT_DELTA_Q
 #if CONFIG_LOOPFILTER_LEVEL
@@ -2536,30 +2506,6 @@
 #else
   if (!frame_filter_level) return;
 #endif
-#if CONFIG_LPF_SB
-  int start_mi_col;
-  int end_mi_col;
-
-  // In the experiment of deblocking filtering per superblock.
-  // When partial_frame is 1, it indicates we are searching for the best filter
-  // level for current superblock. We reuse frame_filter_level as filter level
-  // for superblock, no longer for the whole frame.
-  // When partial_frame is 0, it's in the actual filtering stage for the frame
-  if (partial_frame) {
-    start_mi_row = AOMMAX(0, mi_row - FILT_BOUNDARY_MI_OFFSET);
-    start_mi_col = AOMMAX(0, mi_col - FILT_BOUNDARY_MI_OFFSET);
-    const int mi_row_range = mi_row - FILT_BOUNDARY_MI_OFFSET + MAX_MIB_SIZE;
-    const int mi_col_range = mi_col - FILT_BOUNDARY_MI_OFFSET + MAX_MIB_SIZE;
-    end_mi_row = AOMMIN(mi_row_range, cm->mi_rows);
-    end_mi_col = AOMMIN(mi_col_range, cm->mi_cols);
-  } else {
-    start_mi_row = 0;
-    mi_rows_to_filter = cm->mi_rows;
-    end_mi_row = start_mi_row + mi_rows_to_filter;
-    start_mi_col = 0;
-    end_mi_col = cm->mi_cols;
-  }
-#else
   start_mi_row = 0;
   mi_rows_to_filter = cm->mi_rows;
   if (partial_frame && cm->mi_rows > 8) {
@@ -2576,7 +2522,6 @@
 #else
   av1_loop_filter_frame_init(cm, frame_filter_level, frame_filter_level);
 #endif
-#endif  // CONFIG_LPF_SB
 
 #if CONFIG_EXT_DELTA_Q
 #if CONFIG_LOOPFILTER_LEVEL
@@ -2587,12 +2532,7 @@
 #endif
 #endif
 
-#if CONFIG_LPF_SB
-  av1_loop_filter_rows(frame, cm, xd->plane, start_mi_row, end_mi_row,
-                       start_mi_col, end_mi_col, y_only);
-#else
   av1_loop_filter_rows(frame, cm, xd->plane, start_mi_row, end_mi_row, y_only);
-#endif  // CONFIG_LPF_SB
 
 #if CONFIG_EXT_DELTA_Q
 #if CONFIG_LOOPFILTER_LEVEL
@@ -2618,11 +2558,7 @@
 
 int av1_loop_filter_worker(LFWorkerData *const lf_data, void *unused) {
   (void)unused;
-#if !CONFIG_LPF_SB
   av1_loop_filter_rows(lf_data->frame_buffer, lf_data->cm, lf_data->planes,
                        lf_data->start, lf_data->stop, lf_data->y_only);
-#else
-  (void)lf_data;
-#endif  // CONFIG_LPF_SB
   return 1;
 }
diff --git a/av1/common/av1_loopfilter.h b/av1/common/av1_loopfilter.h
index 78305ec..3dd274c 100644
--- a/av1/common/av1_loopfilter.h
+++ b/av1/common/av1_loopfilter.h
@@ -145,27 +145,6 @@
 #endif
                                 );
 
-#if CONFIG_LPF_SB
-void av1_loop_filter_frame(YV12_BUFFER_CONFIG *frame, struct AV1Common *cm,
-                           struct macroblockd *mbd, int filter_level,
-#if CONFIG_LOOPFILTER_LEVEL
-                           int frame_filter_level_r,
-#endif
-                           int y_only, int partial_frame, int mi_row,
-                           int mi_col);
-
-// Apply the loop filter to [start, stop) macro block rows in frame_buffer.
-void av1_loop_filter_rows(YV12_BUFFER_CONFIG *frame_buffer,
-                          struct AV1Common *cm,
-                          struct macroblockd_plane *planes, int start, int stop,
-                          int col_start, int col_end, int y_only);
-
-void av1_loop_filter_sb_level_init(struct AV1Common *cm, int mi_row, int mi_col,
-#if CONFIG_LOOPFILTER_LEVEL
-                                   int plane, int dir,
-#endif
-                                   int lvl);
-#else
 void av1_loop_filter_frame(YV12_BUFFER_CONFIG *frame, struct AV1Common *cm,
                            struct macroblockd *mbd, int filter_level,
 #if CONFIG_LOOPFILTER_LEVEL
@@ -178,7 +157,6 @@
                           struct AV1Common *cm,
                           struct macroblockd_plane *planes, int start, int stop,
                           int y_only);
-#endif  // CONFIG_LPF_SB
 
 typedef struct LoopFilterWorkerData {
   YV12_BUFFER_CONFIG *frame_buffer;
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 1f14d3c..579b6c7 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -320,20 +320,6 @@
 #endif
 
   BOUNDARY_TYPE boundary_info;
-#if CONFIG_LPF_SB
-#if CONFIG_LOOPFILTER_LEVEL
-  // 0: y plane vert, 1: y plane horz, 2: u plane, 3: v plane
-  uint8_t filt_lvl[4];
-  int reuse_sb_lvl[4];
-  int sign[4];
-  int delta[4];
-#else
-  uint8_t filt_lvl;
-  int reuse_sb_lvl;
-  int sign;
-  int delta;
-#endif  // CONFIG_LOOPFILTER_LEVEL
-#endif  // CONFIG_LPF_SB
 
 #if CONFIG_JNT_COMP
   int compound_idx;
diff --git a/av1/common/enums.h b/av1/common/enums.h
index a9b2060..ef85f3f 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -96,12 +96,6 @@
 #define DEFAULT_DELTA_LF_MULTI 0
 #endif  // CONFIG_LOOPFILTER_LEVEL
 
-#if CONFIG_LPF_SB
-// Half of maximum loop filter length (15-tap)
-#define FILT_BOUNDARY_OFFSET 0
-#define FILT_BOUNDARY_MI_OFFSET (FILT_BOUNDARY_OFFSET >> MI_SIZE_LOG2)
-#endif  // CONFIG_LPF_SB
-
 #if CONFIG_JNT_COMP
 typedef enum COMPOUND_DIST_WEIGHT_MODE {
   DIST,
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index 6f64e07..1a508af 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -461,9 +461,6 @@
 #define INTRABC_DELAY_PIXELS 256  //  Delay of 256 pixels
 #define INTRABC_DELAY_SB64 (INTRABC_DELAY_PIXELS / 64)
 #define USE_WAVE_FRONT 1  // Use only top left area of frame for reference.
-#if CONFIG_LPF_SB
-#define INTRABC_FILTER_DELAY 8  // Delay of 8 pixels
-#endif                          // CONFIG_LPF_SB
 
 static INLINE void av1_find_ref_dv(int_mv *ref_dv, const TileInfo *const tile,
                                    int mib_size, int mi_row, int mi_col) {
@@ -497,24 +494,11 @@
   const int src_left_edge = mi_col * MI_SIZE * SCALE_PX_TO_MV + dv.col;
   const int tile_left_edge = tile->mi_col_start * MI_SIZE * SCALE_PX_TO_MV;
   if (src_left_edge < tile_left_edge) return 0;
-// Is the bottom right inside the current tile?
-#if CONFIG_LPF_SB
-  // Because of loop filter, the bottom 8 rows and the rightmost 8 cols of
-  // IntraBC area now is invalid. It is equal to let the valid region add an
-  // offset of the filter delay
-  const int src_bottom_edge =
-      (mi_row * MI_SIZE + bh + INTRABC_FILTER_DELAY) * SCALE_PX_TO_MV + dv.row;
-#else
+  // Is the bottom right inside the current tile?
   const int src_bottom_edge = (mi_row * MI_SIZE + bh) * SCALE_PX_TO_MV + dv.row;
-#endif  // CONFIG_LPF_SB
   const int tile_bottom_edge = tile->mi_row_end * MI_SIZE * SCALE_PX_TO_MV;
   if (src_bottom_edge > tile_bottom_edge) return 0;
-#if CONFIG_LPF_SB
-  const int src_right_edge =
-      (mi_col * MI_SIZE + bw + INTRABC_FILTER_DELAY) * SCALE_PX_TO_MV + dv.col;
-#else
   const int src_right_edge = (mi_col * MI_SIZE + bw) * SCALE_PX_TO_MV + dv.col;
-#endif  // CONFIG_LPF_SB
   const int tile_right_edge = tile->mi_col_end * MI_SIZE * SCALE_PX_TO_MV;
   if (src_right_edge > tile_right_edge) return 0;
 
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index fd79b40..3814135 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -992,9 +992,9 @@
 #endif  // CONFIG_LOOP_RESTORATION
 
 static void setup_loopfilter(AV1_COMMON *cm, struct aom_read_bit_buffer *rb) {
-#if CONFIG_INTRABC && !CONFIG_LPF_SB
+#if CONFIG_INTRABC
   if (cm->allow_intrabc && NO_FILTER_FOR_IBC) return;
-#endif  // CONFIG_INTRABC && !CONFIG_LPF_SB
+#endif  // CONFIG_INTRABC
   struct loopfilter *lf = &cm->lf;
 #if CONFIG_LOOPFILTER_LEVEL
   lf->filter_level[0] = aom_rb_read_literal(rb, 6);
@@ -2098,27 +2098,6 @@
 #endif
           decode_partition(pbi, &td->xd, mi_row, mi_col, &td->bit_reader,
                            cm->sb_size);
-#if CONFIG_LPF_SB
-          if (cm->allow_screen_content_tools) {
-#if CONFIG_LOOPFILTER_LEVEL
-            if (cm->lf.filter_level[0] || cm->lf.filter_level[1]) {
-              av1_loop_filter_frame(get_frame_new_buffer(cm), cm, &pbi->mb,
-                                    cm->lf.filter_level[0],
-                                    cm->lf.filter_level[1], 0, 1, mi_row,
-                                    mi_col);
-              av1_loop_filter_frame(
-                  get_frame_new_buffer(cm), cm, &pbi->mb, cm->lf.filter_level_u,
-                  cm->lf.filter_level_u, 1, 1, mi_row, mi_col);
-              av1_loop_filter_frame(
-                  get_frame_new_buffer(cm), cm, &pbi->mb, cm->lf.filter_level_v,
-                  cm->lf.filter_level_v, 2, 1, mi_row, mi_col);
-            }
-#else
-            av1_loop_filter_frame(get_frame_new_buffer(cm), cm, &pbi->mb,
-                                  cm->lf.filter_level, 0, 1, mi_row, mi_col);
-#endif  // CONFIG_LOOPFILTER_LEVEL
-          }
-#endif  // CONFIG_LPF_SB
         }
         aom_merge_corrupted_flag(&pbi->mb.corrupted, td->xd.corrupted);
         if (pbi->mb.corrupted)
@@ -2137,12 +2116,11 @@
       av1_frameworker_broadcast(pbi->cur_buf, mi_row << cm->mib_size_log2);
   }
 
-#if CONFIG_INTRABC && !CONFIG_LPF_SB
+#if CONFIG_INTRABC
   if (!(cm->allow_intrabc && NO_FILTER_FOR_IBC))
-#endif  // CONFIG_INTRABC && !CONFIG_LPF_SB
+#endif  // CONFIG_INTRABC
   {
 // Loopfilter the whole frame.
-#if !CONFIG_LPF_SB
 #if CONFIG_OBU
     if (endTile == cm->tile_rows * cm->tile_cols - 1)
 #endif
@@ -2162,7 +2140,6 @@
     av1_loop_filter_frame(get_frame_new_buffer(cm), cm, &pbi->mb,
                           cm->lf.filter_level, 0, 0);
 #endif  // CONFIG_LOOPFILTER_LEVEL
-#endif  // CONFIG_LPF_SB
   }
   if (cm->frame_parallel_decode)
     av1_frameworker_broadcast(pbi->cur_buf, INT_MAX);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index a2bd8bb..1ecca53 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2439,9 +2439,9 @@
 #endif  // CONFIG_LOOP_RESTORATION
 
 static void encode_loopfilter(AV1_COMMON *cm, struct aom_write_bit_buffer *wb) {
-#if CONFIG_INTRABC && !CONFIG_LPF_SB
+#if CONFIG_INTRABC
   if (cm->allow_intrabc && NO_FILTER_FOR_IBC) return;
-#endif  // CONFIG_INTRABC && !CONFIG_LPF_SB
+#endif  // CONFIG_INTRABC
   int i;
   struct loopfilter *lf = &cm->lf;
 
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 9d46505..9357aa5 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -56,9 +56,6 @@
 #endif
 #include "av1/encoder/ethread.h"
 #include "av1/encoder/extend.h"
-#if CONFIG_LPF_SB
-#include "av1/encoder/picklpf.h"
-#endif
 #include "av1/encoder/rd.h"
 #include "av1/encoder/rdopt.h"
 #include "av1/encoder/segmentation.h"
@@ -3096,34 +3093,6 @@
       rd_pick_partition(cpi, td, tile_data, tp, mi_row, mi_col, cm->sb_size,
                         &dummy_rdc, INT64_MAX, pc_root, NULL);
     }
-#if CONFIG_LPF_SB
-    // TODO(chengchen): change to allow intraBC. It requires to store the
-    // unfiltered frame to a buffer and process later.
-    if (cm->allow_screen_content_tools) {
-#if CONFIG_LOOPFILTER_LEVEL
-      int filter_lvl[4];
-
-      struct loopfilter *lf = &cpi->common.lf;
-      filter_lvl[0] = lf->filter_level[0];
-      filter_lvl[1] = lf->filter_level[1];
-      filter_lvl[2] = lf->filter_level_u;
-      filter_lvl[3] = lf->filter_level_v;
-      av1_loop_filter_frame(cm->frame_to_show, cm, xd, filter_lvl[0],
-                            filter_lvl[1], 0, 1, mi_row, mi_col);
-      av1_loop_filter_frame(cm->frame_to_show, cm, xd, filter_lvl[2],
-                            filter_lvl[2], 1, 1, mi_row, mi_col);
-      av1_loop_filter_frame(cm->frame_to_show, cm, xd, filter_lvl[3],
-                            filter_lvl[3], 2, 1, mi_row, mi_col);
-#else
-      int filter_lvl;
-
-      struct loopfilter *lf = &cpi->common.lf;
-      filter_lvl = lf->filter_level;
-      av1_loop_filter_frame(get_frame_new_buffer(cm), cm, xd, filter_lvl, 0, 1,
-                            mi_row, mi_col);
-#endif  // CONFIG_LOOPFILTER_LEVEL
-    }
-#endif  // CONFIG_LPF_SB
   }
 }
 
@@ -3296,11 +3265,6 @@
 
   av1_init_tile_data(cpi);
 
-#if CONFIG_LPF_SB
-  cm->frame_to_show = get_frame_new_buffer(cm);
-  av1_pick_filter_level(cpi->source, cpi, LPF_PICK_FROM_Q);
-#endif
-
   for (tile_row = 0; tile_row < cm->tile_rows; ++tile_row)
     for (tile_col = 0; tile_col < cm->tile_cols; ++tile_col)
       av1_encode_tile(cpi, &cpi->td, tile_row, tile_col);
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index dc16c9e..e4bf069 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -5291,11 +5291,7 @@
       || cm->large_scale_tile
 #endif  // CONFIG_EXT_TILE
       ) {
-#if CONFIG_LPF_SB
-    if (!cm->allow_screen_content_tools) no_loopfilter = 1;
-#else
     no_loopfilter = 1;
-#endif  // CONFIG_LPF_SB
 #if CONFIG_LOOP_RESTORATION
     no_restoration = 1;
 #endif  // CONFIG_LOOP_RESTORATION
@@ -5327,26 +5323,18 @@
 
     aom_usec_timer_start(&timer);
 
-#if !CONFIG_LPF_SB
     av1_pick_filter_level(cpi->source, cpi, cpi->sf.lpf_pick);
-#endif
 
     aom_usec_timer_mark(&timer);
     cpi->time_pick_lpf += aom_usec_timer_elapsed(&timer);
   }
 
-#if !CONFIG_LPF_SB
 #if CONFIG_LOOPFILTER_LEVEL
   if (lf->filter_level[0] || lf->filter_level[1])
 #else
   if (lf->filter_level > 0)
 #endif
-#endif  // CONFIG_LPF_SB
   {
-#if CONFIG_LPF_SB && !CONFIG_LOOPFILTER_LEVEL
-    av1_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0, 0,
-                          0);
-#elif !CONFIG_LPF_SB
 #if CONFIG_LOOPFILTER_LEVEL
     av1_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level[0],
                           lf->filter_level[1], 0, 0);
@@ -5358,7 +5346,6 @@
 #else
     av1_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0);
 #endif  // CONFIG_LOOPFILTER_LEVEL
-#endif  // CONFIG_LPF_SB
   }
 
 #if CONFIG_STRIPED_LOOP_RESTORATION
diff --git a/av1/encoder/picklpf.c b/av1/encoder/picklpf.c
index 3206f20..1aea028 100644
--- a/av1/encoder/picklpf.c
+++ b/av1/encoder/picklpf.c
@@ -27,7 +27,6 @@
 #include "av1/encoder/encoder.h"
 #include "av1/encoder/picklpf.h"
 
-#if !CONFIG_LPF_SB
 static void yv12_copy_plane(const YV12_BUFFER_CONFIG *src_bc,
                             YV12_BUFFER_CONFIG *dst_bc, int plane) {
   switch (plane) {
@@ -37,7 +36,6 @@
     default: assert(plane >= 0 && plane <= 2); break;
   }
 }
-#endif  // CONFIG_LPF_SB
 
 int av1_get_max_filter_level(const AV1_COMP *cpi) {
   if (cpi->oxcf.pass == 2) {
@@ -48,7 +46,6 @@
   }
 }
 
-#if !CONFIG_LPF_SB
 static int64_t try_filter_frame(const YV12_BUFFER_CONFIG *sd,
                                 AV1_COMP *const cpi, int filt_level,
                                 int partial_frame
@@ -213,7 +210,6 @@
   if (best_cost_ret) *best_cost_ret = RDCOST_DBL(x->rdmult, 0, best_err);
   return filt_best;
 }
-#endif  // CONFIG_LPF_SB
 
 void av1_pick_filter_level(const YV12_BUFFER_CONFIG *sd, AV1_COMP *cpi,
                            LPF_PICK_METHOD method) {
@@ -278,7 +274,6 @@
     lf->filter_level = clamp(filt_guess, min_filter_level, max_filter_level);
 #endif
   } else {
-#if !CONFIG_LPF_SB
 #if CONFIG_LOOPFILTER_LEVEL
     lf->filter_level[0] = lf->filter_level[1] = search_filter_level(
         sd, cpi, method == LPF_PICK_FROM_SUBIMAGE, NULL, 0, 2);
@@ -295,6 +290,5 @@
     lf->filter_level =
         search_filter_level(sd, cpi, method == LPF_PICK_FROM_SUBIMAGE, NULL);
 #endif  // CONFIG_LOOPFILTER_LEVEL
-#endif  // !CONFIG_LPF_SB
   }
 }
diff --git a/av1/encoder/picklpf.h b/av1/encoder/picklpf.h
index 9c04d7d..2a16835 100644
--- a/av1/encoder/picklpf.h
+++ b/av1/encoder/picklpf.h
@@ -23,11 +23,6 @@
 int av1_get_max_filter_level(const AV1_COMP *cpi);
 void av1_pick_filter_level(const struct yv12_buffer_config *sd,
                            struct AV1_COMP *cpi, LPF_PICK_METHOD method);
-#if CONFIG_LPF_SB
-int av1_search_filter_level(const YV12_BUFFER_CONFIG *sd, AV1_COMP *cpi,
-                            int partial_frame, double *best_cost_ret,
-                            int mi_row, int mi_col, int last_lvl);
-#endif  // CONFIG_LPF_SB
 #ifdef __cplusplus
 }  // extern "C"
 #endif
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 6419acb..f010dd7 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -158,7 +158,6 @@
 set(CONFIG_LOOPFILTERING_ACROSS_TILES_EXT 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_LOOPFILTER_LEVEL 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_LOOP_RESTORATION 1 CACHE NUMBER "AV1 experiment flag.")
-set(CONFIG_LPF_SB 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_LV_MAP 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_LV_MAP_MULTI 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_MAX_TILE 1 CACHE NUMBER "AV1 experiment flag.")
diff --git a/configure b/configure
index ac58848..ae12c18 100755
--- a/configure
+++ b/configure
@@ -319,7 +319,6 @@
     obu
     add_4bytes_obusize
     amvr
-    lpf_sb
     opt_ref_mv
     tmv
     ext_warped_motion
diff --git a/tools/aom_entropy_optimizer.c b/tools/aom_entropy_optimizer.c
index 8449334..73a61ec 100644
--- a/tools/aom_entropy_optimizer.c
+++ b/tools/aom_entropy_optimizer.c
@@ -721,30 +721,6 @@
 
 #endif  // CONFIG_LV_MAP
 
-/* lgt_from_pred experiment */
-#if CONFIG_LPF_SB
-  cts_each_dim[0] = LPF_REUSE_CONTEXT;
-  cts_each_dim[1] = 2;
-  optimize_cdf_table(&fc.lpf_reuse[0][0], probsfile, 2, cts_each_dim,
-                     "static const aom_cdf_prob "
-                     "default_lpf_reuse_cdf[LPF_REUSE_CONTEXT][CDF_SIZE(2)]");
-
-  cts_each_dim[0] = LPF_DELTA_CONTEXT;
-  cts_each_dim[1] = DELTA_RANGE;
-  optimize_cdf_table(&fc.lpf_delta[0][0], probsfile, 2, cts_each_dim,
-                     "static const aom_cdf_prob "
-                     "default_lpf_delta_cdf[LPF_DELTA_CONTEXT][CDF_SIZE(DELTA_"
-                     "RANGE)]");
-
-  cts_each_dim[0] = LPF_REUSE_CONTEXT;
-  cts_each_dim[1] = LPF_SIGN_CONTEXT;
-  cts_each_dim[2] = 2;
-  optimize_cdf_table(&fc.lpf_delta[0][0], probsfile, 3, cts_each_dim,
-                     "static const aom_cdf_prob "
-                     "default_lpf_sign_cdf[LPF_REUSE_CONTEXT][LPF_SIGN_CONTEXT]"
-                     "[CDF_SIZE(2)]");
-#endif
-
 #if CONFIG_EXT_SKIP
   /* Skip mode flag */
   cts_each_dim[0] = SKIP_MODE_CONTEXTS;