Make filter intra RD search support txk-sel
Store the selected tx type per transform block in the filter
intra RD search loop.
Change-Id: Icf6b5fe21e500fe31a3ccb5b5d460fd6230bb1dc
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index c42d249..45d7ba1 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2860,7 +2860,9 @@
TX_SIZE best_tx_size = TX_8X8;
FILTER_INTRA_MODE_INFO filter_intra_mode_info;
TX_TYPE best_tx_type;
-
+#if CONFIG_TXK_SEL
+ TX_TYPE best_txk_type[MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)];
+#endif
av1_zero(filter_intra_mode_info);
mbmi->filter_intra_mode_info.use_filter_intra = 1;
mbmi->mode = DC_PRED;
@@ -2888,6 +2890,11 @@
best_tx_size = mic->mbmi.tx_size;
filter_intra_mode_info = mbmi->filter_intra_mode_info;
best_tx_type = mic->mbmi.tx_type;
+#if CONFIG_TXK_SEL
+ memcpy(best_txk_type, mbmi->txk_type,
+ sizeof(*best_txk_type) *
+ (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
+#endif
*rate = this_rate;
*rate_tokenonly = tokenonly_rd_stats.rate;
*distortion = tokenonly_rd_stats.dist;
@@ -2901,6 +2908,11 @@
mbmi->tx_size = best_tx_size;
mbmi->filter_intra_mode_info = filter_intra_mode_info;
mbmi->tx_type = best_tx_type;
+#if CONFIG_TXK_SEL
+ memcpy(mbmi->txk_type, best_txk_type,
+ sizeof(*best_txk_type) *
+ (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
+#endif
return 1;
} else {
return 0;
@@ -9402,6 +9414,12 @@
int filter_intra_selected_flag = 0;
TX_SIZE best_tx_size = mbmi->tx_size;
TX_TYPE best_tx_type = mbmi->tx_type;
+#if CONFIG_TXK_SEL
+ TX_TYPE best_txk_type[MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)];
+ memcpy(best_txk_type, mbmi->txk_type,
+ sizeof(*best_txk_type) *
+ (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
+#endif
FILTER_INTRA_MODE best_fi_mode = FILTER_DC_PRED;
int64_t best_rd_tmp = INT64_MAX;
if (rate_y != INT_MAX &&
@@ -9430,6 +9448,11 @@
if (this_rd_tmp < best_rd_tmp) {
best_tx_size = mbmi->tx_size;
best_tx_type = mbmi->tx_type;
+#if CONFIG_TXK_SEL
+ memcpy(best_txk_type, mbmi->txk_type,
+ sizeof(*best_txk_type) *
+ (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
+#endif
best_fi_mode = fi_mode;
rd_stats_y = rd_stats_y_fi;
rate_y = rd_stats_y_fi.rate;
@@ -9442,6 +9465,11 @@
mbmi->tx_size = best_tx_size;
mbmi->tx_type = best_tx_type;
+#if CONFIG_TXK_SEL
+ memcpy(mbmi->txk_type, best_txk_type,
+ sizeof(*best_txk_type) *
+ (MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)));
+#endif
if (filter_intra_selected_flag) {
mbmi->filter_intra_mode_info.use_filter_intra = 1;
mbmi->filter_intra_mode_info.filter_intra_mode = best_fi_mode;