Change to update of rate control factors.
Remove damping parameter and use the damping formula introduced by Yaowu Xu in all cases. Change-Id: I18db7e0d0f262d5140102f259ab07821d374d285
This commit is contained in:
@@ -2955,18 +2955,18 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
|||||||
|
|
||||||
if (undershoot_seen || loop_count > 1) {
|
if (undershoot_seen || loop_count > 1) {
|
||||||
// Update rate_correction_factor unless
|
// Update rate_correction_factor unless
|
||||||
vp9_rc_update_rate_correction_factors(cpi, 1);
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
|
|
||||||
q = (q_high + q_low + 1) / 2;
|
q = (q_high + q_low + 1) / 2;
|
||||||
} else {
|
} else {
|
||||||
// Update rate_correction_factor unless
|
// Update rate_correction_factor unless
|
||||||
vp9_rc_update_rate_correction_factors(cpi, 0);
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
|
|
||||||
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
||||||
bottom_index, MAX(q_high, top_index));
|
bottom_index, MAX(q_high, top_index));
|
||||||
|
|
||||||
while (q < q_low && retries < 10) {
|
while (q < q_low && retries < 10) {
|
||||||
vp9_rc_update_rate_correction_factors(cpi, 0);
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
||||||
bottom_index, MAX(q_high, top_index));
|
bottom_index, MAX(q_high, top_index));
|
||||||
retries++;
|
retries++;
|
||||||
@@ -2979,10 +2979,10 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
|||||||
q_high = q > q_low ? q - 1 : q_low;
|
q_high = q > q_low ? q - 1 : q_low;
|
||||||
|
|
||||||
if (overshoot_seen || loop_count > 1) {
|
if (overshoot_seen || loop_count > 1) {
|
||||||
vp9_rc_update_rate_correction_factors(cpi, 1);
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
q = (q_high + q_low) / 2;
|
q = (q_high + q_low) / 2;
|
||||||
} else {
|
} else {
|
||||||
vp9_rc_update_rate_correction_factors(cpi, 0);
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
||||||
bottom_index, top_index);
|
bottom_index, top_index);
|
||||||
// Special case reset for qlow for constrained quality.
|
// Special case reset for qlow for constrained quality.
|
||||||
@@ -2995,7 +2995,7 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (q > q_high && retries < 10) {
|
while (q > q_high && retries < 10) {
|
||||||
vp9_rc_update_rate_correction_factors(cpi, 0);
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
|
||||||
bottom_index, top_index);
|
bottom_index, top_index);
|
||||||
retries++;
|
retries++;
|
||||||
|
|||||||
@@ -396,7 +396,7 @@ static void set_rate_correction_factor(VP9_COMP *cpi, double factor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp9_rc_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) {
|
void vp9_rc_update_rate_correction_factors(VP9_COMP *cpi) {
|
||||||
const VP9_COMMON *const cm = &cpi->common;
|
const VP9_COMMON *const cm = &cpi->common;
|
||||||
int correction_factor = 100;
|
int correction_factor = 100;
|
||||||
double rate_correction_factor = get_rate_correction_factor(cpi);
|
double rate_correction_factor = get_rate_correction_factor(cpi);
|
||||||
@@ -431,19 +431,8 @@ void vp9_rc_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) {
|
|||||||
|
|
||||||
// More heavily damped adjustment used if we have been oscillating either side
|
// More heavily damped adjustment used if we have been oscillating either side
|
||||||
// of target.
|
// of target.
|
||||||
switch (damp_var) {
|
adjustment_limit = 0.25 +
|
||||||
case 0:
|
0.5 * MIN(1, fabs(log10(0.01 * correction_factor)));
|
||||||
adjustment_limit = 0.75;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
adjustment_limit = 0.25 +
|
|
||||||
0.5 * MIN(1, fabs(log10(0.01 * correction_factor)));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
default:
|
|
||||||
adjustment_limit = 0.25;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpi->rc.q_2_frame = cpi->rc.q_1_frame;
|
cpi->rc.q_2_frame = cpi->rc.q_1_frame;
|
||||||
cpi->rc.q_1_frame = cm->base_qindex;
|
cpi->rc.q_1_frame = cm->base_qindex;
|
||||||
@@ -1222,9 +1211,7 @@ void vp9_rc_postencode_update(VP9_COMP *cpi, uint64_t bytes_used) {
|
|||||||
rc->projected_frame_size = (int)(bytes_used << 3);
|
rc->projected_frame_size = (int)(bytes_used << 3);
|
||||||
|
|
||||||
// Post encode loop adjustment of Q prediction.
|
// Post encode loop adjustment of Q prediction.
|
||||||
vp9_rc_update_rate_correction_factors(
|
vp9_rc_update_rate_correction_factors(cpi);
|
||||||
cpi, (cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF) ? 2 :
|
|
||||||
((oxcf->rc_mode == VPX_CBR) ? 1 : 0));
|
|
||||||
|
|
||||||
// Keep a record of last Q and ambient average Q.
|
// Keep a record of last Q and ambient average Q.
|
||||||
if (cm->frame_type == KEY_FRAME) {
|
if (cm->frame_type == KEY_FRAME) {
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ void vp9_rc_postencode_update_drop_frame(struct VP9_COMP *cpi);
|
|||||||
|
|
||||||
// Updates rate correction factors
|
// Updates rate correction factors
|
||||||
// Changes only the rate correction factors in the rate control structure.
|
// Changes only the rate correction factors in the rate control structure.
|
||||||
void vp9_rc_update_rate_correction_factors(struct VP9_COMP *cpi, int damp_var);
|
void vp9_rc_update_rate_correction_factors(struct VP9_COMP *cpi);
|
||||||
|
|
||||||
// Decide if we should drop this frame: For 1-pass CBR.
|
// Decide if we should drop this frame: For 1-pass CBR.
|
||||||
// Changes only the decimation count in the rate control structure
|
// Changes only the decimation count in the rate control structure
|
||||||
|
|||||||
Reference in New Issue
Block a user