Commit cbe62b9c authored by Marco's avatar Marco

vp9-svc: Fix to the layer buffer settings.

For the case when the number of temporal layers > 1,
the buffer levels (starting/optimal_buffer_level,
and maximum_buffer_size) were not scaled properly.

In vp9_update_layer_context_change_config():
when setting the layer-buffer levels, fix is to scale
the layer-target_bandwidth by the target_bandwidth
(which is the full stream bandwidth) instead of the
spatial_layer_target.

This is needed because prior to the call
vp9_update_layer_context_change_config(), set_rc_buffer_sizes()
is called which sets the buffer levels based on target bandwidth
(which is the full bandwidth for the SVC stream).

This fix properly sets the layer-buffer levels based on the
layer-bandwidth, and leads to better rate targeting.

Small/neutral change in avgPSNR/SSIM metrics on RTC set.

Change-Id: Ic0f4f7f3487c37b9a9adb4781ae5edfed7140a57
parent 9639641c
...@@ -174,7 +174,7 @@ void vp9_update_layer_context_change_config(VP9_COMP *const cpi, ...@@ -174,7 +174,7 @@ void vp9_update_layer_context_change_config(VP9_COMP *const cpi,
RATE_CONTROL *const lrc = &lc->rc; RATE_CONTROL *const lrc = &lc->rc;
lc->spatial_layer_target_bandwidth = spatial_layer_target; lc->spatial_layer_target_bandwidth = spatial_layer_target;
bitrate_alloc = (float)lc->target_bandwidth / spatial_layer_target; bitrate_alloc = (float)lc->target_bandwidth / target_bandwidth;
lrc->starting_buffer_level = lrc->starting_buffer_level =
(int64_t)(rc->starting_buffer_level * bitrate_alloc); (int64_t)(rc->starting_buffer_level * bitrate_alloc);
lrc->optimal_buffer_level = lrc->optimal_buffer_level =
......
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