Move av1_search_txk_type() to rdopt.c

Change-Id: I4f9d014324b35e30f25cae5fa570620249640cf6
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 9223b70..9e4ffd4 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -2362,104 +2362,3 @@
     assert(0);
   }
 }
-
-#if CONFIG_TXK_SEL
-int64_t av1_search_txk_type(const AV1_COMP *cpi, MACROBLOCK *x, int plane,
-                            int block, int blk_row, int blk_col,
-                            BLOCK_SIZE plane_bsize, TX_SIZE tx_size,
-                            const ENTROPY_CONTEXT *a, const ENTROPY_CONTEXT *l,
-                            int use_fast_coef_costing, RD_STATS *rd_stats) {
-  const AV1_COMMON *cm = &cpi->common;
-  MACROBLOCKD *xd = &x->e_mbd;
-  MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
-  TX_TYPE txk_start = DCT_DCT;
-  TX_TYPE txk_end = x->rd_model ? DCT_DCT : TX_TYPES - 1;
-  TX_TYPE best_tx_type = txk_start;
-  int64_t best_rd = INT64_MAX;
-  uint8_t best_txb_ctx = 0;
-  uint16_t best_eob = 0;
-  RD_STATS best_rd_stats;
-  TX_TYPE tx_type;
-  int rate_cost = 0;
-
-  av1_invalid_rd_stats(&best_rd_stats);
-
-  for (tx_type = txk_start; tx_type <= txk_end; ++tx_type) {
-    if (plane == 0)
-      mbmi->txk_type[(blk_row << MAX_MIB_SIZE_LOG2) + blk_col] = tx_type;
-    TX_TYPE ref_tx_type =
-        av1_get_tx_type(get_plane_type(plane), xd, blk_row, blk_col, tx_size);
-    if (tx_type != ref_tx_type) {
-      // use av1_get_tx_type() to check if the tx_type is valid for the current
-      // mode if it's not, we skip it here.
-      continue;
-    }
-
-    RD_STATS this_rd_stats;
-    av1_invalid_rd_stats(&this_rd_stats);
-    if (cpi->sf.optimize_coefficients != FULL_TRELLIS_OPT) {
-      av1_xform_quant(
-          cm, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
-          USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP);
-    } else {
-      av1_xform_quant(cm, x, plane, block, blk_row, blk_col, plane_bsize,
-                      tx_size, AV1_XFORM_QUANT_FP);
-      av1_optimize_b(cpi, x, plane, blk_row, blk_col, block, plane_bsize,
-                     tx_size, a, l, 1, &rate_cost);
-    }
-    av1_dist_block(cpi, x, plane, plane_bsize, block, blk_row, blk_col, tx_size,
-                   &this_rd_stats.dist, &this_rd_stats.sse,
-                   OUTPUT_HAS_PREDICTED_PIXELS);
-
-    const int eob = x->plane[plane].eobs[block];
-    const SCAN_ORDER *scan_order = get_scan(cm, tx_size, tx_type, mbmi);
-    if (eob)
-      rate_cost +=
-          av1_tx_type_cost(cm, x, xd, mbmi->sb_type, plane, tx_size, tx_type);
-    else
-      rate_cost =
-          av1_cost_coeffs(cpi, x, plane, blk_row, blk_col, block, tx_size,
-                          scan_order, a, l, use_fast_coef_costing);
-    this_rd_stats.rate = rate_cost;
-
-    int64_t rd = RDCOST(x->rdmult, this_rd_stats.rate, this_rd_stats.dist);
-
-    if (rd < best_rd) {
-      best_rd = rd;
-      best_rd_stats = this_rd_stats;
-      best_tx_type = tx_type;
-      best_txb_ctx = x->plane[plane].txb_entropy_ctx[block];
-      best_eob = x->plane[plane].eobs[block];
-    }
-  }
-
-  av1_merge_rd_stats(rd_stats, &best_rd_stats);
-
-  if (best_eob == 0) best_tx_type = DCT_DCT;
-
-  if (plane == 0)
-    mbmi->txk_type[(blk_row << MAX_MIB_SIZE_LOG2) + blk_col] = best_tx_type;
-  x->plane[plane].txb_entropy_ctx[block] = best_txb_ctx;
-  x->plane[plane].eobs[block] = best_eob;
-
-  if (!is_inter_block(mbmi) && best_eob) {
-    // intra mode needs decoded result such that the next transform block
-    // can use it for prediction.
-    if (cpi->sf.optimize_coefficients != FULL_TRELLIS_OPT) {
-      av1_xform_quant(
-          cm, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
-          USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP);
-    } else {
-      av1_xform_quant(cm, x, plane, block, blk_row, blk_col, plane_bsize,
-                      tx_size, AV1_XFORM_QUANT_FP);
-      av1_optimize_b(cpi, x, plane, blk_row, blk_col, block, plane_bsize,
-                     tx_size, a, l, 1, &rate_cost);
-    }
-
-    av1_inverse_transform_block_facade(xd, plane, block, blk_row, blk_col,
-                                       x->plane[plane].eobs[block],
-                                       cm->reduced_tx_set_used);
-  }
-  return best_rd;
-}
-#endif  // CONFIG_TXK_SEL
diff --git a/av1/encoder/encodetxb.h b/av1/encoder/encodetxb.h
index b867464..714b16c 100644
--- a/av1/encoder/encodetxb.h
+++ b/av1/encoder/encodetxb.h
@@ -94,14 +94,6 @@
 void av1_set_coeff_buffer(const AV1_COMP *const cpi, MACROBLOCK *const x,
                           int mi_row, int mi_col);
 
