Replace array with variable for UV mode info
No need for using an arry as the UV transfrom size is fixed for a given
coding block.
Change-Id: I54470a1f0fc9cdc9a0e805899f74954b1f800b35
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 447d0b4..900b1dc 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -711,13 +711,13 @@
int angle_stats_ready;
uint8_t directional_mode_skip_mask[INTRA_MODES];
unsigned int best_pred_sse;
- int rate_uv_intra[TX_SIZES_ALL];
- int rate_uv_tokenonly[TX_SIZES_ALL];
- int64_t dist_uvs[TX_SIZES_ALL];
- int skip_uvs[TX_SIZES_ALL];
- UV_PREDICTION_MODE mode_uv[TX_SIZES_ALL];
- PALETTE_MODE_INFO pmi_uv[TX_SIZES_ALL];
- int8_t uv_angle_delta[TX_SIZES_ALL];
+ int rate_uv_intra;
+ int rate_uv_tokenonly;
+ int64_t dist_uvs;
+ int skip_uvs;
+ UV_PREDICTION_MODE mode_uv;
+ PALETTE_MODE_INFO pmi_uv;
+ int8_t uv_angle_delta;
int64_t best_pred_rd[REFERENCE_MODES];
int64_t best_pred_diff[REFERENCE_MODES];
// Save a set of single_newmv for each checked ref_mv.
@@ -11538,31 +11538,30 @@
rate2 += ref_costs_single[INTRA_FRAME];
if (num_planes > 1) {
uv_tx = av1_get_tx_size(AOM_PLANE_U, xd);
- if (search_state->rate_uv_intra[uv_tx] == INT_MAX) {
- choose_intra_uv_mode(
- cpi, x, bsize, uv_tx, &search_state->rate_uv_intra[uv_tx],
- &search_state->rate_uv_tokenonly[uv_tx],
- &search_state->dist_uvs[uv_tx], &search_state->skip_uvs[uv_tx],
- &search_state->mode_uv[uv_tx]);
- search_state->pmi_uv[uv_tx] = *pmi;
- search_state->uv_angle_delta[uv_tx] = mbmi->angle_delta[PLANE_TYPE_UV];
+ if (search_state->rate_uv_intra == INT_MAX) {
+ choose_intra_uv_mode(cpi, x, bsize, uv_tx, &search_state->rate_uv_intra,
+ &search_state->rate_uv_tokenonly,
+ &search_state->dist_uvs, &search_state->skip_uvs,
+ &search_state->mode_uv);
+ search_state->pmi_uv = *pmi;
+ search_state->uv_angle_delta = mbmi->angle_delta[PLANE_TYPE_UV];
}
- mbmi->uv_mode = search_state->mode_uv[uv_tx];
- pmi->palette_size[1] = search_state->pmi_uv[uv_tx].palette_size[1];
+ mbmi->uv_mode = search_state->mode_uv;
+ pmi->palette_size[1] = search_state->pmi_uv.palette_size[1];
if (pmi->palette_size[1] > 0) {
memcpy(pmi->palette_colors + PALETTE_MAX_SIZE,
- search_state->pmi_uv[uv_tx].palette_colors + PALETTE_MAX_SIZE,
+ search_state->pmi_uv.palette_colors + PALETTE_MAX_SIZE,
2 * PALETTE_MAX_SIZE * sizeof(pmi->palette_colors[0]));
}
- mbmi->angle_delta[PLANE_TYPE_UV] = search_state->uv_angle_delta[uv_tx];
- skippable = skippable && search_state->skip_uvs[uv_tx];
- distortion2 += search_state->dist_uvs[uv_tx];
- rate2 += search_state->rate_uv_intra[uv_tx];
+ mbmi->angle_delta[PLANE_TYPE_UV] = search_state->uv_angle_delta;
+ skippable = skippable && search_state->skip_uvs;
+ distortion2 += search_state->dist_uvs;
+ rate2 += search_state->rate_uv_intra;
}
if (skippable) {
rate2 -= rd_stats_y.rate;
- if (num_planes > 1) rate2 -= search_state->rate_uv_tokenonly[uv_tx];
+ if (num_planes > 1) rate2 -= search_state->rate_uv_tokenonly;
rate2 += x->skip_cost[av1_get_skip_context(xd)][1];
} else {
rate2 += x->skip_cost[av1_get_skip_context(xd)][0];
@@ -11628,9 +11627,7 @@
av1_zero(search_state->directional_mode_skip_mask);
search_state->best_pred_sse = UINT_MAX;
-
- for (int i = 0; i < TX_SIZES_ALL; i++)
- search_state->rate_uv_intra[i] = INT_MAX;
+ search_state->rate_uv_intra = INT_MAX;
av1_zero(search_state->pmi_uv);
@@ -11964,6 +11961,7 @@
super_block_yrd(cpi, x, rd_stats_y, bsize, search_state->best_rd);
}
+ // Pick filter intra modes.
if (mode == DC_PRED && av1_filter_intra_allowed_bsize(cm, bsize)) {
int try_filter_intra = 0;
int64_t best_rd_so_far = INT64_MAX;
@@ -11987,7 +11985,6 @@
uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE];
memcpy(best_blk_skip, x->blk_skip,
sizeof(best_blk_skip[0]) * ctx->num_4x4_blk);
-
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) {
@@ -12045,7 +12042,7 @@
cpi->oxcf.enable_palette &&
av1_allow_palette(cm->allow_screen_content_tools, mbmi->sb_type);
const TX_SIZE uv_tx = av1_get_tx_size(AOM_PLANE_U, xd);
- if (search_state->rate_uv_intra[uv_tx] == INT_MAX) {
+ if (search_state->rate_uv_intra == INT_MAX) {
const int rate_y =
rd_stats_y->skip ? x->skip_cost[skip_ctx][1] : rd_stats_y->rate;
const int64_t rdy =
@@ -12055,16 +12052,15 @@
search_state->skip_intra_modes = 1;
return INT64_MAX;
}
- choose_intra_uv_mode(
- cpi, x, bsize, uv_tx, &search_state->rate_uv_intra[uv_tx],
- &search_state->rate_uv_tokenonly[uv_tx],
- &search_state->dist_uvs[uv_tx], &search_state->skip_uvs[uv_tx],
- &search_state->mode_uv[uv_tx]);
- if (try_palette) search_state->pmi_uv[uv_tx] = *pmi;
- search_state->uv_angle_delta[uv_tx] = mbmi->angle_delta[PLANE_TYPE_UV];
+ choose_intra_uv_mode(cpi, x, bsize, uv_tx, &search_state->rate_uv_intra,
+ &search_state->rate_uv_tokenonly,
+ &search_state->dist_uvs, &search_state->skip_uvs,
+ &search_state->mode_uv);
+ if (try_palette) search_state->pmi_uv = *pmi;
+ search_state->uv_angle_delta = mbmi->angle_delta[PLANE_TYPE_UV];
- const int uv_rate = search_state->rate_uv_tokenonly[uv_tx];
- const int64_t uv_dist = search_state->dist_uvs[uv_tx];
+ const int uv_rate = search_state->rate_uv_tokenonly;
+ const int64_t uv_dist = search_state->dist_uvs;
const int64_t uv_rd = RDCOST(x->rdmult, uv_rate, uv_dist);
if (uv_rd > search_state->best_rd) {
search_state->skip_intra_modes = 1;
@@ -12072,18 +12068,18 @@
}
}
- rd_stats_uv->rate = search_state->rate_uv_tokenonly[uv_tx];
- rd_stats_uv->dist = search_state->dist_uvs[uv_tx];
- rd_stats_uv->skip = search_state->skip_uvs[uv_tx];
+ rd_stats_uv->rate = search_state->rate_uv_tokenonly;
+ rd_stats_uv->dist = search_state->dist_uvs;
+ rd_stats_uv->skip = search_state->skip_uvs;
rd_stats->skip = rd_stats_y->skip && rd_stats_uv->skip;
- mbmi->uv_mode = search_state->mode_uv[uv_tx];
+ mbmi->uv_mode = search_state->mode_uv;
if (try_palette) {
- pmi->palette_size[1] = search_state->pmi_uv[uv_tx].palette_size[1];
+ pmi->palette_size[1] = search_state->pmi_uv.palette_size[1];
memcpy(pmi->palette_colors + PALETTE_MAX_SIZE,
- search_state->pmi_uv[uv_tx].palette_colors + PALETTE_MAX_SIZE,
+ search_state->pmi_uv.palette_colors + PALETTE_MAX_SIZE,
2 * PALETTE_MAX_SIZE * sizeof(pmi->palette_colors[0]));
}
- mbmi->angle_delta[PLANE_TYPE_UV] = search_state->uv_angle_delta[uv_tx];
+ mbmi->angle_delta[PLANE_TYPE_UV] = search_state->uv_angle_delta;
}
rd_stats->rate = rd_stats_y->rate + mode_cost_y;