From: Marco Paniconi Date: Thu, 9 Jan 2014 22:17:00 +0000 (-0800) Subject: Keep buffer clipped to maximum in change_config. X-Git-Tag: v1.4.0~2707^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=193fa5c8ba64b835932a0b3f6b080bdad8b2ff87;p=libvpx 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 --- diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index de57c327d..07138ecd6 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -1623,6 +1623,12 @@ void vp8_change_config(VP8_COMP *cpi, VP8_CONFIG *oxcf) 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); diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c index fe3ee6d14..a16df5edd 100644 --- a/vp9/encoder/vp9_onyx_if.c +++ b/vp9/encoder/vp9_onyx_if.c @@ -1392,6 +1392,12 @@ void vp9_change_config(VP9_PTR ptr, VP9_CONFIG *oxcf) { 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);