-#if CONFIG_TXK_SEL
-int64_t av1_search_txk_type(const AV1_COMP *cpi, MACROBLOCK *x, int plane,
-                            int block, int blk_row, int blk_col,
-                            BLOCK_SIZE plane_bsize, TX_SIZE tx_size,
-                            const ENTROPY_CONTEXT *a, const ENTROPY_CONTEXT *l,
-                            int use_fast_coef_costing, RD_STATS *rd_stats);
-#endif
-
 int av1_optimize_txb(const AV1_COMP *cpi, MACROBLOCK *x, int plane, int blk_row,
                      int blk_col, int block, TX_SIZE tx_size, TXB_CTX *txb_ctx,
                      int fast_mode, int *rate_cost);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 2fb4340..97f586e 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1817,6 +1817,106 @@
   }
 }
 
+#if CONFIG_TXK_SEL
+static int64_t search_txk_type(const AV1_COMP *cpi, MACROBLOCK *x, int plane,
+                               int block, int blk_row, int blk_col,
+                               BLOCK_SIZE plane_bsize, TX_SIZE tx_size,
+                               const ENTROPY_CONTEXT *a,
+                               const ENTROPY_CONTEXT *l,
+                               int use_fast_coef_costing, RD_STATS *rd_stats) {
+  const AV1_COMMON *cm = &cpi->common;
+  MACROBLOCKD *xd = &x->e_mbd;
+  MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
+  int rate_cost = 0;
+  const int is_inter = is_inter_block(mbmi);
+  TX_TYPE txk_start = DCT_DCT;
+  TX_TYPE txk_end = x->rd_model ? DCT_DCT : TX_TYPES - 1;
+  TX_TYPE best_tx_type = txk_start;
+  int64_t best_rd = INT64_MAX;
+  uint8_t best_txb_ctx = 0;
+  uint16_t best_eob = 0;
+  RD_STATS best_rd_stats;
+  av1_invalid_rd_stats(&best_rd_stats);
+  for (TX_TYPE tx_type = txk_start; tx_type <= txk_end; ++tx_type) {
+    if (plane == 0)
+      mbmi->txk_type[(blk_row << MAX_MIB_SIZE_LOG2) + blk_col] = tx_type;
+    TX_TYPE ref_tx_type =
+        av1_get_tx_type(get_plane_type(plane), xd, blk_row, blk_col, tx_size);
+    if (tx_type != ref_tx_type) {
+      // use av1_get_tx_type() to check if the tx_type is valid for the current
+      // mode if it's not, we skip it here.
+      continue;
+    }
+
+    RD_STATS this_rd_stats;
+    av1_invalid_rd_stats(&this_rd_stats);
+    if (cpi->sf.optimize_coefficients != FULL_TRELLIS_OPT) {
+      av1_xform_quant(
+          cm, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
+          USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP);
+    } else {
+      av1_xform_quant(cm, x, plane, block, blk_row, blk_col, plane_bsize,
+                      tx_size, AV1_XFORM_QUANT_FP);
+      av1_optimize_b(cpi, x, plane, blk_row, blk_col, block, plane_bsize,
+                     tx_size, a, l, 1, &rate_cost);
+    }
+    av1_dist_block(cpi, x, plane, plane_bsize, block, blk_row, blk_col, tx_size,
+                   &this_rd_stats.dist, &this_rd_stats.sse,
+                   OUTPUT_HAS_PREDICTED_PIXELS);
+
+    const int eob = x->plane[plane].eobs[block];
+    const SCAN_ORDER *scan_order = get_scan(cm, tx_size, tx_type, mbmi);
+    if (eob)
+      rate_cost +=
+          av1_tx_type_cost(cm, x, xd, mbmi->sb_type, plane, tx_size, tx_type);
+    else
+      rate_cost =
+          av1_cost_coeffs(cpi, x, plane, blk_row, blk_col, block, tx_size,
+                          scan_order, a, l, use_fast_coef_costing);
+    this_rd_stats.rate = rate_cost;
+
+    int64_t rd = RDCOST(x->rdmult, this_rd_stats.rate, this_rd_stats.dist);
+
+    if (rd < best_rd) {
+      best_rd = rd;
+      best_rd_stats = this_rd_stats;
+      best_tx_type = tx_type;
+      best_txb_ctx = x->plane[plane].txb_entropy_ctx[block];
+      best_eob = x->plane[plane].eobs[block];
+    }
+  }
+
+  av1_merge_rd_stats(rd_stats, &best_rd_stats);
+
+  if (best_eob == 0) best_tx_type = DCT_DCT;
+
+  if (plane == 0)
+    mbmi->txk_type[(blk_row << MAX_MIB_SIZE_LOG2) + blk_col] = best_tx_type;
+  x->plane[plane].txb_entropy_ctx[block] = best_txb_ctx;
+  x->plane[plane].eobs[block] = best_eob;
+
+  if (!is_inter && best_eob) {
+    // intra mode needs decoded result such that the next transform block
+    // can use it for prediction.
+    if (cpi->sf.optimize_coefficients != FULL_TRELLIS_OPT) {
+      av1_xform_quant(
+          cm, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
+          USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP);
+    } else {
+      av1_xform_quant(cm, x, plane, block, blk_row, blk_col, plane_bsize,
+                      tx_size, AV1_XFORM_QUANT_FP);
+      av1_optimize_b(cpi, x, plane, blk_row, blk_col, block, plane_bsize,
+                     tx_size, a, l, 1, &rate_cost);
+    }
+
+    av1_inverse_transform_block_facade(xd, plane, block, blk_row, blk_col,
+                                       x->plane[plane].eobs[block],
+                                       cm->reduced_tx_set_used);
+  }
+  return best_rd;
+}
+#endif  // CONFIG_TXK_SEL
+
 static void block_rd_txfm(int plane, int block, int blk_row, int blk_col,
                           BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
   struct rdcost_block_args *args = arg;
@@ -1935,9 +2035,8 @@
 
   this_rd_stats.rate = rate_cost;
 #else   // !CONFIG_TXK_SEL
-  av1_search_txk_type(cpi, x, plane, block, blk_row, blk_col, plane_bsize,
-                      tx_size, a, l, args->use_fast_coef_costing,
-                      &this_rd_stats);
+  search_txk_type(cpi, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
+                  a, l, args->use_fast_coef_costing, &this_rd_stats);
 #endif  // !CONFIG_TXK_SEL
 
 #if CONFIG_CFL
@@ -2438,7 +2537,7 @@
     TX_TYPE tx_end = TX_TYPES;
 #if CONFIG_TXK_SEL
     // The tx_type becomes dummy when lv_map is on. The tx_type search will be
-    // performed in av1_search_txk_type()
+    // performed in search_txk_type()
     tx_end = DCT_DCT + 1;
 #endif
     TX_TYPE tx_type;
@@ -3521,8 +3620,8 @@
   const struct macroblock_plane *const p = &x->plane[plane];
   struct macroblockd_plane *const pd = &xd->plane[plane];
 #if CONFIG_TXK_SEL
-  av1_search_txk_type(cpi, x, plane, block, blk_row, blk_col, plane_bsize,
-                      tx_size, a, l, 0, rd_stats);
+  search_txk_type(cpi, x, plane, block, blk_row, blk_col, plane_bsize, tx_size,
+                  a, l, 0, rd_stats);
   return;
 #endif
   // This function is used only for inter