ref: 193fa5c8ba64b835932a0b3f6b080bdad8b2ff87
parent: c8e8d3a461c3a75e768bd8b380e4439de7acb290
author: Marco Paniconi <marpan@google.com>
date: Thu Jan 9 09:17:00 EST 2014
Keep buffer clipped to maximum in change_config. Under a configuration change, where the bitrate suddenly decreases, the buffer level may be larger than maximum allowed (for that first frame to be encoded after change_config). This change keeps it clipped to its maximum level. Change-Id: I4d0b5b3d1fd8148600dd39e02bd630c9464baba5
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -1623,6 +1623,12 @@
cpi->oxcf.maximum_buffer_size =
rescale((int)cpi->oxcf.maximum_buffer_size,
cpi->oxcf.target_bandwidth, 1000);
+ // Under a configuration change, where maximum_buffer_size may change,
+ // keep buffer level clipped to the maximum allowed buffer size.
+ if (cpi->bits_off_target > cpi->oxcf.maximum_buffer_size) {
+ cpi->bits_off_target = cpi->oxcf.maximum_buffer_size;
+ cpi->buffer_level = cpi->bits_off_target;
+ }
/* Set up frame rate and related parameters rate control values. */
vp8_new_framerate(cpi, cpi->framerate);
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -1392,6 +1392,12 @@
else
cpi->oxcf.maximum_buffer_size = rescale(cpi->oxcf.maximum_buffer_size,
cpi->oxcf.target_bandwidth, 1000);
+ // Under a configuration change, where maximum_buffer_size may change,
+ // keep buffer level clipped to the maximum allowed buffer size.
+ if (cpi->rc.bits_off_target > cpi->oxcf.maximum_buffer_size) {
+ cpi->rc.bits_off_target = cpi->oxcf.maximum_buffer_size;
+ cpi->rc.buffer_level = cpi->rc.bits_off_target;
+ }
// Set up frame rate and related parameters rate control values.
vp9_new_framerate(cpi, cpi->oxcf.framerate);
--
⑨