Clean up code about rdmult assignment
-remove unnecessary lines
-centralize code for rdmult assignment
Change-Id: I3563bdc343399443de1614c0b9640e8286a21087
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 20aae15..f8ea5e4 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -251,14 +251,45 @@
aom_clear_system_state();
}
-static void setup_block_rdmult(const AV1_COMP *const cpi, MACROBLOCK *const x,
- int mi_row, int mi_col, BLOCK_SIZE bsize) {
+static int set_segment_rdmult(const AV1_COMP *const cpi, MACROBLOCK *const x,
+ int8_t segment_id) {
const AV1_COMMON *const cm = &cpi->common;
- MACROBLOCKD *const xd = &x->e_mbd;
+ av1_init_plane_quantizers(cpi, x, segment_id);
+ aom_clear_system_state();
+ int segment_qindex = av1_get_qindex(&cm->seg, segment_id, cm->base_qindex);
+ return av1_compute_rd_mult(cpi, segment_qindex + cm->y_dc_delta_q);
+}
+
+static void setup_block_rdmult(const AV1_COMP *const cpi, MACROBLOCK *const x,
+ int mi_row, int mi_col, BLOCK_SIZE bsize,
+ AQ_MODE aq_mode, MB_MODE_INFO *mbmi) {
x->rdmult = cpi->rd.RDMULT;
+
+ if (aq_mode != NO_AQ) {
+ assert(mbmi != NULL);
+ if (aq_mode == VARIANCE_AQ) {
+ if (cpi->vaq_refresh) {
+ const int energy = bsize <= BLOCK_16X16
+ ? x->mb_energy
+ : av1_log_block_var(cpi, x, bsize);
+ mbmi->segment_id = energy;
+ }
+ x->rdmult = set_segment_rdmult(cpi, x, mbmi->segment_id);
+ } else if (aq_mode == COMPLEXITY_AQ) {
+ x->rdmult = set_segment_rdmult(cpi, x, mbmi->segment_id);
+ } else if (aq_mode == CYCLIC_REFRESH_AQ) {
+ // If segment is boosted, use rdmult for that segment.
+ if (cyclic_refresh_segment_id_boosted(mbmi->segment_id))
+ x->rdmult = av1_cyclic_refresh_get_rdmult(cpi->cyclic_refresh);
+ }
+ }
+
+ const AV1_COMMON *const cm = &cpi->common;
if (cm->delta_q_info.delta_q_present_flag) {
+ MACROBLOCKD *const xd = &x->e_mbd;
x->rdmult = set_deltaq_rdmult(cpi, xd);
}
+
if (cpi->oxcf.tuning == AOM_TUNE_SSIM) {
set_ssim_rdmult(cpi, x, bsize, mi_row, mi_col, &x->rdmult);
}
@@ -524,15 +555,6 @@
}
}
-static int set_segment_rdmult(const AV1_COMP *const cpi, MACROBLOCK *const x,
- int8_t segment_id) {
- const AV1_COMMON *const cm = &cpi->common;
- av1_init_plane_quantizers(cpi, x, segment_id);
- aom_clear_system_state();
- int segment_qindex = av1_get_qindex(&cm->seg, segment_id, cm->base_qindex);
- return av1_compute_rd_mult(cpi, segment_qindex + cm->y_dc_delta_q);
-}
-
static EdgeInfo edge_info(const struct buf_2d *ref, const BLOCK_SIZE bsize,
const bool high_bd, const int bd) {
const int width = block_size_wide[bsize];
@@ -670,34 +692,9 @@
// Save rdmult before it might be changed, so it can be restored later.
const int orig_rdmult = x->rdmult;
- x->rdmult = cpi->rd.RDMULT;
-
- if (aq_mode == VARIANCE_AQ) {
- if (cpi->vaq_refresh) {
- const int energy = bsize <= BLOCK_16X16
- ? x->mb_energy
- : av1_log_block_var(cpi, x, bsize);
- mbmi->segment_id = energy;
- }
- x->rdmult = set_segment_rdmult(cpi, x, mbmi->segment_id);
- } else if (aq_mode == COMPLEXITY_AQ) {
- x->rdmult = set_segment_rdmult(cpi, x, mbmi->segment_id);
- } else if (aq_mode == CYCLIC_REFRESH_AQ) {
- // If segment is boosted, use rdmult for that segment.
- if (cyclic_refresh_segment_id_boosted(mbmi->segment_id))
- x->rdmult = av1_cyclic_refresh_get_rdmult(cpi->cyclic_refresh);
- }
-
- if (cm->delta_q_info.delta_q_present_flag) {
- x->rdmult = set_deltaq_rdmult(cpi, xd);
- }
-
+ setup_block_rdmult(cpi, x, mi_row, mi_col, bsize, aq_mode, mbmi);
// Set error per bit for current rdmult
set_error_per_bit(x, x->rdmult);
-
- if (cpi->oxcf.tuning == AOM_TUNE_SSIM) {
- set_ssim_rdmult(cpi, x, bsize, mi_row, mi_col, &x->rdmult);
- }
av1_rd_cost_update(x->rdmult, &best_rd);
// Find best coding mode & reconstruct the MB so it is available
@@ -1553,7 +1550,7 @@
set_offsets_without_segment_id(cpi, tile, x, mi_row, mi_col, bsize);
const int origin_mult = x->rdmult;
- setup_block_rdmult(cpi, x, mi_row, mi_col, bsize);
+ setup_block_rdmult(cpi, x, mi_row, mi_col, bsize, NO_AQ, NULL);
MB_MODE_INFO *mbmi = xd->mi[0];
mbmi->partition = partition;
update_state(cpi, tile_data, td, ctx, mi_row, mi_col, bsize, dry_run);
@@ -1824,7 +1821,7 @@
// Save rdmult before it might be changed, so it can be restored later.
const int orig_rdmult = x->rdmult;
- setup_block_rdmult(cpi, x, mi_row, mi_col, bsize);
+ setup_block_rdmult(cpi, x, mi_row, mi_col, bsize, NO_AQ, NULL);
if (do_partition_search &&
cpi->sf.partition_search_type == SEARCH_PARTITION &&
@@ -2228,7 +2225,7 @@
PICK_MODE_CONTEXT *this_ctx) {
MACROBLOCK *const x = &td->mb;
const int orig_mult = x->rdmult;
- setup_block_rdmult(cpi, x, mi_row, mi_col, subsize);
+ setup_block_rdmult(cpi, x, mi_row, mi_col, subsize, NO_AQ, NULL);
av1_rd_cost_update(x->rdmult, &best_rdcost);
if (cpi->sf.adaptive_motion_search) load_pred_mv(x, prev_ctx);
@@ -2453,7 +2450,7 @@
// Save rdmult before it might be changed, so it can be restored later.
const int orig_rdmult = x->rdmult;
- setup_block_rdmult(cpi, x, mi_row, mi_col, bsize);
+ setup_block_rdmult(cpi, x, mi_row, mi_col, bsize, NO_AQ, NULL);
av1_rd_cost_update(x->rdmult, &best_rdc);
@@ -3694,7 +3691,6 @@
xd->delta_qindex = current_qindex - cm->base_qindex;
set_offsets(cpi, tile_info, x, mi_row, mi_col, sb_size);
xd->mi[0]->current_qindex = current_qindex;
- x->rdmult = set_deltaq_rdmult(cpi, xd);
av1_init_plane_quantizers(cpi, x, xd->mi[0]->segment_id);
// keep track of any non-zero delta-q used
@@ -4713,10 +4709,7 @@
cm->delta_q_info.delta_lf_present_flag &= cm->base_qindex > 0;
av1_frame_init_quantizer(cpi);
-
av1_initialize_rd_consts(cpi);
- // Setup rdmult based on base_qindex at the frame level
- x->rdmult = cpi->rd.RDMULT;
av1_initialize_me_consts(cpi, x, cm->base_qindex);
init_encode_frame_mb_context(cpi);