rtc: Dereference search_state.best_pickmode to a local pointer
Used a local pointer to dereference frequently used pointer
search_state.best_pickmode.
Change-Id: I244acde341ec37ff5000704e3994fe5c69cb6482
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 26a8d0d..d65d4ca 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -3692,6 +3692,7 @@
TxfmSearchInfo *txfm_info = &x->txfm_search_info;
const ModeCosts *mode_costs = &x->mode_costs;
const REAL_TIME_SPEED_FEATURES *const rt_sf = &cpi->sf.rt_sf;
+ BEST_PICKMODE *const best_pickmode = &search_state->best_pickmode;
MV_REFERENCE_FRAME ref_frame = mi->ref_frame[0];
MV_REFERENCE_FRAME ref_frame2 = mi->ref_frame[1];
@@ -3825,11 +3826,10 @@
#if COLLECT_PICK_MODE_STAT
aom_usec_timer_start(&ms_stat.timer2);
#endif
- search_filter_ref(cpi, x, &search_state->this_rdc, &inter_pred_params_sr,
- mi_row, mi_col, tmp_buffer, bsize, reuse_inter_pred,
- this_mode_pred, &this_early_term, &var,
- use_model_yrd_large, search_state->best_pickmode.best_sse,
- is_single_pred);
+ search_filter_ref(
+ cpi, x, &search_state->this_rdc, &inter_pred_params_sr, mi_row, mi_col,
+ tmp_buffer, bsize, reuse_inter_pred, this_mode_pred, &this_early_term,
+ &var, use_model_yrd_large, best_pickmode->best_sse, is_single_pred);
#if COLLECT_PICK_MODE_STAT
aom_usec_timer_mark(&ms_stat.timer2);
ms_stat.ifs_time[bsize][this_mode] +=
@@ -3840,7 +3840,7 @@
this_mode == NEWMV) {
search_motion_mode(cpi, x, &search_state->this_rdc, mi_row, mi_col, bsize,
&this_early_term, use_model_yrd_large, &rate_mv,
- search_state->best_pickmode.best_sse);
+ best_pickmode->best_sse);
if (this_mode == NEWMV) {
this_mv[0] = mi->mv[0];
}
@@ -3877,8 +3877,7 @@
if (use_model_yrd_large) {
model_skip_for_sb_y_large(cpi, bsize, mi_row, mi_col, x, xd,
&search_state->this_rdc, &this_early_term, 0,
- search_state->best_pickmode.best_sse, &var,
- var_threshold);
+ best_pickmode->best_sse, &var, var_threshold);
} else {
model_rd_for_sb_y(cpi, bsize, x, xd, &search_state->this_rdc, &var, 0,
&this_early_term);
@@ -3910,9 +3909,9 @@
}
if (rt_sf->sse_early_term_inter_search &&
- early_term_inter_search_with_sse(
- rt_sf->sse_early_term_inter_search, bsize, search_state->this_rdc.sse,
- search_state->best_pickmode.best_sse, this_mode)) {
+ early_term_inter_search_with_sse(rt_sf->sse_early_term_inter_search,
+ bsize, search_state->this_rdc.sse,
+ best_pickmode->best_sse, this_mode)) {
if (reuse_inter_pred) free_pred_buffer(*this_mode_pred);
return true;
}
@@ -4059,21 +4058,20 @@
if (search_state->this_rdc.rdcost < search_state->best_rdc.rdcost) {
search_state->best_rdc = search_state->this_rdc;
*best_early_term = this_early_term;
- search_state->best_pickmode.best_sse = sse_y;
- search_state->best_pickmode.best_mode = this_best_mode;
- search_state->best_pickmode.best_motion_mode = mi->motion_mode;
- search_state->best_pickmode.wm_params = mi->wm_params;
- search_state->best_pickmode.num_proj_ref = mi->num_proj_ref;
- search_state->best_pickmode.best_pred_filter = mi->interp_filters;
- search_state->best_pickmode.best_tx_size = mi->tx_size;
- search_state->best_pickmode.best_ref_frame = ref_frame;
- search_state->best_pickmode.best_second_ref_frame = ref_frame2;
- search_state->best_pickmode.best_mode_skip_txfm =
- search_state->this_rdc.skip_txfm;
- search_state->best_pickmode.best_mode_initial_skip_flag =
+ best_pickmode->best_sse = sse_y;
+ best_pickmode->best_mode = this_best_mode;
+ best_pickmode->best_motion_mode = mi->motion_mode;
+ best_pickmode->wm_params = mi->wm_params;
+ best_pickmode->num_proj_ref = mi->num_proj_ref;
+ best_pickmode->best_pred_filter = mi->interp_filters;
+ best_pickmode->best_tx_size = mi->tx_size;
+ best_pickmode->best_ref_frame = ref_frame;
+ best_pickmode->best_second_ref_frame = ref_frame2;
+ best_pickmode->best_mode_skip_txfm = search_state->this_rdc.skip_txfm;
+ best_pickmode->best_mode_initial_skip_flag =
(nonskip_rdc.rate == INT_MAX && search_state->this_rdc.skip_txfm);
- if (!search_state->best_pickmode.best_mode_skip_txfm) {
- memcpy(search_state->best_pickmode.blk_skip, txfm_info->blk_skip,
+ if (!best_pickmode->best_mode_skip_txfm) {
+ memcpy(best_pickmode->blk_skip, txfm_info->blk_skip,
sizeof(txfm_info->blk_skip[0]) * num_8x8_blocks);
}
@@ -4086,8 +4084,8 @@
}
if (reuse_inter_pred) {
- free_pred_buffer(search_state->best_pickmode.best_pred);
- search_state->best_pickmode.best_pred = *this_mode_pred;
+ free_pred_buffer(best_pickmode->best_pred);
+ best_pickmode->best_pred = *this_mode_pred;
}
} else {
if (reuse_inter_pred) free_pred_buffer(*this_mode_pred);
@@ -4116,6 +4114,7 @@
const int bw = block_size_wide[bsize];
const int num_8x8_blocks = ctx->num_4x4_blk / 4;
TxfmSearchInfo *txfm_info = &x->txfm_search_info;
+ BEST_PICKMODE *const best_pickmode = &search_state->best_pickmode;
// Check for IDTX: based only on Y channel, so avoid when color_sensitivity
// is set.
@@ -4124,11 +4123,10 @@
if (cm->seq_params->bit_depth == 8 &&
cpi->oxcf.tune_cfg.content == AOM_CONTENT_SCREEN && !skip_idtx_palette &&
!cpi->oxcf.txfm_cfg.use_inter_dct_only && !x->force_zeromv_skip_for_blk &&
- is_inter_mode(search_state->best_pickmode.best_mode) &&
+ is_inter_mode(best_pickmode->best_mode) &&
(!rt_sf->prune_idtx_nonrd ||
(rt_sf->prune_idtx_nonrd && bsize <= BLOCK_32X32 &&
- search_state->best_pickmode.best_mode_skip_txfm != 1 &&
- x->source_variance > 200))) {
+ best_pickmode->best_mode_skip_txfm != 1 && x->source_variance > 200))) {
RD_STATS idtx_rdc;
av1_init_rd_stats(&idtx_rdc);
int is_skippable;
@@ -4144,18 +4142,16 @@
if (x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_U)] ||
x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_V)])
idtx_rdc.skip_txfm = 0;
- search_state->best_pickmode.tx_type = IDTX;
+ best_pickmode->tx_type = IDTX;
search_state->best_rdc.rdcost = idx_rdcost;
- search_state->best_pickmode.best_mode_skip_txfm = idtx_rdc.skip_txfm;
+ best_pickmode->best_mode_skip_txfm = idtx_rdc.skip_txfm;
if (!idtx_rdc.skip_txfm) {
- memcpy(search_state->best_pickmode.blk_skip, txfm_info->blk_skip,
+ memcpy(best_pickmode->blk_skip, txfm_info->blk_skip,
sizeof(txfm_info->blk_skip[0]) * num_8x8_blocks);
}
- xd->tx_type_map[0] = search_state->best_pickmode.tx_type;
- memset(ctx->tx_type_map, search_state->best_pickmode.tx_type,
- ctx->num_4x4_blk);
- memset(xd->tx_type_map, search_state->best_pickmode.tx_type,
- ctx->num_4x4_blk);
+ xd->tx_type_map[0] = best_pickmode->tx_type;
+ memset(ctx->tx_type_map, best_pickmode->tx_type, ctx->num_4x4_blk);
+ memset(xd->tx_type_map, best_pickmode->tx_type, ctx->num_4x4_blk);
}
pd->dst = *orig_dst;
}
@@ -4168,14 +4164,13 @@
&search_state->this_rdc,
search_state->best_rdc.rdcost);
if (search_state->this_rdc.rdcost < search_state->best_rdc.rdcost) {
- search_state->best_pickmode.pmi = mi->palette_mode_info;
- search_state->best_pickmode.best_mode = DC_PRED;
+ best_pickmode->pmi = mi->palette_mode_info;
+ best_pickmode->best_mode = DC_PRED;
mi->mv[0].as_int = 0;
search_state->best_rdc.rate = search_state->this_rdc.rate;
search_state->best_rdc.dist = search_state->this_rdc.dist;
search_state->best_rdc.rdcost = search_state->this_rdc.rdcost;
- search_state->best_pickmode.best_mode_skip_txfm =
- search_state->this_rdc.skip_txfm;
+ best_pickmode->best_mode_skip_txfm = search_state->this_rdc.skip_txfm;
// Keep the skip_txfm off if the color_sensitivity is set.
if (x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_U)] ||
x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_V)])
@@ -4214,6 +4209,7 @@
rt_sf->reuse_inter_pred_nonrd && cm->seq_params->bit_depth == AOM_BITS_8;
InterModeSearchStateNonrd search_state;
av1_zero(search_state.use_ref_frame_mask);
+ BEST_PICKMODE *const best_pickmode = &search_state.best_pickmode;
const int bh = block_size_high[bsize];
const int bw = block_size_wide[bsize];
@@ -4386,27 +4382,25 @@
}
}
- mi->mode = search_state.best_pickmode.best_mode;
- mi->motion_mode = search_state.best_pickmode.best_motion_mode;
- mi->wm_params = search_state.best_pickmode.wm_params;
- mi->num_proj_ref = search_state.best_pickmode.num_proj_ref;
- mi->interp_filters = search_state.best_pickmode.best_pred_filter;
- mi->tx_size = search_state.best_pickmode.best_tx_size;
+ mi->mode = best_pickmode->best_mode;
+ mi->motion_mode = best_pickmode->best_motion_mode;
+ mi->wm_params = best_pickmode->wm_params;
+ mi->num_proj_ref = best_pickmode->num_proj_ref;
+ mi->interp_filters = best_pickmode->best_pred_filter;
+ mi->tx_size = best_pickmode->best_tx_size;
memset(mi->inter_tx_size, mi->tx_size, sizeof(mi->inter_tx_size));
- mi->ref_frame[0] = search_state.best_pickmode.best_ref_frame;
- mi->mv[0].as_int =
- search_state
- .frame_mv_best[search_state.best_pickmode.best_mode]
- [search_state.best_pickmode.best_ref_frame]
- .as_int;
+ mi->ref_frame[0] = best_pickmode->best_ref_frame;
+ mi->mv[0].as_int = search_state
+ .frame_mv_best[best_pickmode->best_mode]
+ [best_pickmode->best_ref_frame]
+ .as_int;
mi->mv[1].as_int = 0;
- if (search_state.best_pickmode.best_second_ref_frame > INTRA_FRAME) {
- mi->ref_frame[1] = search_state.best_pickmode.best_second_ref_frame;
- mi->mv[1].as_int =
- search_state
- .frame_mv_best[search_state.best_pickmode.best_mode]
- [search_state.best_pickmode.best_second_ref_frame]
- .as_int;
+ if (best_pickmode->best_second_ref_frame > INTRA_FRAME) {
+ mi->ref_frame[1] = best_pickmode->best_second_ref_frame;
+ mi->mv[1].as_int = search_state
+ .frame_mv_best[best_pickmode->best_mode]
+ [best_pickmode->best_second_ref_frame]
+ .as_int;
}
// Perform intra prediction search, if the best SAD is above a certain
// threshold.
@@ -4424,8 +4418,8 @@
estimate_intra_mode(cpi, x, bsize, best_early_term,
search_state.ref_costs_single[INTRA_FRAME],
reuse_inter_pred, &orig_dst, tmp_buffer,
- &this_mode_pred, &search_state.best_rdc,
- &search_state.best_pickmode, ctx);
+ &this_mode_pred, &search_state.best_rdc, best_pickmode,
+ ctx);
int skip_idtx_palette = (x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_U)] ||
x->color_sensitivity[COLOR_SENS_IDX(AOM_PLANE_V)]) &&
@@ -4436,8 +4430,7 @@
!skip_idtx_palette && cpi->oxcf.tool_cfg.enable_palette &&
av1_allow_palette(cpi->common.features.allow_screen_content_tools,
mi->bsize);
- try_palette = try_palette &&
- is_mode_intra(search_state.best_pickmode.best_mode) &&
+ try_palette = try_palette && is_mode_intra(best_pickmode->best_mode) &&
x->source_variance > 0 && !x->force_zeromv_skip_for_blk &&
(cpi->rc.high_source_sad || x->source_variance > 500);
@@ -4453,18 +4446,18 @@
#endif
pd->dst = orig_dst;
- if (try_palette) mi->palette_mode_info = search_state.best_pickmode.pmi;
- mi->mode = search_state.best_pickmode.best_mode;
- mi->ref_frame[0] = search_state.best_pickmode.best_ref_frame;
- mi->ref_frame[1] = search_state.best_pickmode.best_second_ref_frame;
- txfm_info->skip_txfm = search_state.best_pickmode.best_mode_skip_txfm;
+ if (try_palette) mi->palette_mode_info = best_pickmode->pmi;
+ mi->mode = best_pickmode->best_mode;
+ mi->ref_frame[0] = best_pickmode->best_ref_frame;
+ mi->ref_frame[1] = best_pickmode->best_second_ref_frame;
+ txfm_info->skip_txfm = best_pickmode->best_mode_skip_txfm;
if (!txfm_info->skip_txfm) {
// For inter modes: copy blk_skip from best_pickmode, which is
// defined for 8x8 blocks. If palette or intra mode was selected
// as best then blk_skip is already copied into the ctx.
- if (search_state.best_pickmode.best_mode >= INTRA_MODE_END)
- memcpy(ctx->blk_skip, search_state.best_pickmode.blk_skip,
- sizeof(search_state.best_pickmode.blk_skip[0]) * num_8x8_blocks);
+ if (best_pickmode->best_mode >= INTRA_MODE_END)
+ memcpy(ctx->blk_skip, best_pickmode->blk_skip,
+ sizeof(best_pickmode->blk_skip[0]) * num_8x8_blocks);
}
if (has_second_ref(mi)) {
mi->comp_group_idx = 0;
@@ -4476,8 +4469,8 @@
mi->interp_filters = av1_broadcast_interp_filter(SWITCHABLE_FILTERS);
}
- if (reuse_inter_pred && search_state.best_pickmode.best_pred != NULL) {
- PRED_BUFFER *const best_pred = search_state.best_pickmode.best_pred;
+ if (reuse_inter_pred && best_pickmode->best_pred != NULL) {
+ PRED_BUFFER *const best_pred = best_pickmode->best_pred;
if (best_pred->data != orig_dst.buf && is_inter_mode(mi->mode)) {
aom_convolve_copy(best_pred->data, best_pred->stride, pd->dst.buf,
pd->dst.stride, bw, bh);
@@ -4492,23 +4485,21 @@
ctx->sb_skip_denoising = 0;
av1_pickmode_ctx_den_update(
&ctx_den, zero_last_cost_orig, search_state.ref_costs_single,
- search_state.frame_mv, reuse_inter_pred, &search_state.best_pickmode);
+ search_state.frame_mv, reuse_inter_pred, best_pickmode);
av1_denoiser_denoise(cpi, x, mi_row, mi_col, bsize, ctx, &decision,
gf_temporal_ref);
if (denoise_recheck_zeromv)
recheck_zeromv_after_denoising(
cpi, mi, x, xd, decision, &ctx_den, search_state.yv12_mb,
- &search_state.best_rdc, &search_state.best_pickmode, bsize, mi_row,
- mi_col);
- search_state.best_pickmode.best_ref_frame = ctx_den.best_ref_frame;
+ &search_state.best_rdc, best_pickmode, bsize, mi_row, mi_col);
+ best_pickmode->best_ref_frame = ctx_den.best_ref_frame;
}
#endif
if (cpi->sf.inter_sf.adaptive_rd_thresh && !has_second_ref(mi)) {
THR_MODES best_mode_idx =
- mode_idx[search_state.best_pickmode.best_ref_frame]
- [mode_offset(mi->mode)];
- if (search_state.best_pickmode.best_ref_frame == INTRA_FRAME) {
+ mode_idx[best_pickmode->best_ref_frame][mode_offset(mi->mode)];
+ if (best_pickmode->best_ref_frame == INTRA_FRAME) {
// Only consider the modes that are included in the intra_mode_list.
int intra_modes = sizeof(intra_mode_list) / sizeof(PREDICTION_MODE);
for (int mode_index = 0; mode_index < intra_modes; mode_index++) {
@@ -4518,8 +4509,7 @@
} else {
PREDICTION_MODE this_mode;
for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) {
- update_thresh_freq_fact(cpi, x, bsize,
- search_state.best_pickmode.best_ref_frame,
+ update_thresh_freq_fact(cpi, x, bsize, best_pickmode->best_ref_frame,
best_mode_idx, this_mode);
}
}