diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index e5212acf60388728378c5f95d6ff471146b86372..84202daaa9009c04b1b42d3be387823ebf99e4e7 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -3771,6 +3771,11 @@ static void encode_frame_to_data_rate { cpi->decimation_count --; cpi->bits_off_target += cpi->av_per_frame_bandwidth; + + // Clip the buffer level at the maximum buffer size + if (cpi->bits_off_target > cpi->oxcf.maximum_buffer_size) + cpi->bits_off_target = cpi->oxcf.maximum_buffer_size; + cm->current_video_frame++; cpi->frames_since_key++; @@ -4614,6 +4619,10 @@ static void encode_frame_to_data_rate else cpi->bits_off_target += cpi->av_per_frame_bandwidth - cpi->projected_frame_size; + // Clip the buffer level at the maximum buffer size + if (cpi->bits_off_target > cpi->oxcf.maximum_buffer_size) + cpi->bits_off_target = cpi->oxcf.maximum_buffer_size; + // Rolling monitors of whether we are over or underspending used to help regulate min and Max Q in two pass. cpi->rolling_target_bits = ((cpi->rolling_target_bits * 3) + cpi->this_frame_target + 2) / 4; cpi->rolling_actual_bits = ((cpi->rolling_actual_bits * 3) + cpi->projected_frame_size + 2) / 4; diff --git a/vp8/encoder/ratectrl.c b/vp8/encoder/ratectrl.c index c893b8d62f074ad14980ba9d8195391ef5236c45..63d08935cc4902a71b034733eeedbefceeac713b 100644 --- a/vp8/encoder/ratectrl.c +++ b/vp8/encoder/ratectrl.c @@ -1028,6 +1028,11 @@ static void calc_pframe_target_size(VP8_COMP *cpi) { // Update the buffer level variable. cpi->bits_off_target += cpi->av_per_frame_bandwidth; + + // Clip the buffer level at the maximum 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; } else