Commit 26abc15e authored by Paul Wilkins's avatar Paul Wilkins Committed by Gerrit Code Review

Merge "Bug in clamping of base_frame_target."

parents 65dd056e 762c0f22
...@@ -1183,10 +1183,13 @@ static int get_twopass_worst_quality(const VP9_COMP *cpi, ...@@ -1183,10 +1183,13 @@ static int get_twopass_worst_quality(const VP9_COMP *cpi,
double group_weight_factor) { double group_weight_factor) {
const RATE_CONTROL *const rc = &cpi->rc; const RATE_CONTROL *const rc = &cpi->rc;
const VP9EncoderConfig *const oxcf = &cpi->oxcf; const VP9EncoderConfig *const oxcf = &cpi->oxcf;
// Clamp the target rate to VBR min / max limts.
const int target_rate =
vp9_rc_clamp_pframe_target_size(cpi, section_target_bandwidth);
inactive_zone = fclamp(inactive_zone, 0.0, 1.0); inactive_zone = fclamp(inactive_zone, 0.0, 1.0);
if (section_target_bandwidth <= 0) { if (target_rate <= 0) {
return rc->worst_quality; // Highest value allowed return rc->worst_quality; // Highest value allowed
} else { } else {
const int num_mbs = (cpi->oxcf.resize_mode != RESIZE_NONE) const int num_mbs = (cpi->oxcf.resize_mode != RESIZE_NONE)
...@@ -1195,7 +1198,7 @@ static int get_twopass_worst_quality(const VP9_COMP *cpi, ...@@ -1195,7 +1198,7 @@ static int get_twopass_worst_quality(const VP9_COMP *cpi,
const double av_err_per_mb = section_err / active_mbs; const double av_err_per_mb = section_err / active_mbs;
const double speed_term = 1.0 + 0.04 * oxcf->speed; const double speed_term = 1.0 + 0.04 * oxcf->speed;
const double ediv_size_correction = (double)num_mbs / EDIV_SIZE_FACTOR; const double ediv_size_correction = (double)num_mbs / EDIV_SIZE_FACTOR;
const int target_norm_bits_per_mb = ((uint64_t)section_target_bandwidth << const int target_norm_bits_per_mb = ((uint64_t)target_rate <<
BPER_MB_NORMBITS) / active_mbs; BPER_MB_NORMBITS) / active_mbs;
int q; int q;
...@@ -2737,11 +2740,6 @@ void vp9_rc_get_second_pass_params(VP9_COMP *cpi) { ...@@ -2737,11 +2740,6 @@ void vp9_rc_get_second_pass_params(VP9_COMP *cpi) {
} }
target_rate = gf_group->bit_allocation[gf_group->index]; target_rate = gf_group->bit_allocation[gf_group->index];
if (cpi->common.frame_type == KEY_FRAME)
target_rate = vp9_rc_clamp_iframe_target_size(cpi, target_rate);
else
target_rate = vp9_rc_clamp_pframe_target_size(cpi, target_rate);
rc->base_frame_target = target_rate; rc->base_frame_target = target_rate;
{ {
......
...@@ -1816,6 +1816,11 @@ void vp9_set_target_rate(VP9_COMP *cpi) { ...@@ -1816,6 +1816,11 @@ void vp9_set_target_rate(VP9_COMP *cpi) {
RATE_CONTROL *const rc = &cpi->rc; RATE_CONTROL *const rc = &cpi->rc;
int target_rate = rc->base_frame_target; int target_rate = rc->base_frame_target;
if (cpi->common.frame_type == KEY_FRAME)
target_rate = vp9_rc_clamp_iframe_target_size(cpi, target_rate);
else
target_rate = vp9_rc_clamp_pframe_target_size(cpi, target_rate);
// Correction to rate target based on prior over or under shoot. // Correction to rate target based on prior over or under shoot.
if (cpi->oxcf.rc_mode == VPX_VBR || cpi->oxcf.rc_mode == VPX_CQ) if (cpi->oxcf.rc_mode == VPX_VBR || cpi->oxcf.rc_mode == VPX_CQ)
vbr_rate_correction(cpi, &target_rate); vbr_rate_correction(cpi, &target_rate);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment