Remove filter_intra mode info for UV plane
Change-Id: I92f73b78dfd0e25a61897e8b6e9e28ff210376d5
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 5076708..d011e1b 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -194,9 +194,8 @@
#if CONFIG_FILTER_INTRA
typedef struct {
- // 1: an ext intra mode is used; 0: otherwise.
- uint8_t use_filter_intra_mode[PLANE_TYPES];
- FILTER_INTRA_MODE filter_intra_mode[PLANE_TYPES];
+ uint8_t use_filter_intra;
+ FILTER_INTRA_MODE filter_intra_mode;
} FILTER_INTRA_MODE_INFO;
static const PREDICTION_MODE fimode_to_intradir[FILTER_INTRA_MODES] = {
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index 6cdea0e..bc9d522 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -1731,10 +1731,10 @@
const int is_dr_mode = av1_is_directional_mode(mode, xd->mi[0]->mbmi.sb_type);
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
- const FILTER_INTRA_MODE_INFO *filter_intra_mode_info =
- &xd->mi[0]->mbmi.filter_intra_mode_info;
+ const int use_filter_intra =
+ plane > 0 ? 0 : xd->mi[0]->mbmi.filter_intra_mode_info.use_filter_intra;
const FILTER_INTRA_MODE filter_intra_mode =
- filter_intra_mode_info->filter_intra_mode[plane != 0];
+ xd->mi[0]->mbmi.filter_intra_mode_info.filter_intra_mode;
#endif // CONFIG_FILTER_INTRA
int base = 128 << (xd->bd - 8);
@@ -1758,8 +1758,7 @@
}
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0])
- need_left = need_above = need_above_left = 1;
+ if (use_filter_intra) need_left = need_above = need_above_left = 1;
#endif // CONFIG_FILTER_INTRA
(void)plane;
@@ -1791,8 +1790,7 @@
#if CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA
int need_bottom = !!(extend_modes[mode] & NEED_BOTTOMLEFT);
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0])
- need_bottom = 0;
+ if (use_filter_intra) need_bottom = 0;
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
if (is_dr_mode) need_bottom = p_angle > 180;
@@ -1829,8 +1827,7 @@
#if CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA
int need_right = !!(extend_modes[mode] & NEED_ABOVERIGHT);
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0])
- need_right = 1;
+ if (use_filter_intra) need_right = 0;
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
if (is_dr_mode) need_right = p_angle < 90;
@@ -1883,7 +1880,7 @@
}
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0]) {
+ if (use_filter_intra) {
highbd_filter_intra_predictors(filter_intra_mode, dst, dst_stride, tx_size,
above_row, left_col, xd->bd);
return;
@@ -1975,10 +1972,10 @@
const int is_dr_mode = av1_is_directional_mode(mode, mbmi->sb_type);
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
- const FILTER_INTRA_MODE_INFO *filter_intra_mode_info =
- &xd->mi[0]->mbmi.filter_intra_mode_info;
+ const int use_filter_intra =
+ plane > 0 ? 0 : xd->mi[0]->mbmi.filter_intra_mode_info.use_filter_intra;
const FILTER_INTRA_MODE filter_intra_mode =
- filter_intra_mode_info->filter_intra_mode[plane != 0];
+ xd->mi[0]->mbmi.filter_intra_mode_info.filter_intra_mode;
#endif // CONFIG_FILTER_INTRA
// 127 127 127 .. 127 127 127 127 127 127
@@ -2002,8 +1999,7 @@
}
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0])
- need_left = need_above = need_above_left = 1;
+ if (use_filter_intra) need_left = need_above = need_above_left = 1;
#endif // CONFIG_FILTER_INTRA
(void)xd;
@@ -2036,8 +2032,7 @@
#if CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA
int need_bottom = !!(extend_modes[mode] & NEED_BOTTOMLEFT);
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0])
- need_bottom = 0;
+ if (use_filter_intra) need_bottom = 0;
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
if (is_dr_mode) need_bottom = p_angle > 180;
@@ -2074,8 +2069,7 @@
#if CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA
int need_right = !!(extend_modes[mode] & NEED_ABOVERIGHT);
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0])
- need_right = 1;
+ if (use_filter_intra) need_right = 0;
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
if (is_dr_mode) need_right = p_angle < 90;
@@ -2125,7 +2119,7 @@
}
#if CONFIG_FILTER_INTRA
- if (filter_intra_mode_info->use_filter_intra_mode[plane != 0]) {
+ if (use_filter_intra) {
filter_intra_predictors(filter_intra_mode, dst, dst_stride, tx_size,
above_row, left_col);
return;
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 71c0e67..f8c8f56 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -872,10 +872,10 @@
if (mbmi->mode == DC_PRED && mbmi->palette_mode_info.palette_size[0] == 0 &&
av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
- filter_intra_mode_info->use_filter_intra_mode[0] = aom_read_symbol(
+ filter_intra_mode_info->use_filter_intra = aom_read_symbol(
r, xd->tile_ctx->filter_intra_cdfs[mbmi->tx_size], 2, ACCT_STR);
- if (filter_intra_mode_info->use_filter_intra_mode[0]) {
- filter_intra_mode_info->filter_intra_mode[0] =
+ if (filter_intra_mode_info->use_filter_intra) {
+ filter_intra_mode_info->filter_intra_mode =
aom_read_symbol(r, xd->tile_ctx->filter_intra_mode_cdf[0],
FILTER_INTRA_MODES, ACCT_STR);
}
@@ -971,9 +971,9 @@
} 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])
+ if (mbmi->filter_intra_mode_info.use_filter_intra)
intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
- .filter_intra_mode[0]];
+ .filter_intra_mode];
else
intra_dir = mbmi->mode;
*tx_type = av1_ext_tx_inv[tx_set_type][aom_read_symbol(
@@ -1211,8 +1211,7 @@
if (av1_allow_palette(cm->allow_screen_content_tools, bsize))
read_palette_mode_info(cm, xd, r);
#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;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
read_filter_intra_mode_info(xd, r);
#endif // CONFIG_FILTER_INTRA
@@ -1576,8 +1575,7 @@
if (av1_allow_palette(cm->allow_screen_content_tools, bsize))
read_palette_mode_info(cm, xd, r);
#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;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
read_filter_intra_mode_info(xd, r);
#endif // CONFIG_FILTER_INTRA
}
@@ -2126,8 +2124,7 @@
mbmi->angle_delta[1] = 0;
#endif // CONFIG_EXT_INTRA
#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;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
if (is_interintra_wedge_used(bsize)) {
mbmi->use_wedge_interintra = aom_read_symbol(
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 3aedcdb..9f596c1 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -813,11 +813,11 @@
aom_writer *w) {
if (mbmi->mode == DC_PRED && mbmi->palette_mode_info.palette_size[0] == 0 &&
av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
- aom_write_symbol(w, mbmi->filter_intra_mode_info.use_filter_intra_mode[0],
+ aom_write_symbol(w, mbmi->filter_intra_mode_info.use_filter_intra,
xd->tile_ctx->filter_intra_cdfs[mbmi->tx_size], 2);
- if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0]) {
+ if (mbmi->filter_intra_mode_info.use_filter_intra) {
const FILTER_INTRA_MODE mode =
- mbmi->filter_intra_mode_info.filter_intra_mode[0];
+ mbmi->filter_intra_mode_info.filter_intra_mode;
aom_write_symbol(w, mode, xd->tile_ctx->filter_intra_mode_cdf[0],
FILTER_INTRA_MODES);
}
@@ -1118,9 +1118,9 @@
} 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])
+ if (mbmi->filter_intra_mode_info.use_filter_intra)
intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
- .filter_intra_mode[0]];
+ .filter_intra_mode];
else
intra_dir = mbmi->mode;
aom_write_symbol(
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index d7225d1..2ac3b37 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4279,7 +4279,7 @@
if (mbmi->mode == DC_PRED && mbmi->palette_mode_info.palette_size[0] == 0 &&
av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
const int use_filter_intra_mode =
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0];
+ mbmi->filter_intra_mode_info.use_filter_intra;
#if CONFIG_ENTROPY_STATS
if (use_filter_intra_mode) {
const PREDICTION_MODE above = av1_above_block_mode(above_mi);
@@ -4299,7 +4299,7 @@
if (allow_update_cdf) {
if (use_filter_intra_mode)
update_cdf(fc->filter_intra_mode_cdf[0],
- mbmi->filter_intra_mode_info.filter_intra_mode[0],
+ mbmi->filter_intra_mode_info.filter_intra_mode,
FILTER_INTRA_MODES);
update_cdf(fc->filter_intra_cdfs[mbmi->tx_size], use_filter_intra_mode,
2);
@@ -4563,9 +4563,9 @@
} else {
#if CONFIG_FILTER_INTRA
PREDICTION_MODE intra_dir;
- if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0])
+ if (mbmi->filter_intra_mode_info.use_filter_intra)
intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
- .filter_intra_mode[0]];
+ .filter_intra_mode];
else
intra_dir = mbmi->mode;
#if CONFIG_ENTROPY_STATS
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index ac3a6d9..c6c4275 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2362,9 +2362,9 @@
if (ext_tx_set > 0 && ALLOW_INTRA_EXT_TX) {
#if CONFIG_FILTER_INTRA
PREDICTION_MODE intra_dir;
- if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0])
+ if (mbmi->filter_intra_mode_info.use_filter_intra)
intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
- .filter_intra_mode[0]];
+ .filter_intra_mode];
else
intra_dir = mbmi->mode;
return x->intra_tx_type_costs[ext_tx_set][square_tx_size][intra_dir]
@@ -2401,8 +2401,7 @@
mbmi->tx_type = tx_type;
mbmi->tx_size = tx_size;
#if CONFIG_FILTER_INTRA
- if (!is_inter_block(mbmi) &&
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] &&
+ if (!is_inter_block(mbmi) && mbmi->filter_intra_mode_info.use_filter_intra &&
!av1_filter_intra_allowed_txsize(tx_size)) {
rd_stats->rate = INT_MAX;
// Note: Initialize following to avoid uninitialied warnings.
@@ -2723,7 +2722,7 @@
int64_t temp_sse, this_rd;
TX_SIZE tx_size = tx_size_from_tx_mode(bsize, cm->tx_mode, 0);
#if CONFIG_FILTER_INTRA
- if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0]) {
+ if (mbmi->filter_intra_mode_info.use_filter_intra) {
tx_size = av1_max_tx_size_for_filter_intra(bsize, cm->tx_mode);
if (!av1_filter_intra_allowed_txsize(tx_size)) return INT64_MAX;
}
@@ -2756,8 +2755,8 @@
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
if (mbmi->mode == DC_PRED && av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
- if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0]) {
- const int mode = mbmi->filter_intra_mode_info.filter_intra_mode[0];
+ if (mbmi->filter_intra_mode_info.use_filter_intra) {
+ const int mode = mbmi->filter_intra_mode_info.filter_intra_mode;
mode_cost += x->filter_intra_cost[mbmi->tx_size][1] +
x->filter_intra_mode_cost[0][mode];
} else {
@@ -2924,7 +2923,7 @@
#endif // CONFIG_HIGHBITDEPTH
colors = av1_count_colors(src, src_stride, rows, cols, count_buf);
#if CONFIG_FILTER_INTRA
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
if (colors > 1 && colors <= 64) {
@@ -2972,7 +2971,7 @@
mbmi->mode = DC_PRED;
#if CONFIG_FILTER_INTRA
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
if (rows * cols > MAX_PALETTE_SQUARE) return 0;
@@ -3053,7 +3052,7 @@
TX_TYPE best_tx_type;
av1_zero(filter_intra_mode_info);
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 1;
+ mbmi->filter_intra_mode_info.use_filter_intra = 1;
mbmi->mode = DC_PRED;
mbmi->palette_mode_info.palette_size[0] = 0;
@@ -3061,7 +3060,7 @@
int this_rate;
int64_t this_rd, this_model_rd;
RD_STATS tokenonly_rd_stats;
- mbmi->filter_intra_mode_info.filter_intra_mode[0] = mode;
+ mbmi->filter_intra_mode_info.filter_intra_mode = mode;
this_model_rd = intra_model_yrd(cpi, x, bsize, mode_cost);
if (*best_model_rd != INT64_MAX &&
this_model_rd > *best_model_rd + (*best_model_rd >> 1))
@@ -3090,10 +3089,7 @@
if (filter_intra_selected_flag) {
mbmi->mode = DC_PRED;
mbmi->tx_size = best_tx_size;
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] =
- filter_intra_mode_info.use_filter_intra_mode[0];
- mbmi->filter_intra_mode_info.filter_intra_mode[0] =
- filter_intra_mode_info.filter_intra_mode[0];
+ mbmi->filter_intra_mode_info = filter_intra_mode_info;
mbmi->tx_type = best_tx_type;
return 1;
} else {
@@ -3426,7 +3422,7 @@
directional_mode_skip_mask);
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
pmi->palette_size[0] = 0;
if (try_palette) {
@@ -5156,9 +5152,6 @@
if (rows * cols > MAX_PALETTE_SQUARE) return;
mbmi->uv_mode = UV_DC_PRED;
-#if CONFIG_FILTER_INTRA
- mbmi->filter_intra_mode_info.use_filter_intra_mode[1] = 0;
-#endif // CONFIG_FILTER_INTRA
int count_buf[1 << 12]; // Maximum (1 << 12) color levels.
#if CONFIG_HIGHBITDEPTH
@@ -5518,9 +5511,6 @@
static void init_sbuv_mode(MB_MODE_INFO *const mbmi) {
mbmi->uv_mode = UV_DC_PRED;
mbmi->palette_mode_info.palette_size[1] = 0;
-#if CONFIG_FILTER_INTRA
- mbmi->filter_intra_mode_info.use_filter_intra_mode[1] = 0;
-#endif // CONFIG_FILTER_INTRA
}
static int64_t rd_pick_intra_sbuv_mode(const AV1_COMP *const cpi, MACROBLOCK *x,
@@ -9724,8 +9714,7 @@
pmi->palette_size[0] = 0;
pmi->palette_size[1] = 0;
#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;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
// Evaluate all sub-pel filters irrespective of whether we can use
// them for this frame.
@@ -9836,12 +9825,12 @@
distortion_y);
}
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 1;
+ mbmi->filter_intra_mode_info.use_filter_intra = 1;
for (FILTER_INTRA_MODE fi_mode = FILTER_DC_PRED;
fi_mode < FILTER_INTRA_MODES; ++fi_mode) {
int this_rate_tmp;
int64_t this_rd_tmp;
- mbmi->filter_intra_mode_info.filter_intra_mode[0] = fi_mode;
+ mbmi->filter_intra_mode_info.filter_intra_mode = fi_mode;
super_block_yrd(cpi, x, &rd_stats_y_fi, bsize, best_rd);
if (rd_stats_y_fi.rate == INT_MAX) continue;
@@ -9868,10 +9857,10 @@
mbmi->tx_size = best_tx_size;
mbmi->tx_type = best_tx_type;
if (filter_intra_selected_flag) {
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 1;
- mbmi->filter_intra_mode_info.filter_intra_mode[0] = best_fi_mode;
+ mbmi->filter_intra_mode_info.use_filter_intra = 1;
+ mbmi->filter_intra_mode_info.filter_intra_mode = best_fi_mode;
} else {
- mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
}
}
#endif
@@ -9948,11 +9937,11 @@
if (mbmi->mode == DC_PRED &&
av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
rate2 +=
- x->filter_intra_cost[mbmi->tx_size][mbmi->filter_intra_mode_info
- .use_filter_intra_mode[0]];
- if (mbmi->filter_intra_mode_info.use_filter_intra_mode[0]) {
+ x->filter_intra_cost[mbmi->tx_size]
+ [mbmi->filter_intra_mode_info.use_filter_intra];
+ if (mbmi->filter_intra_mode_info.use_filter_intra) {
rate2 += x->filter_intra_mode_cost[0][mbmi->filter_intra_mode_info
- .filter_intra_mode[0]];
+ .filter_intra_mode];
}
}
#endif // CONFIG_FILTER_INTRA
@@ -9977,8 +9966,7 @@
mbmi->angle_delta[1] = 0;
#endif // CONFIG_EXT_INTRA
#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;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
}
mbmi->ref_mv_idx = 0;
@@ -11035,8 +11023,7 @@
mbmi->palette_mode_info.palette_size[1] = 0;
#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;
+ mbmi->filter_intra_mode_info.use_filter_intra = 0;
#endif // CONFIG_FILTER_INTRA
mbmi->mode = GLOBALMV;
mbmi->motion_mode = SIMPLE_TRANSLATION;