From: Dmitry Kovalev Date: Tue, 26 Mar 2013 18:25:58 +0000 (-0700) Subject: Cleaning up rate control code. X-Git-Tag: v1.3.0~1151^2~16^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=77c664ade365cbca8bc317ba87c8a18858aa7868;p=libvpx Cleaning up rate control code. Lower case variable names, declaration and initialization on the same line, removing redundant casts to double. Change-Id: I7ea3905bed827aa6faac11a78401b85e448b57f9 --- diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 82bd70bf8..d26f5ec46 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -89,45 +89,31 @@ static const unsigned int prior_key_frame_weight[KEY_FRAME_CONTEXT] = { 1, 2, 3, // tables if and when things settle down in the experimental bitstream double vp9_convert_qindex_to_q(int qindex) { // Convert the index to a real Q value (scaled down to match old Q values) - return (double)vp9_ac_yquant(qindex) / 4.0; + return vp9_ac_yquant(qindex) / 4.0; } int vp9_gfboost_qadjust(int qindex) { - int retval; - double q; - - q = vp9_convert_qindex_to_q(qindex); - retval = (int)((0.00000828 * q * q * q) + - (-0.0055 * q * q) + - (1.32 * q) + 79.3); - return retval; + const double q = vp9_convert_qindex_to_q(qindex); + return (int)((0.00000828 * q * q * q) + + (-0.0055 * q * q) + + (1.32 * q) + 79.3); } static int kfboost_qadjust(int qindex) { - int retval; - double q; - - q = vp9_convert_qindex_to_q(qindex); - retval = (int)((0.00000973 * q * q * q) + - (-0.00613 * q * q) + - (1.316 * q) + 121.2); - return retval; + const double q = vp9_convert_qindex_to_q(qindex); + return (int)((0.00000973 * q * q * q) + + (-0.00613 * q * q) + + (1.316 * q) + 121.2); } int vp9_bits_per_mb(FRAME_TYPE frame_type, int qindex, double correction_factor) { - int enumerator; - double q = vp9_convert_qindex_to_q(qindex); - if (frame_type == KEY_FRAME) { - enumerator = 4000000; - } else { - enumerator = 2500000; - } + const double q = vp9_convert_qindex_to_q(qindex); + int enumerator = frame_type == KEY_FRAME ? 4000000 : 2500000; - // Q based adjustment to baseline enumberator + // q based adjustment to baseline enumberator enumerator += (int)(enumerator * q) >> 12; - return (int)(0.5 + (enumerator * correction_factor / q)); } @@ -265,33 +251,30 @@ void vp9_setup_key_frame(VP9_COMP *cpi) { // interval before next GF cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; /* All buffers are implicitly updated on key frames. */ - cpi->refresh_golden_frame = TRUE; - cpi->refresh_alt_ref_frame = TRUE; + cpi->refresh_golden_frame = 1; + cpi->refresh_alt_ref_frame = 1; } void vp9_setup_inter_frame(VP9_COMP *cpi) { VP9_COMMON *cm = &cpi->common; MACROBLOCKD *xd = &cpi->mb.e_mbd; - if (cm->error_resilient_mode) { + if (cm->error_resilient_mode) vp9_setup_past_independence(cm, xd); - } + assert(cm->frame_context_idx < NUM_FRAME_CONTEXTS); vpx_memcpy(&cm->fc, &cm->frame_contexts[cm->frame_context_idx], sizeof(cm->fc)); } -static int estimate_bits_at_q(int frame_kind, int Q, int MBs, +static int estimate_bits_at_q(int frame_kind, int q, int mbs, double correction_factor) { - int Bpm = (int)(vp9_bits_per_mb(frame_kind, Q, correction_factor)); + const int bpm = (int)(vp9_bits_per_mb(frame_kind, q, correction_factor)); - /* Attempt to retain reasonable accuracy without overflow. The cutoff is - * chosen such that the maximum product of Bpm and MBs fits 31 bits. The - * largest Bpm takes 20 bits. - */ - if (MBs > (1 << 11)) - return (Bpm >> BPER_MB_NORMBITS) * MBs; - else - return (Bpm * MBs) >> BPER_MB_NORMBITS; + // Attempt to retain reasonable accuracy without overflow. The cutoff is + // chosen such that the maximum product of Bpm and MBs fits 31 bits. The + // largest Bpm takes 20 bits. + return (mbs > (1 << 11)) ? (bpm >> BPER_MB_NORMBITS) * mbs + : (bpm * mbs) >> BPER_MB_NORMBITS; } @@ -314,7 +297,6 @@ static void calc_iframe_target_size(VP9_COMP *cpi) { } cpi->this_frame_target = target; - } @@ -330,25 +312,15 @@ static void calc_gf_params(VP9_COMP *cpi) { static void calc_pframe_target_size(VP9_COMP *cpi) { - int min_frame_target; - - min_frame_target = 0; - - min_frame_target = cpi->min_frame_bandwidth; - - if (min_frame_target < (cpi->av_per_frame_bandwidth >> 5)) - min_frame_target = cpi->av_per_frame_bandwidth >> 5; - - - // Special alt reference frame case + const int min_frame_target = MAX(cpi->min_frame_bandwidth, + cpi->av_per_frame_bandwidth >> 5); if (cpi->refresh_alt_ref_frame) { + // Special alt reference frame case // Per frame bit target for the alt ref frame cpi->per_frame_bandwidth = cpi->twopass.gf_bits; cpi->this_frame_target = cpi->per_frame_bandwidth; - } - - // Normal frames (gf,and inter) - else { + } else { + // Normal frames (gf,and inter) cpi->this_frame_target = cpi->per_frame_bandwidth; } @@ -366,10 +338,10 @@ static void calc_pframe_target_size(VP9_COMP *cpi) { // Adjust target frame size for Golden Frames: if (cpi->frames_till_gf_update_due == 0) { - // int Boost = 0; - int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q; + const int q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] + : cpi->oxcf.fixed_q; - cpi->refresh_golden_frame = TRUE; + cpi->refresh_golden_frame = 1; calc_gf_params(cpi); @@ -381,17 +353,17 @@ static void calc_pframe_target_size(VP9_COMP *cpi) { // The spend on the GF is defined in the two pass code // for two pass encodes cpi->this_frame_target = cpi->per_frame_bandwidth; - } else + } else { cpi->this_frame_target = - (estimate_bits_at_q(1, Q, cpi->common.MBs, 1.0) + (estimate_bits_at_q(1, q, cpi->common.MBs, 1.0) * cpi->last_boost) / 100; + } - } - // If there is an active ARF at this location use the minimum - // bits on this frame even if it is a contructed arf. - // The active maximum quantizer insures that an appropriate - // number of bits will be spent if needed for contstructed ARFs. - else { + } else { + // If there is an active ARF at this location use the minimum + // bits on this frame even if it is a contructed arf. + // The active maximum quantizer insures that an appropriate + // number of bits will be spent if needed for contstructed ARFs. cpi->this_frame_target = 0; } @@ -401,12 +373,12 @@ static void calc_pframe_target_size(VP9_COMP *cpi) { void vp9_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) { - int Q = cpi->common.base_qindex; - int correction_factor = 100; + const int q = cpi->common.base_qindex; + int correction_factor = 100; double rate_correction_factor; double adjustment_limit; - int projected_size_based_on_q = 0; + int projected_size_based_on_q = 0; // Clear down mmx registers to allow floating point in what follows vp9_clear_system_state(); // __asm emms; @@ -423,9 +395,9 @@ void vp9_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) { // Work out how big we would have expected the frame to be at this Q given // the current correction factor. // Stay in double to avoid int overflow when values are large - projected_size_based_on_q = - estimate_bits_at_q(cpi->common.frame_type, Q, - cpi->common.MBs, rate_correction_factor); + projected_size_based_on_q = estimate_bits_at_q(cpi->common.frame_type, q, + cpi->common.MBs, + rate_correction_factor); // Work out a size correction factor. // if ( cpi->this_frame_target > 0 ) @@ -480,7 +452,7 @@ void vp9_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) { int vp9_regulate_q(VP9_COMP *cpi, int target_bits_per_frame) { - int Q = cpi->active_worst_quality; + int q = cpi->active_worst_quality; int i; int last_error = INT_MAX; @@ -507,21 +479,22 @@ int vp9_regulate_q(VP9_COMP *cpi, int target_bits_per_frame) { i = cpi->active_best_quality; do { - bits_per_mb_at_this_q = - (int)(vp9_bits_per_mb(cpi->common.frame_type, i, correction_factor)); + bits_per_mb_at_this_q = (int)vp9_bits_per_mb(cpi->common.frame_type, i, + correction_factor); if (bits_per_mb_at_this_q <= target_bits_per_mb) { if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error) - Q = i; + q = i; else - Q = i - 1; + q = i - 1; break; - } else + } else { last_error = bits_per_mb_at_this_q - target_bits_per_mb; + } } while (++i <= cpi->active_worst_quality); - return Q; + return q; } @@ -566,7 +539,7 @@ static int estimate_keyframe_frequency(VP9_COMP *cpi) { total_weight += prior_key_frame_weight[i]; } - av_key_frame_frequency /= total_weight; + av_key_frame_frequency /= total_weight; } return av_key_frame_frequency;