Merge "Some cleanups on rate control"
This commit is contained in:
commit
65f14b0067
@ -2693,7 +2693,6 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
||||
int loop = 0;
|
||||
int overshoot_seen = 0;
|
||||
int undershoot_seen = 0;
|
||||
int active_worst_qchanged = 0;
|
||||
int q_low = bottom_index, q_high = top_index;
|
||||
do {
|
||||
vp9_clear_system_state(); // __asm emms;
|
||||
@ -2745,7 +2744,6 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
||||
|
||||
if (frame_over_shoot_limit == 0)
|
||||
frame_over_shoot_limit = 1;
|
||||
active_worst_qchanged = 0;
|
||||
|
||||
if (cpi->oxcf.end_usage == USAGE_CONSTANT_QUALITY) {
|
||||
loop = 0;
|
||||
@ -2806,16 +2804,12 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
||||
|
||||
if (undershoot_seen || loop_count > 1) {
|
||||
// Update rate_correction_factor unless
|
||||
// cpi->rc.active_worst_quality has changed.
|
||||
if (!active_worst_qchanged)
|
||||
vp9_update_rate_correction_factors(cpi, 1);
|
||||
vp9_update_rate_correction_factors(cpi, 1);
|
||||
|
||||
q = (q_high + q_low + 1) / 2;
|
||||
} else {
|
||||
// Update rate_correction_factor unless
|
||||
// cpi->rc.active_worst_quality has changed.
|
||||
if (!active_worst_qchanged)
|
||||
vp9_update_rate_correction_factors(cpi, 0);
|
||||
vp9_update_rate_correction_factors(cpi, 0);
|
||||
|
||||
q = vp9_regulate_q(cpi, cpi->rc.this_frame_target);
|
||||
|
||||
@ -2834,15 +2828,13 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
||||
if (overshoot_seen || loop_count > 1) {
|
||||
// Update rate_correction_factor unless
|
||||
// cpi->rc.active_worst_quality has changed.
|
||||
if (!active_worst_qchanged)
|
||||
vp9_update_rate_correction_factors(cpi, 1);
|
||||
vp9_update_rate_correction_factors(cpi, 1);
|
||||
|
||||
q = (q_high + q_low) / 2;
|
||||
} else {
|
||||
// Update rate_correction_factor unless
|
||||
// cpi->rc.active_worst_quality has changed.
|
||||
if (!active_worst_qchanged)
|
||||
vp9_update_rate_correction_factors(cpi, 0);
|
||||
vp9_update_rate_correction_factors(cpi, 0);
|
||||
|
||||
q = vp9_regulate_q(cpi, cpi->rc.this_frame_target);
|
||||
|
||||
@ -2884,7 +2876,6 @@ static void encode_with_recode_loop(VP9_COMP *cpi,
|
||||
#endif
|
||||
}
|
||||
} while (loop);
|
||||
cpi->rc.active_worst_qchanged = active_worst_qchanged;
|
||||
}
|
||||
|
||||
static void encode_frame_to_data_rate(VP9_COMP *cpi,
|
||||
@ -3167,9 +3158,9 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
|
||||
cpi->rc.projected_frame_size = (*size) << 3;
|
||||
|
||||
// Post encode loop adjustment of Q prediction.
|
||||
if (!cpi->rc.active_worst_qchanged)
|
||||
vp9_update_rate_correction_factors(cpi, (cpi->sf.recode_loop ||
|
||||
cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) ? 2 : 0);
|
||||
vp9_update_rate_correction_factors(
|
||||
cpi, (cpi->sf.recode_loop ||
|
||||
cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) ? 2 : 0);
|
||||
|
||||
|
||||
cpi->rc.last_q[cm->frame_type] = cm->base_qindex;
|
||||
|
@ -340,7 +340,6 @@ typedef struct {
|
||||
int active_worst_quality;
|
||||
int best_quality;
|
||||
int active_best_quality;
|
||||
int active_worst_qchanged;
|
||||
} RATE_CONTROL;
|
||||
|
||||
typedef struct VP9_COMP {
|
||||
|
@ -390,7 +390,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 vp9_regulate_q(const VP9_COMP *cpi, int target_bits_per_frame) {
|
||||
int q = cpi->rc.active_worst_quality;
|
||||
|
||||
int i;
|
||||
|
@ -21,7 +21,7 @@ void vp9_restore_coding_context(VP9_COMP *cpi);
|
||||
|
||||
void vp9_setup_key_frame(VP9_COMP *cpi);
|
||||
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 vp9_regulate_q(const VP9_COMP *cpi, int target_bits_per_frame);
|
||||
void vp9_adjust_key_frame_context(VP9_COMP *cpi);
|
||||
void vp9_compute_frame_size_bounds(VP9_COMP *cpi,
|
||||
int *frame_under_shoot_limit,
|
||||
|
Loading…
Reference in New Issue
Block a user