Add allintra visual files

Move allintra visual quality related functions to dedicated files.

Change-Id: Ic6e2d5dca26932bd3aca183d2db8dad31f4d126e
diff --git a/av1/av1.cmake b/av1/av1.cmake
index 80d8277..de000e6 100644
--- a/av1/av1.cmake
+++ b/av1/av1.cmake
@@ -123,6 +123,8 @@
             "${AOM_ROOT}/av1/encoder/aq_cyclicrefresh.h"
             "${AOM_ROOT}/av1/encoder/aq_variance.c"
             "${AOM_ROOT}/av1/encoder/aq_variance.h"
+            "${AOM_ROOT}/av1/encoder/allintra_vis.c"
+            "${AOM_ROOT}/av1/encoder/allintra_vis.h"
             "${AOM_ROOT}/av1/encoder/enc_enums.h"
             "${AOM_ROOT}/av1/encoder/av1_fwd_txfm1d.c"
             "${AOM_ROOT}/av1/encoder/av1_fwd_txfm1d.h"
diff --git a/av1/encoder/allintra_vis.c b/av1/encoder/allintra_vis.c
new file mode 100644
index 0000000..2fc6c28
--- /dev/null
+++ b/av1/encoder/allintra_vis.c
@@ -0,0 +1,252 @@
+/*
+ * Copyright (c) 2021, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+
+#include "av1/encoder/allintra_vis.h"
+
+// Process the wiener variance in 16x16 block basis.
+static int qsort_comp(const void *elem1, const void *elem2) {
+  int a = *((const int *)elem1);
+  int b = *((const int *)elem2);
+  if (a > b) return 1;
+  if (a < b) return -1;
+  return 0;
+}
+
+void av1_init_mb_wiener_var_buffer(AV1_COMP *cpi) {
+  AV1_COMMON *cm = &cpi->common;
+
+  if (cpi->mb_wiener_variance) return;
+
+  CHECK_MEM_ERROR(cm, cpi->mb_wiener_variance,
+                  aom_calloc(cpi->frame_info.mb_rows * cpi->frame_info.mb_cols,
+                             sizeof(*cpi->mb_wiener_variance)));
+}
+
+static int get_window_wiener_var(AV1_COMP *const cpi, BLOCK_SIZE bsize,
+                                 int mi_row, int mi_col) {
+  AV1_COMMON *const cm = &cpi->common;
+  const int mi_wide = mi_size_wide[bsize];
+  const int mi_high = mi_size_high[bsize];
+
+  const int mi_step = mi_size_wide[BLOCK_16X16];
+  int sb_wiener_var = 0;
+  int mb_stride = cpi->frame_info.mb_cols;
+  int mb_count = 0;
+  int64_t mb_wiener_sum = 0;
+
+  for (int row = mi_row; row < mi_row + mi_high; row += mi_step) {
+    for (int col = mi_col; col < mi_col + mi_wide; col += mi_step) {
+      if (row >= cm->mi_params.mi_rows || col >= cm->mi_params.mi_cols)
+        continue;
+
+      mb_wiener_sum +=
+          (int)cpi->mb_wiener_variance[(row / mi_step) * mb_stride +
+                                       (col / mi_step)];
+      ++mb_count;
+    }
+  }
+
+  if (mb_count) sb_wiener_var = (int)(mb_wiener_sum / mb_count);
+  sb_wiener_var = AOMMAX(1, sb_wiener_var);
+
+  return (int)(sqrt(sb_wiener_var));
+}
+
+static int get_var_perceptual_ai(AV1_COMP *const cpi, BLOCK_SIZE bsize,
+                                 int mi_row, int mi_col) {
+  AV1_COMMON *const cm = &cpi->common;
+  const int mi_wide = mi_size_wide[bsize];
+  const int mi_high = mi_size_high[bsize];
+
+  int sb_wiener_var = get_window_wiener_var(cpi, bsize, mi_row, mi_col);
+
+  if (mi_row >= (mi_high / 2)) {
+    sb_wiener_var =
+        AOMMIN(sb_wiener_var,
+               get_window_wiener_var(cpi, bsize, mi_row - mi_high / 2, mi_col));
+  }
+  if (mi_row <= (cm->mi_params.mi_rows - mi_high - (mi_high / 2))) {
+    sb_wiener_var =
+        AOMMIN(sb_wiener_var,
+               get_window_wiener_var(cpi, bsize, mi_row + mi_high / 2, mi_col));
+  }
+  if (mi_col >= (mi_wide / 2)) {
+    sb_wiener_var =
+        AOMMIN(sb_wiener_var,
+               get_window_wiener_var(cpi, bsize, mi_row, mi_col - mi_wide / 2));
+  }
+  if (mi_col <= (cm->mi_params.mi_cols - mi_wide - (mi_wide / 2))) {
+    sb_wiener_var =
+        AOMMIN(sb_wiener_var,
+               get_window_wiener_var(cpi, bsize, mi_row, mi_col + mi_wide / 2));
+  }
+
+  return sb_wiener_var;
+}
+
+void av1_set_mb_wiener_variance(AV1_COMP *cpi) {
+  AV1_COMMON *const cm = &cpi->common;
+  uint8_t *buffer = cpi->source->y_buffer;
+  int buf_stride = cpi->source->y_stride;
+  ThreadData *td = &cpi->td;
+  MACROBLOCK *x = &td->mb;
+  MACROBLOCKD *xd = &x->e_mbd;
+  MB_MODE_INFO mbmi;
+  memset(&mbmi, 0, sizeof(mbmi));
+  MB_MODE_INFO *mbmi_ptr = &mbmi;
+  xd->mi = &mbmi_ptr;
+
+  union {
+#if CONFIG_AV1_HIGHBITDEPTH
+    DECLARE_ALIGNED(32, uint16_t, zero_pred16[32 * 32]);
+#endif
+    DECLARE_ALIGNED(32, uint8_t, zero_pred8[32 * 32]);
+  } pred_buffer_mem;
+  uint8_t *pred_buf;
+
+  DECLARE_ALIGNED(32, int16_t, src_diff[32 * 32]);
+  DECLARE_ALIGNED(32, tran_low_t, coeff[32 * 32]);
+
+  int mb_row, mb_col, count = 0;
+  const TX_SIZE tx_size = TX_16X16;
+  const int block_size = tx_size_wide[tx_size];
+  const int coeff_count = block_size * block_size;
+
+#if CONFIG_AV1_HIGHBITDEPTH
+  xd->cur_buf = cpi->source;
+  if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
+    pred_buf = CONVERT_TO_BYTEPTR(pred_buffer_mem.zero_pred16);
+    memset(pred_buffer_mem.zero_pred16, 0,
+           sizeof(*pred_buffer_mem.zero_pred16) * coeff_count);
+  } else {
+    pred_buf = pred_buffer_mem.zero_pred8;
+    memset(pred_buffer_mem.zero_pred8, 0,
+           sizeof(*pred_buffer_mem.zero_pred8) * coeff_count);
+  }
+#else
+  pred_buf = pred_buffer_mem.zero_pred8;
+  memset(pred_buffer_mem.zero_pred8, 0,
+         sizeof(*pred_buffer_mem.zero_pred8) * coeff_count);
+#endif
+
+  const BitDepthInfo bd_info = get_bit_depth_info(xd);
+  cpi->norm_wiener_variance = 0;
+
+  int mb_step = mi_size_wide[BLOCK_16X16];
+
+  for (mb_row = 0; mb_row < cpi->frame_info.mb_rows; ++mb_row) {
+    for (mb_col = 0; mb_col < cpi->frame_info.mb_cols; ++mb_col) {
+      PREDICTION_MODE best_mode = DC_PRED;
+      int best_intra_cost = INT_MAX;
+
+      int mi_row = mb_row * mb_step;
+      int mi_col = mb_col * mb_step;
+
+      xd->up_available = mi_row > 0;
+      xd->left_available = mi_col > 0;
+
+      int dst_mb_offset = mi_row * MI_SIZE * buf_stride + mi_col * MI_SIZE;
+      uint8_t *dst_buffer = xd->cur_buf->y_buffer + dst_mb_offset;
+
+      for (PREDICTION_MODE mode = INTRA_MODE_START; mode < INTRA_MODE_END;
+           ++mode) {
+        av1_predict_intra_block(xd, cm->seq_params->sb_size,
+                                cm->seq_params->enable_intra_edge_filter,
+                                block_size, block_size, tx_size, mode, 0, 0,
+                                FILTER_INTRA_MODES, dst_buffer, buf_stride,
+                                pred_buf, block_size, 0, 0, 0);
+
+        av1_subtract_block(bd_info, block_size, block_size, src_diff,
+                           block_size, dst_buffer, buf_stride, pred_buf,
+                           block_size);
+        av1_quick_txfm(0, tx_size, bd_info, src_diff, block_size, coeff);
+        int intra_cost = aom_satd(coeff, coeff_count);
+        if (intra_cost < best_intra_cost) {
+          best_intra_cost = intra_cost;
+          best_mode = mode;
+        }
+      }
+
+      int idx;
+      int16_t median_val = 0;
+      uint8_t *mb_buffer =
+          buffer + mb_row * block_size * buf_stride + mb_col * block_size;
+      int64_t wiener_variance = 0;
+      av1_predict_intra_block(
+          xd, cm->seq_params->sb_size, cm->seq_params->enable_intra_edge_filter,
+          block_size, block_size, tx_size, best_mode, 0, 0, FILTER_INTRA_MODES,
+          dst_buffer, buf_stride, pred_buf, block_size, 0, 0, 0);
+      av1_subtract_block(bd_info, block_size, block_size, src_diff, block_size,
+                         mb_buffer, buf_stride, pred_buf, block_size);
+      av1_quick_txfm(0, tx_size, bd_info, src_diff, block_size, coeff);
+      coeff[0] = 0;
+      for (idx = 1; idx < coeff_count; ++idx) coeff[idx] = abs(coeff[idx]);
+
+      qsort(coeff, coeff_count - 1, sizeof(*coeff), qsort_comp);
+
+      // Noise level estimation
+      median_val = coeff[coeff_count / 2];
+
+      // Wiener filter
+      for (idx = 1; idx < coeff_count; ++idx) {
+        int64_t sqr_coeff = (int64_t)coeff[idx] * coeff[idx];
+        int64_t tmp_coeff = (int64_t)coeff[idx];
+        if (median_val) {
+          tmp_coeff = (sqr_coeff * coeff[idx]) /
+                      (sqr_coeff + (int64_t)median_val * median_val);
+        }
+        wiener_variance += tmp_coeff * tmp_coeff;
+      }
+      cpi->mb_wiener_variance[mb_row * cpi->frame_info.mb_cols + mb_col] =
+          wiener_variance / coeff_count;
+      ++count;
+    }
+  }
+
+  int sb_step = mi_size_wide[cm->seq_params->sb_size];
+  double sb_wiener_log = 0;
+  int sb_count = 0;
+
+  for (int mi_row = 0; mi_row < cm->mi_params.mi_rows; mi_row += sb_step) {
+    for (int mi_col = 0; mi_col < cm->mi_params.mi_cols; mi_col += sb_step) {
+      int sb_wiener_var =
+          get_var_perceptual_ai(cpi, cm->seq_params->sb_size, mi_row, mi_col);
+      sb_wiener_log += log(sb_wiener_var);
+      ++sb_count;
+    }
+  }
+
+  if (sb_count)
+    cpi->norm_wiener_variance = (int64_t)(exp(sb_wiener_log / sb_count));
+  cpi->norm_wiener_variance = AOMMAX(1, cpi->norm_wiener_variance);
+}
+
+int av1_get_sbq_perceptual_ai(AV1_COMP *const cpi, BLOCK_SIZE bsize, int mi_row,
+                              int mi_col) {
+  AV1_COMMON *const cm = &cpi->common;
+  const int base_qindex = cm->quant_params.base_qindex;
+  int sb_wiener_var = get_var_perceptual_ai(cpi, bsize, mi_row, mi_col);
+  int offset = 0;
+  double beta = (double)cpi->norm_wiener_variance / sb_wiener_var;
+  // Cap beta such that the delta q value is not much far away from the base q.
+  beta = AOMMIN(beta, 4);
+  beta = AOMMAX(beta, 0.25);
+  offset = av1_get_deltaq_offset(cm->seq_params->bit_depth, base_qindex, beta);
+  const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
+  offset = AOMMIN(offset, delta_q_info->delta_q_res * 20 - 1);
+  offset = AOMMAX(offset, -delta_q_info->delta_q_res * 20 + 1);
+  int qindex = cm->quant_params.base_qindex + offset;
+  qindex = AOMMIN(qindex, MAXQ);
+  qindex = AOMMAX(qindex, MINQ);
+  if (base_qindex > MINQ) qindex = AOMMAX(qindex, MINQ + 1);
+
+  return qindex;
+}
diff --git a/av1/encoder/allintra_vis.h b/av1/encoder/allintra_vis.h
new file mode 100644
index 0000000..5f588f6
--- /dev/null
+++ b/av1/encoder/allintra_vis.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+
+#include "config/aom_dsp_rtcd.h"
+
+#include "av1/common/enums.h"
+#include "av1/common/reconintra.h"
+
+#include "av1/encoder/block.h"
+#include "av1/encoder/encoder.h"
+#include "av1/encoder/hybrid_fwd_txfm.h"
+
+void av1_init_mb_wiener_var_buffer(AV1_COMP *cpi);
+
+void av1_set_mb_wiener_variance(AV1_COMP *cpi);
+
+int av1_get_sbq_perceptual_ai(AV1_COMP *const cpi, BLOCK_SIZE bsize, int mi_row,
+                              int mi_col);
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index e4f8366..6ad70da 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -43,6 +43,7 @@
 #include "av1/common/tile_common.h"
 #include "av1/common/warped_motion.h"
 
+#include "av1/encoder/allintra_vis.h"
 #include "av1/encoder/aq_complexity.h"
 #include "av1/encoder/aq_cyclicrefresh.h"
 #include "av1/encoder/aq_variance.h"
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 3ef5e5f..d3f848b 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -45,6 +45,7 @@
 #include "av1/common/resize.h"
 #include "av1/common/tile_common.h"
 
+#include "av1/encoder/allintra_vis.h"
 #include "av1/encoder/aq_complexity.h"
 #include "av1/encoder/aq_cyclicrefresh.h"
 #include "av1/encoder/aq_variance.h"
@@ -3117,246 +3118,6 @@
 }
 #endif
 
-// Process the wiener variance in 16x16 block basis.
-static int qsort_comp(const void *elem1, const void *elem2) {
-  int a = *((const int *)elem1);
-  int b = *((const int *)elem2);
-  if (a > b) return 1;
-  if (a < b) return -1;
-  return 0;
-}
-
-static void init_mb_wiener_var_buffer(AV1_COMP *cpi) {
-  AV1_COMMON *cm = &cpi->common;
-
-  if (cpi->mb_wiener_variance) return;
-
-  CHECK_MEM_ERROR(cm, cpi->mb_wiener_variance,
-                  aom_calloc(cpi->frame_info.mb_rows * cpi->frame_info.mb_cols,
-                             sizeof(*cpi->mb_wiener_variance)));
-}
-
-static int get_window_wiener_var(AV1_COMP *const cpi, BLOCK_SIZE bsize,
-                                 int mi_row, int mi_col) {
-  AV1_COMMON *const cm = &cpi->common;
-  const int mi_wide = mi_size_wide[bsize];
-  const int mi_high = mi_size_high[bsize];
-
-  const int mi_step = mi_size_wide[BLOCK_16X16];
-  int sb_wiener_var = 0;
-  int mb_stride = cpi->frame_info.mb_cols;
-  int mb_count = 0;
-  int64_t mb_wiener_sum = 0;
-
-  for (int row = mi_row; row < mi_row + mi_high; row += mi_step) {
-    for (int col = mi_col; col < mi_col + mi_wide; col += mi_step) {
-      if (row >= cm->mi_params.mi_rows || col >= cm->mi_params.mi_cols)
-        continue;
-
-      mb_wiener_sum +=
-          (int)cpi->mb_wiener_variance[(row / mi_step) * mb_stride +
-                                       (col / mi_step)];
-      ++mb_count;
-    }
-  }
-
-  if (mb_count) sb_wiener_var = (int)(mb_wiener_sum / mb_count);
-  sb_wiener_var = AOMMAX(1, sb_wiener_var);
-
-  return (int)(sqrt(sb_wiener_var));
-}
-
-static int get_var_perceptual_ai(AV1_COMP *const cpi, BLOCK_SIZE bsize,
-                                 int mi_row, int mi_col) {
-  AV1_COMMON *const cm = &cpi->common;
-  const int mi_wide = mi_size_wide[bsize];
-  const int mi_high = mi_size_high[bsize];
-
-  int sb_wiener_var = get_window_wiener_var(cpi, bsize, mi_row, mi_col);
-
-  if (mi_row >= (mi_high / 2)) {
-    sb_wiener_var =
-        AOMMIN(sb_wiener_var,
-               get_window_wiener_var(cpi, bsize, mi_row - mi_high / 2, mi_col));
-  }
-  if (mi_row <= (cm->mi_params.mi_rows - mi_high - (mi_high / 2))) {
-    sb_wiener_var =
-        AOMMIN(sb_wiener_var,
-               get_window_wiener_var(cpi, bsize, mi_row + mi_high / 2, mi_col));
-  }
-  if (mi_col >= (mi_wide / 2)) {
-    sb_wiener_var =
-        AOMMIN(sb_wiener_var,
-               get_window_wiener_var(cpi, bsize, mi_row, mi_col - mi_wide / 2));
-  }
-  if (mi_col <= (cm->mi_params.mi_cols - mi_wide - (mi_wide / 2))) {
-    sb_wiener_var =
-        AOMMIN(sb_wiener_var,
-               get_window_wiener_var(cpi, bsize, mi_row, mi_col + mi_wide / 2));
-  }
-
-  return sb_wiener_var;
-}
-
-static void set_mb_wiener_variance(AV1_COMP *cpi) {
-  AV1_COMMON *const cm = &cpi->common;
-  uint8_t *buffer = cpi->source->y_buffer;
-  int buf_stride = cpi->source->y_stride;
-  ThreadData *td = &cpi->td;
-  MACROBLOCK *x = &td->mb;
-  MACROBLOCKD *xd = &x->e_mbd;
-  MB_MODE_INFO mbmi;
-  memset(&mbmi, 0, sizeof(mbmi));
-  MB_MODE_INFO *mbmi_ptr = &mbmi;
-  xd->mi = &mbmi_ptr;
-
-  union {
-#if CONFIG_AV1_HIGHBITDEPTH
-    DECLARE_ALIGNED(32, uint16_t, zero_pred16[32 * 32]);
-#endif
-    DECLARE_ALIGNED(32, uint8_t, zero_pred8[32 * 32]);
-  } pred_buffer_mem;
-  uint8_t *pred_buf;
-
-  DECLARE_ALIGNED(32, int16_t, src_diff[32 * 32]);
-  DECLARE_ALIGNED(32, tran_low_t, coeff[32 * 32]);
-
-  int mb_row, mb_col, count = 0;
-  const TX_SIZE tx_size = TX_16X16;
-  const int block_size = tx_size_wide[tx_size];
-  const int coeff_count = block_size * block_size;
-
-#if CONFIG_AV1_HIGHBITDEPTH
-  xd->cur_buf = cpi->source;
-  if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-    pred_buf = CONVERT_TO_BYTEPTR(pred_buffer_mem.zero_pred16);
-    memset(pred_buffer_mem.zero_pred16, 0,
-           sizeof(*pred_buffer_mem.zero_pred16) * coeff_count);
-  } else {
-    pred_buf = pred_buffer_mem.zero_pred8;
-    memset(pred_buffer_mem.zero_pred8, 0,
-           sizeof(*pred_buffer_mem.zero_pred8) * coeff_count);
-  }
-#else
-  pred_buf = pred_buffer_mem.zero_pred8;
-  memset(pred_buffer_mem.zero_pred8, 0,
-         sizeof(*pred_buffer_mem.zero_pred8) * coeff_count);
-#endif
-
-  const BitDepthInfo bd_info = get_bit_depth_info(xd);
-  cpi->norm_wiener_variance = 0;
-
-  int mb_step = mi_size_wide[BLOCK_16X16];
-
-  for (mb_row = 0; mb_row < cpi->frame_info.mb_rows; ++mb_row) {
-    for (mb_col = 0; mb_col < cpi->frame_info.mb_cols; ++mb_col) {
-      PREDICTION_MODE best_mode = DC_PRED;
-      int best_intra_cost = INT_MAX;
-
-      int mi_row = mb_row * mb_step;
-      int mi_col = mb_col * mb_step;
-
-      xd->up_available = mi_row > 0;
-      xd->left_available = mi_col > 0;
-
-      int dst_mb_offset = mi_row * MI_SIZE * buf_stride + mi_col * MI_SIZE;
-      uint8_t *dst_buffer = xd->cur_buf->y_buffer + dst_mb_offset;
-
-      for (PREDICTION_MODE mode = INTRA_MODE_START; mode < INTRA_MODE_END;
-           ++mode) {
-        av1_predict_intra_block(xd, cm->seq_params->sb_size,
-                                cm->seq_params->enable_intra_edge_filter,
-                                block_size, block_size, tx_size, mode, 0, 0,
-                                FILTER_INTRA_MODES, dst_buffer, buf_stride,
-                                pred_buf, block_size, 0, 0, 0);
-
-        av1_subtract_block(bd_info, block_size, block_size, src_diff,
-                           block_size, dst_buffer, buf_stride, pred_buf,
-                           block_size);
-        av1_quick_txfm(0, tx_size, bd_info, src_diff, block_size, coeff);
-        int intra_cost = aom_satd(coeff, coeff_count);
-        if (intra_cost < best_intra_cost) {
-          best_intra_cost = intra_cost;
-          best_mode = mode;
-        }
-      }
-
-      int idx;
-      int16_t median_val = 0;
-      uint8_t *mb_buffer =
-          buffer + mb_row * block_size * buf_stride + mb_col * block_size;
-      int64_t wiener_variance = 0;
-      av1_predict_intra_block(
-          xd, cm->seq_params->sb_size, cm->seq_params->enable_intra_edge_filter,
-          block_size, block_size, tx_size, best_mode, 0, 0, FILTER_INTRA_MODES,
-          dst_buffer, buf_stride, pred_buf, block_size, 0, 0, 0);
-      av1_subtract_block(bd_info, block_size, block_size, src_diff, block_size,
-                         mb_buffer, buf_stride, pred_buf, block_size);
-      av1_quick_txfm(0, tx_size, bd_info, src_diff, block_size, coeff);
-      coeff[0] = 0;
-      for (idx = 1; idx < coeff_count; ++idx) coeff[idx] = abs(coeff[idx]);
-
-      qsort(coeff, coeff_count - 1, sizeof(*coeff), qsort_comp);
-
-      // Noise level estimation
-      median_val = coeff[coeff_count / 2];
-
-      // Wiener filter
-      for (idx = 1; idx < coeff_count; ++idx) {
-        int64_t sqr_coeff = (int64_t)coeff[idx] * coeff[idx];
-        int64_t tmp_coeff = (int64_t)coeff[idx];
-        if (median_val) {
-          tmp_coeff = (sqr_coeff * coeff[idx]) /
-                      (sqr_coeff + (int64_t)median_val * median_val);
-        }
-        wiener_variance += tmp_coeff * tmp_coeff;
-      }
-      cpi->mb_wiener_variance[mb_row * cpi->frame_info.mb_cols + mb_col] =
-          wiener_variance / coeff_count;
-      ++count;
-    }
-  }
-
-  int sb_step = mi_size_wide[cm->seq_params->sb_size];
-  double sb_wiener_log = 0;
-  int sb_count = 0;
-
-  for (int mi_row = 0; mi_row < cm->mi_params.mi_rows; mi_row += sb_step) {
-    for (int mi_col = 0; mi_col < cm->mi_params.mi_cols; mi_col += sb_step) {
-      int sb_wiener_var =
-          get_var_perceptual_ai(cpi, cm->seq_params->sb_size, mi_row, mi_col);
-      sb_wiener_log += log(sb_wiener_var);
-      ++sb_count;
-    }
-  }
-
-  if (sb_count)
-    cpi->norm_wiener_variance = (int64_t)(exp(sb_wiener_log / sb_count));
-  cpi->norm_wiener_variance = AOMMAX(1, cpi->norm_wiener_variance);
-}
-
-int av1_get_sbq_perceptual_ai(AV1_COMP *const cpi, BLOCK_SIZE bsize, int mi_row,
-                              int mi_col) {
-  AV1_COMMON *const cm = &cpi->common;
-  const int base_qindex = cm->quant_params.base_qindex;
-  int sb_wiener_var = get_var_perceptual_ai(cpi, bsize, mi_row, mi_col);
-  int offset = 0;
-  double beta = (double)cpi->norm_wiener_variance / sb_wiener_var;
-  // Cap beta such that the delta q value is not much far away from the base q.
-  beta = AOMMIN(beta, 4);
-  beta = AOMMAX(beta, 0.25);
-  offset = av1_get_deltaq_offset(cm->seq_params->bit_depth, base_qindex, beta);
-  const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
-  offset = AOMMIN(offset, delta_q_info->delta_q_res * 20 - 1);
-  offset = AOMMAX(offset, -delta_q_info->delta_q_res * 20 + 1);
-  int qindex = cm->quant_params.base_qindex + offset;
-  qindex = AOMMIN(qindex, MAXQ);
-  qindex = AOMMAX(qindex, MINQ);
-  if (base_qindex > MINQ) qindex = AOMMAX(qindex, MINQ + 1);
-
-  return qindex;
-}
-
 extern void av1_print_frame_contexts(const FRAME_CONTEXT *fc,
                                      const char *filename);
 
@@ -3535,8 +3296,8 @@
 #endif
 
   if (cpi->oxcf.q_cfg.deltaq_mode == DELTA_Q_PERCEPTUAL_AI) {
-    init_mb_wiener_var_buffer(cpi);
-    set_mb_wiener_variance(cpi);
+    av1_init_mb_wiener_var_buffer(cpi);
+    av1_set_mb_wiener_variance(cpi);
   }
 
 #if CONFIG_INTERNAL_STATS
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index ffbc19e..eefbce9 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -3319,9 +3319,6 @@
 
 void av1_update_frame_size(AV1_COMP *cpi);
 
-int av1_get_sbq_perceptual_ai(AV1_COMP *const cpi, BLOCK_SIZE bsize, int mi_row,
-                              int mi_col);
-
 #if CONFIG_FRAME_PARALLEL_ENCODE
 typedef struct {
   int pyr_level;