| Index: source/libvpx/vp9/encoder/vp9_ratectrl.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_ratectrl.c (revision 290053)
|
| +++ source/libvpx/vp9/encoder/vp9_ratectrl.c (working copy)
|
| @@ -104,7 +104,7 @@
|
|
|
| // q based adjustment to baseline enumerator
|
| enumerator += (int)(enumerator * q) >> 12;
|
| - return (int)(0.5 + (enumerator * correction_factor / q));
|
| + return (int)(enumerator * correction_factor / q);
|
| }
|
|
|
| static int estimate_bits_at_q(FRAME_TYPE frame_type, int q, int mbs,
|
| @@ -277,7 +277,7 @@
|
|
|
| if (cpi->common.frame_type == KEY_FRAME) {
|
| return rc->rate_correction_factors[KF_STD];
|
| - } else if (cpi->pass == 2) {
|
| + } else if (cpi->oxcf.pass == 2) {
|
| RATE_FACTOR_LEVEL rf_lvl =
|
| cpi->twopass.gf_group.rf_level[cpi->twopass.gf_group.index];
|
| return rc->rate_correction_factors[rf_lvl];
|
| @@ -296,7 +296,7 @@
|
|
|
| if (cpi->common.frame_type == KEY_FRAME) {
|
| rc->rate_correction_factors[KF_STD] = factor;
|
| - } else if (cpi->pass == 2) {
|
| + } else if (cpi->oxcf.pass == 2) {
|
| RATE_FACTOR_LEVEL rf_lvl =
|
| cpi->twopass.gf_group.rf_level[cpi->twopass.gf_group.index];
|
| rc->rate_correction_factors[rf_lvl] = factor;
|
| @@ -923,7 +923,7 @@
|
| int vp9_rc_pick_q_and_bounds(const VP9_COMP *cpi,
|
| int *bottom_index, int *top_index) {
|
| int q;
|
| - if (cpi->pass == 0) {
|
| + if (cpi->oxcf.pass == 0) {
|
| if (cpi->oxcf.rc_mode == VPX_CBR)
|
| q = rc_pick_q_and_bounds_one_pass_cbr(cpi, bottom_index, top_index);
|
| else
|
| @@ -991,7 +991,7 @@
|
| // this frame refreshes means next frames don't unless specified by user
|
| rc->frames_since_golden = 0;
|
|
|
| - if (cpi->pass == 2) {
|
| + if (cpi->oxcf.pass == 2) {
|
| if (!rc->source_alt_ref_pending &&
|
| cpi->twopass.gf_group.rf_level[0] == GF_ARF_STD)
|
| rc->source_alt_ref_active = 0;
|
| @@ -1208,7 +1208,7 @@
|
| ? INT_MAX : (int)(rc->starting_buffer_level / 2);
|
| } else {
|
| int kf_boost = 32;
|
| - double framerate = oxcf->framerate;
|
| + double framerate = cpi->framerate;
|
| if (svc->number_temporal_layers > 1 &&
|
| oxcf->rc_mode == VPX_CBR) {
|
| // Use the layer framerate for temporal layers CBR mode.
|
| @@ -1236,26 +1236,31 @@
|
| cm->frame_type = KEY_FRAME;
|
| rc->source_alt_ref_active = 0;
|
|
|
| - if (cpi->use_svc && cpi->svc.number_temporal_layers == 1) {
|
| + if (is_spatial_svc(cpi)) {
|
| cpi->svc.layer_context[cpi->svc.spatial_layer_id].is_key_frame = 1;
|
| + cpi->ref_frame_flags &=
|
| + (~VP9_LAST_FLAG & ~VP9_GOLD_FLAG & ~VP9_ALT_FLAG);
|
| }
|
|
|
| - if (cpi->pass == 0 && cpi->oxcf.rc_mode == VPX_CBR) {
|
| + if (cpi->oxcf.pass == 0 && cpi->oxcf.rc_mode == VPX_CBR) {
|
| target = calc_iframe_target_size_one_pass_cbr(cpi);
|
| }
|
| } else {
|
| cm->frame_type = INTER_FRAME;
|
|
|
| - if (cpi->use_svc && cpi->svc.number_temporal_layers == 1) {
|
| + if (is_spatial_svc(cpi)) {
|
| LAYER_CONTEXT *lc = &cpi->svc.layer_context[cpi->svc.spatial_layer_id];
|
| if (cpi->svc.spatial_layer_id == 0) {
|
| lc->is_key_frame = 0;
|
| } else {
|
| lc->is_key_frame = cpi->svc.layer_context[0].is_key_frame;
|
| + if (lc->is_key_frame)
|
| + cpi->ref_frame_flags &= (~VP9_LAST_FLAG);
|
| }
|
| + cpi->ref_frame_flags &= (~VP9_ALT_FLAG);
|
| }
|
|
|
| - if (cpi->pass == 0 && cpi->oxcf.rc_mode == VPX_CBR) {
|
| + if (cpi->oxcf.pass == 0 && cpi->oxcf.rc_mode == VPX_CBR) {
|
| target = calc_pframe_target_size_one_pass_cbr(cpi);
|
| }
|
| }
|
| @@ -1359,7 +1364,7 @@
|
| RATE_CONTROL *const rc = &cpi->rc;
|
| int vbr_max_bits;
|
|
|
| - rc->avg_frame_bandwidth = (int)(oxcf->target_bandwidth / oxcf->framerate);
|
| + rc->avg_frame_bandwidth = (int)(oxcf->target_bandwidth / cpi->framerate);
|
| rc->min_frame_bandwidth = (int)(rc->avg_frame_bandwidth *
|
| oxcf->two_pass_vbrmin_section / 100);
|
|
|
|
|