Cleanup setup_delta_q()
Change-Id: I189640ad325f8b9c1b6766a8bf25ac548ebe0803
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 5db694f..515331d 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -3656,45 +3656,43 @@
MACROBLOCK *const x, const TileInfo *const tile_info,
int mi_row, int mi_col, int num_planes) {
AV1_COMMON *const cm = &cpi->common;
- MACROBLOCKD *const xd = &x->e_mbd;
const DeltaQInfo *const delta_q_info = &cm->delta_q_info;
- const BLOCK_SIZE sb_size = cm->seq_params.sb_size;
- const int mib_size = cm->seq_params.mib_size;
+ assert(delta_q_info->delta_q_present_flag);
+ const BLOCK_SIZE sb_size = cm->seq_params.sb_size;
// Delta-q modulation based on variance
av1_setup_src_planes(x, cpi->source, mi_row, mi_col, num_planes, sb_size);
int current_qindex = cm->base_qindex;
- if (cm->delta_q_info.delta_q_present_flag) {
- if (cpi->oxcf.deltaq_mode == DELTA_Q_PERCEPTUAL) {
- if (DELTA_Q_PERCEPTUAL_MODULATION == 1) {
- const int block_wavelet_energy_level =
- av1_block_wavelet_energy_level(cpi, x, sb_size);
- x->sb_energy_level = block_wavelet_energy_level;
- current_qindex = av1_compute_q_from_energy_level_deltaq_mode(
- cpi, block_wavelet_energy_level);
- } else {
- const int block_var_level = av1_log_block_var(cpi, x, sb_size);
- x->sb_energy_level = block_var_level;
- current_qindex =
- av1_compute_q_from_energy_level_deltaq_mode(cpi, block_var_level);
- }
- } else if (cpi->oxcf.deltaq_mode == DELTA_Q_OBJECTIVE) {
- assert(cpi->oxcf.enable_tpl_model);
- // Setup deltaq based on tpl stats
+ if (cpi->oxcf.deltaq_mode == DELTA_Q_PERCEPTUAL) {
+ if (DELTA_Q_PERCEPTUAL_MODULATION == 1) {
+ const int block_wavelet_energy_level =
+ av1_block_wavelet_energy_level(cpi, x, sb_size);
+ x->sb_energy_level = block_wavelet_energy_level;
+ current_qindex = av1_compute_q_from_energy_level_deltaq_mode(
+ cpi, block_wavelet_energy_level);
+ } else {
+ const int block_var_level = av1_log_block_var(cpi, x, sb_size);
+ x->sb_energy_level = block_var_level;
current_qindex =
- get_q_for_deltaq_objective(cpi, sb_size, 0, mi_row, mi_col);
+ av1_compute_q_from_energy_level_deltaq_mode(cpi, block_var_level);
}
+ } else if (cpi->oxcf.deltaq_mode == DELTA_Q_OBJECTIVE) {
+ assert(cpi->oxcf.enable_tpl_model);
+ // Setup deltaq based on tpl stats
+ current_qindex =
+ get_q_for_deltaq_objective(cpi, sb_size, 0, mi_row, mi_col);
}
- const int qmask = ~(delta_q_info->delta_q_res - 1);
- current_qindex = clamp(current_qindex, delta_q_info->delta_q_res,
- 256 - delta_q_info->delta_q_res);
+ const int delta_q_res = delta_q_info->delta_q_res;
+ current_qindex =
+ clamp(current_qindex, delta_q_res, 256 - delta_q_info->delta_q_res);
+ MACROBLOCKD *const xd = &x->e_mbd;
const int sign_deltaq_index =
current_qindex - xd->current_qindex >= 0 ? 1 : -1;
-
- const int deltaq_deadzone = delta_q_info->delta_q_res / 4;
+ const int deltaq_deadzone = delta_q_res / 4;
+ const int qmask = ~(delta_q_res - 1);
int abs_deltaq_index = abs(current_qindex - xd->current_qindex);
abs_deltaq_index = (abs_deltaq_index + deltaq_deadzone) & qmask;
current_qindex = xd->current_qindex + sign_deltaq_index * abs_deltaq_index;
@@ -3709,26 +3707,29 @@
// keep track of any non-zero delta-q used
td->deltaq_used |= (xd->delta_qindex != 0);
- if (cm->delta_q_info.delta_q_present_flag && cpi->oxcf.deltalf_mode) {
- const int lfmask = ~(delta_q_info->delta_lf_res - 1);
+ if (cpi->oxcf.deltalf_mode) {
+ const int delta_lf_res = delta_q_info->delta_lf_res;
+ const int lfmask = ~(delta_lf_res - 1);
const int delta_lf_from_base =
- ((xd->delta_qindex / 2 + delta_q_info->delta_lf_res / 2) & lfmask);
+ ((xd->delta_qindex / 2 + delta_lf_res / 2) & lfmask);
+ const int8_t delta_lf =
+ (int8_t)clamp(delta_lf_from_base, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
+ const int frame_lf_count =
+ av1_num_planes(cm) > 1 ? FRAME_LF_COUNT : FRAME_LF_COUNT - 2;
+ const int mib_size = cm->seq_params.mib_size;
+ const int mi_stide = cm->mi_stride;
+ int mi_index_base = mi_row * mi_stide + mi_col;
// pre-set the delta lf for loop filter. Note that this value is set
// before mi is assigned for each block in current superblock
for (int j = 0; j < AOMMIN(mib_size, cm->mi_rows - mi_row); j++) {
for (int k = 0; k < AOMMIN(mib_size, cm->mi_cols - mi_col); k++) {
- cm->mi[(mi_row + j) * cm->mi_stride + (mi_col + k)].delta_lf_from_base =
- (int8_t)clamp(delta_lf_from_base, -MAX_LOOP_FILTER,
- MAX_LOOP_FILTER);
- const int frame_lf_count =
- av1_num_planes(cm) > 1 ? FRAME_LF_COUNT : FRAME_LF_COUNT - 2;
+ cm->mi[mi_index_base + k].delta_lf_from_base = delta_lf;
for (int lf_id = 0; lf_id < frame_lf_count; ++lf_id) {
- cm->mi[(mi_row + j) * cm->mi_stride + (mi_col + k)].delta_lf[lf_id] =
- (int8_t)clamp(delta_lf_from_base, -MAX_LOOP_FILTER,
- MAX_LOOP_FILTER);
+ cm->mi[mi_index_base + k].delta_lf[lf_id] = delta_lf;
}
}
+ mi_index_base += mi_stide;
}
}
}