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); |