Optimizations for filter_intra
Reduce number of modes from 10 to 6, and disable fi modes in UV.
To reduce complexity, apply filter directly without subtracting
the estimated means.
Change-Id: Iaf78d92d31e4a7cc30ea7863b57a9611c5f503e6
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 719cef2..e9164ef 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -859,8 +859,7 @@
#if CONFIG_FILTER_INTRA
static void read_filter_intra_mode_info(AV1_COMMON *const cm,
- MACROBLOCKD *const xd, int mi_row,
- int mi_col, aom_reader *r) {
+ MACROBLOCKD *const xd, aom_reader *r) {
MODE_INFO *const mi = xd->mi[0];
MB_MODE_INFO *const mbmi = &mi->mbmi;
FRAME_COUNTS *counts = xd->counts;
@@ -880,26 +879,6 @@
->filter_intra[0][filter_intra_mode_info->use_filter_intra_mode[0]];
}
}
-
- if (!is_chroma_reference(mi_row, mi_col, mbmi->sb_type,
- xd->plane[1].subsampling_x,
- xd->plane[1].subsampling_y))
- return;
-
- if (mbmi->uv_mode == UV_DC_PRED &&
- mbmi->palette_mode_info.palette_size[1] == 0) {
- filter_intra_mode_info->use_filter_intra_mode[1] =
- aom_read(r, cm->fc->filter_intra_probs[1], ACCT_STR);
- if (filter_intra_mode_info->use_filter_intra_mode[1]) {
- filter_intra_mode_info->filter_intra_mode[1] =
- aom_read_symbol(r, xd->tile_ctx->filter_intra_mode_cdf[1],
- FILTER_INTRA_MODES, ACCT_STR);
- }
- if (counts) {
- ++counts
- ->filter_intra[1][filter_intra_mode_info->use_filter_intra_mode[1]];
- }
- }
}
#endif // CONFIG_FILTER_INTRA
@@ -971,9 +950,21 @@
r, ec_ctx->inter_ext_tx_cdf[eset][square_tx_size],
av1_num_ext_tx_set[tx_set_type], ACCT_STR)];
} else if (ALLOW_INTRA_EXT_TX) {
+#if CONFIG_FILTER_INTRA
+ PREDICTION_MODE intra_dir;
+ if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0])
+ intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
+ .filter_intra_mode[0]];
+ else
+ intra_dir = mbmi->mode;
+ *tx_type = av1_ext_tx_inv[tx_set_type][aom_read_symbol(
+ r, ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][intra_dir],
+ av1_num_ext_tx_set[tx_set_type], ACCT_STR)];
+#else
*tx_type = av1_ext_tx_inv[tx_set_type][aom_read_symbol(
r, ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][mbmi->mode],
av1_num_ext_tx_set[tx_set_type], ACCT_STR)];
+#endif
}
#else
// only signal tx_type when lgt is not allowed or not selected
@@ -1276,7 +1267,7 @@
#if CONFIG_FILTER_INTRA
mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
mbmi->filter_intra_mode_info.use_filter_intra_mode[1] = 0;
- read_filter_intra_mode_info(cm, xd, mi_row, mi_col, r);
+ read_filter_intra_mode_info(cm, xd, r);
#endif // CONFIG_FILTER_INTRA
#if !CONFIG_TXK_SEL
@@ -1812,7 +1803,7 @@
#if CONFIG_FILTER_INTRA
mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
mbmi->filter_intra_mode_info.use_filter_intra_mode[1] = 0;
- read_filter_intra_mode_info(cm, xd, mi_row, mi_col, r);
+ read_filter_intra_mode_info(cm, xd, r);
#endif // CONFIG_FILTER_INTRA
}