| Index: source/libvpx/vp9/encoder/vp9_svc_layercontext.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_svc_layercontext.c (revision 278778)
|
| +++ source/libvpx/vp9/encoder/vp9_svc_layercontext.c (working copy)
|
| @@ -46,16 +46,15 @@
|
| lrc->key_frame_rate_correction_factor = 1.0;
|
|
|
| if (svc->number_temporal_layers > 1) {
|
| - lc->target_bandwidth = oxcf->ts_target_bitrate[layer] * 1000;
|
| + lc->target_bandwidth = oxcf->ts_target_bitrate[layer];
|
| lrc->last_q[INTER_FRAME] = oxcf->worst_allowed_q;
|
| } else {
|
| - lc->target_bandwidth = oxcf->ss_target_bitrate[layer] * 1000;
|
| - lrc->last_q[0] = oxcf->best_allowed_q;
|
| - lrc->last_q[1] = oxcf->best_allowed_q;
|
| - lrc->last_q[2] = oxcf->best_allowed_q;
|
| + lc->target_bandwidth = oxcf->ss_target_bitrate[layer];
|
| + lrc->last_q[KEY_FRAME] = oxcf->best_allowed_q;
|
| + lrc->last_q[INTER_FRAME] = oxcf->best_allowed_q;
|
| }
|
|
|
| - lrc->buffer_level = vp9_rescale((int)(oxcf->starting_buffer_level),
|
| + lrc->buffer_level = vp9_rescale((int)(oxcf->starting_buffer_level_ms),
|
| lc->target_bandwidth, 1000);
|
| lrc->bits_off_target = lrc->buffer_level;
|
| }
|
| @@ -82,20 +81,20 @@
|
| RATE_CONTROL *const lrc = &lc->rc;
|
|
|
| if (svc->number_temporal_layers > 1) {
|
| - lc->target_bandwidth = oxcf->ts_target_bitrate[layer] * 1000;
|
| + lc->target_bandwidth = oxcf->ts_target_bitrate[layer];
|
| } else {
|
| - lc->target_bandwidth = oxcf->ss_target_bitrate[layer] * 1000;
|
| + lc->target_bandwidth = oxcf->ss_target_bitrate[layer];
|
| }
|
| bitrate_alloc = (float)lc->target_bandwidth / target_bandwidth;
|
| // Update buffer-related quantities.
|
| - lc->starting_buffer_level =
|
| - (int64_t)(oxcf->starting_buffer_level * bitrate_alloc);
|
| - lc->optimal_buffer_level =
|
| - (int64_t)(oxcf->optimal_buffer_level * bitrate_alloc);
|
| - lc->maximum_buffer_size =
|
| - (int64_t)(oxcf->maximum_buffer_size * bitrate_alloc);
|
| - lrc->bits_off_target = MIN(lrc->bits_off_target, lc->maximum_buffer_size);
|
| - lrc->buffer_level = MIN(lrc->buffer_level, lc->maximum_buffer_size);
|
| + lrc->starting_buffer_level =
|
| + (int64_t)(rc->starting_buffer_level * bitrate_alloc);
|
| + lrc->optimal_buffer_level =
|
| + (int64_t)(rc->optimal_buffer_level * bitrate_alloc);
|
| + lrc->maximum_buffer_size =
|
| + (int64_t)(rc->maximum_buffer_size * bitrate_alloc);
|
| + lrc->bits_off_target = MIN(lrc->bits_off_target, lrc->maximum_buffer_size);
|
| + lrc->buffer_level = MIN(lrc->buffer_level, lrc->maximum_buffer_size);
|
| // Update framerate-related quantities.
|
| if (svc->number_temporal_layers > 1) {
|
| lc->framerate = oxcf->framerate / oxcf->ts_rate_decimator[layer];
|
| @@ -132,8 +131,7 @@
|
| } else {
|
| const double prev_layer_framerate =
|
| oxcf->framerate / oxcf->ts_rate_decimator[layer - 1];
|
| - const int prev_layer_target_bandwidth =
|
| - oxcf->ts_target_bitrate[layer - 1] * 1000;
|
| + const int prev_layer_target_bandwidth = oxcf->ts_target_bitrate[layer - 1];
|
| lc->avg_frame_size =
|
| (int)((lc->target_bandwidth - prev_layer_target_bandwidth) /
|
| (lc->framerate - prev_layer_framerate));
|
| @@ -151,20 +149,7 @@
|
| oxcf->two_pass_vbrmin_section / 100);
|
| lrc->max_frame_bandwidth = (int)(((int64_t)lrc->avg_frame_bandwidth *
|
| oxcf->two_pass_vbrmax_section) / 100);
|
| - lrc->max_gf_interval = 16;
|
| -
|
| - lrc->static_scene_max_gf_interval = cpi->oxcf.key_freq >> 1;
|
| -
|
| - if (oxcf->play_alternate && oxcf->lag_in_frames) {
|
| - if (lrc->max_gf_interval > oxcf->lag_in_frames - 1)
|
| - lrc->max_gf_interval = oxcf->lag_in_frames - 1;
|
| -
|
| - if (lrc->static_scene_max_gf_interval > oxcf->lag_in_frames - 1)
|
| - lrc->static_scene_max_gf_interval = oxcf->lag_in_frames - 1;
|
| - }
|
| -
|
| - if (lrc->max_gf_interval > lrc->static_scene_max_gf_interval)
|
| - lrc->max_gf_interval = lrc->static_scene_max_gf_interval;
|
| + vp9_rc_set_gf_max_interval(oxcf, lrc);
|
| }
|
|
|
| void vp9_restore_layer_context(VP9_COMP *const cpi) {
|
| @@ -175,9 +160,6 @@
|
| cpi->rc = lc->rc;
|
| cpi->twopass = lc->twopass;
|
| cpi->oxcf.target_bandwidth = lc->target_bandwidth;
|
| - cpi->oxcf.starting_buffer_level = lc->starting_buffer_level;
|
| - cpi->oxcf.optimal_buffer_level = lc->optimal_buffer_level;
|
| - cpi->oxcf.maximum_buffer_size = lc->maximum_buffer_size;
|
| // Reset the frames_since_key and frames_to_key counters to their values
|
| // before the layer restore. Keep these defined for the stream (not layer).
|
| if (cpi->svc.number_temporal_layers > 1) {
|
| @@ -193,9 +175,6 @@
|
| lc->rc = cpi->rc;
|
| lc->twopass = cpi->twopass;
|
| lc->target_bandwidth = (int)oxcf->target_bandwidth;
|
| - lc->starting_buffer_level = oxcf->starting_buffer_level;
|
| - lc->optimal_buffer_level = oxcf->optimal_buffer_level;
|
| - lc->maximum_buffer_size = oxcf->maximum_buffer_size;
|
| }
|
|
|
| void vp9_init_second_pass_spatial_svc(VP9_COMP *cpi) {
|
| @@ -203,7 +182,7 @@
|
| int i;
|
|
|
| for (i = 0; i < svc->number_spatial_layers; ++i) {
|
| - struct twopass_rc *const twopass = &svc->layer_context[i].twopass;
|
| + TWO_PASS *const twopass = &svc->layer_context[i].twopass;
|
|
|
| svc->spatial_layer_id = i;
|
| vp9_init_second_pass(cpi);
|
|
|