Further refactoring to facilitate rc change Change-Id: I1159112687449ad342ff3532814763910bf849e4
diff --git a/av1/encoder/aq_complexity.c b/av1/encoder/aq_complexity.c index 37bc309..9f3e910 100644 --- a/av1/encoder/aq_complexity.c +++ b/av1/encoder/aq_complexity.c
@@ -104,9 +104,8 @@ if (segment == DEFAULT_AQ2_SEG) continue; qindex_delta = av1_compute_qdelta_by_rate( - &cpi->rc, cm->current_frame.frame_type, base_qindex, - aq_c_q_adj_factor[aq_strength][segment], cpi->is_screen_content_type, - cm->seq_params->bit_depth); + cpi, cm->current_frame.frame_type, base_qindex, + aq_c_q_adj_factor[aq_strength][segment]); // For AQ complexity mode, we dont allow Q0 in a segment if the base // Q is not 0. Q0 (lossless) implies 4x4 only and in AQ mode 2 a segment
diff --git a/av1/encoder/aq_cyclicrefresh.c b/av1/encoder/aq_cyclicrefresh.c index b3f8247..72304b3 100644 --- a/av1/encoder/aq_cyclicrefresh.c +++ b/av1/encoder/aq_cyclicrefresh.c
@@ -75,10 +75,8 @@ // Compute delta-q for the segment. static int compute_deltaq(const AV1_COMP *cpi, int q, double rate_factor) { const CYCLIC_REFRESH *const cr = cpi->cyclic_refresh; - const RATE_CONTROL *const rc = &cpi->rc; int deltaq = av1_compute_qdelta_by_rate( - rc, cpi->common.current_frame.frame_type, q, rate_factor, - cpi->is_screen_content_type, cpi->common.seq_params->bit_depth); + cpi, cpi->common.current_frame.frame_type, q, rate_factor); if ((-deltaq) > cr->max_qdelta_perc * q / 100) { deltaq = -cr->max_qdelta_perc * q / 100; }
diff --git a/av1/encoder/aq_variance.c b/av1/encoder/aq_variance.c index 3273ef8..d53d2c9 100644 --- a/av1/encoder/aq_variance.c +++ b/av1/encoder/aq_variance.c
@@ -74,10 +74,9 @@ for (i = 0; i < MAX_SEGMENTS; ++i) { // Set up avg segment id to be 1.0 and adjust the other segments around // it. - int qindex_delta = av1_compute_qdelta_by_rate( - &cpi->rc, cm->current_frame.frame_type, base_qindex, - rate_ratio[i] / avg_ratio, cpi->is_screen_content_type, - cm->seq_params->bit_depth); + int qindex_delta = + av1_compute_qdelta_by_rate(cpi, cm->current_frame.frame_type, + base_qindex, rate_ratio[i] / avg_ratio); // We don't allow qindex 0 in a segment if the base value is not 0. // Q index 0 (lossless) implies 4x4 encoding only and in AQ mode a segment @@ -212,10 +211,9 @@ rate_level = block_var_level; } const int base_qindex = cm->quant_params.base_qindex; - int qindex_delta = av1_compute_qdelta_by_rate( - &cpi->rc, cm->current_frame.frame_type, base_qindex, - deltaq_rate_ratio[rate_level], cpi->is_screen_content_type, - cm->seq_params->bit_depth); + int qindex_delta = + av1_compute_qdelta_by_rate(cpi, cm->current_frame.frame_type, base_qindex, + deltaq_rate_ratio[rate_level]); if ((base_qindex != 0) && ((base_qindex + qindex_delta) == 0)) { qindex_delta = -base_qindex + 1;
diff --git a/av1/encoder/ratectrl.c b/av1/encoder/ratectrl.c index b735cf9..eb88dd0 100644 --- a/av1/encoder/ratectrl.c +++ b/av1/encoder/ratectrl.c
@@ -1115,7 +1115,6 @@ const PRIMARY_RATE_CONTROL *const p_rc = &cpi->ppi->p_rc; const CurrentFrame *const current_frame = &cm->current_frame; int q; - const int bit_depth = cm->seq_params->bit_depth; int active_worst_quality = calc_active_worst_quality_no_stats_cbr(cpi); int active_best_quality = calc_active_best_quality_no_stats_cbr( cpi, active_worst_quality, width, height); @@ -1135,9 +1134,8 @@ if (current_frame->frame_type == KEY_FRAME && !p_rc->this_key_frame_forced && current_frame->frame_number != 0) { int qdelta = 0; - qdelta = av1_compute_qdelta_by_rate(&cpi->rc, current_frame->frame_type, - active_worst_quality, 2.0, - cpi->is_screen_content_type, bit_depth); + qdelta = av1_compute_qdelta_by_rate(cpi, current_frame->frame_type, + active_worst_quality, 2.0); *top_index = active_worst_quality + qdelta; *top_index = AOMMAX(*top_index, *bottom_index); } @@ -1365,14 +1363,12 @@ int qdelta = 0; if (current_frame->frame_type == KEY_FRAME && !p_rc->this_key_frame_forced && current_frame->frame_number != 0) { - qdelta = av1_compute_qdelta_by_rate( - &cpi->rc, current_frame->frame_type, active_worst_quality, 2.0, - cpi->is_screen_content_type, bit_depth); + qdelta = av1_compute_qdelta_by_rate(cpi, current_frame->frame_type, + active_worst_quality, 2.0); } else if (!rc->is_src_frame_alt_ref && (refresh_frame->golden_frame || refresh_frame->alt_ref_frame)) { - qdelta = av1_compute_qdelta_by_rate( - &cpi->rc, current_frame->frame_type, active_worst_quality, 1.75, - cpi->is_screen_content_type, bit_depth); + qdelta = av1_compute_qdelta_by_rate(cpi, current_frame->frame_type, + active_worst_quality, 1.75); } *top_index = active_worst_quality + qdelta; *top_index = AOMMAX(*top_index, *bottom_index); @@ -1423,9 +1419,7 @@ const double rate_factor = (rf_lvl == INTER_NORMAL) ? 1.0 : arf_layer_deltas[arf_layer]; - return av1_compute_qdelta_by_rate(&cpi->rc, frame_type, q, rate_factor, - cpi->is_screen_content_type, - cpi->common.seq_params->bit_depth); + return av1_compute_qdelta_by_rate(cpi, frame_type, q, rate_factor); } // This unrestricted Q selection on CQ mode is useful when testing new features, @@ -1563,7 +1557,6 @@ const RATE_CONTROL *const rc = &cpi->rc; const PRIMARY_RATE_CONTROL *const p_rc = &cpi->ppi->p_rc; const RefreshFrameInfo *const refresh_frame = &cpi->refresh_frame; - const int bit_depth = cpi->common.seq_params->bit_depth; int active_best_quality = *active_best; int active_worst_quality = *active_worst; #if CONFIG_FPMT_TEST @@ -1618,9 +1611,8 @@ // Modify active_best_quality for downscaled normal frames. if (av1_frame_scaled(cm) && !frame_is_kf_gf_arf(cpi)) { - int qdelta = av1_compute_qdelta_by_rate( - rc, cm->current_frame.frame_type, active_best_quality, 2.0, - cpi->is_screen_content_type, bit_depth); + int qdelta = av1_compute_qdelta_by_rate(cpi, cm->current_frame.frame_type, + active_best_quality, 2.0); active_best_quality = AOMMAX(active_best_quality + qdelta, rc->best_quality); } @@ -2240,10 +2232,13 @@ return low; } -int av1_compute_qdelta_by_rate(const RATE_CONTROL *rc, FRAME_TYPE frame_type, - int qindex, double rate_target_ratio, - const int is_screen_content_type, - aom_bit_depth_t bit_depth) { +int av1_compute_qdelta_by_rate(const AV1_COMP *const cpi, FRAME_TYPE frame_type, + int qindex, double rate_target_ratio) { + const AV1_COMMON *const cm = &cpi->common; + const RATE_CONTROL *rc = &cpi->rc; + const int is_screen_content_type = cpi->is_screen_content_type; + const aom_bit_depth_t bit_depth = cm->seq_params->bit_depth; + // Look up the current projected bits per block for the base index const int base_bits_per_mb = av1_rc_bits_per_mb( frame_type, qindex, 1.0, bit_depth, is_screen_content_type);
diff --git a/av1/encoder/ratectrl.h b/av1/encoder/ratectrl.h index ffe9b8c..3cbdf54 100644 --- a/av1/encoder/ratectrl.h +++ b/av1/encoder/ratectrl.h
@@ -684,10 +684,9 @@ // Computes a q delta (in "q index" terms) to get from a starting q value // to a value that should equate to the given rate ratio. -int av1_compute_qdelta_by_rate(const RATE_CONTROL *rc, FRAME_TYPE frame_type, - int qindex, double rate_target_ratio, - const int is_screen_content_type, - aom_bit_depth_t bit_depth); +int av1_compute_qdelta_by_rate(const struct AV1_COMP *cpi, + FRAME_TYPE frame_type, int qindex, + double rate_target_ratio); int av1_frame_type_qdelta(const struct AV1_COMP *cpi, int q);