diff options
author | Marco <marpan@google.com> | 2017-12-07 17:24:41 -0800 |
---|---|---|
committer | Marco <marpan@google.com> | 2017-12-19 09:57:21 -0800 |
commit | a2127236ae4742f329e5571d76b84de08cd3b8ea (patch) | |
tree | c4d5b457595aea30a2838c1eed6690178017974c /vp9/encoder/vp9_encoder.c | |
parent | 08a668af32d05de2b29d29372b1749dd29ee8a61 (diff) | |
download | libvpx-a2127236ae4742f329e5571d76b84de08cd3b8ea.tar libvpx-a2127236ae4742f329e5571d76b84de08cd3b8ea.tar.gz libvpx-a2127236ae4742f329e5571d76b84de08cd3b8ea.tar.bz2 libvpx-a2127236ae4742f329e5571d76b84de08cd3b8ea.zip |
vp9: Reset buffer level on large bitrate changes.
For a large change in the target avg_frame_bandwidth,
via the update in change_config()), reset the buffer_level
to optimal_level.
This fix prevents possible frame drops, where for example,
encoder suddenly goes from lower to higher bitrate.
Change-Id: I2f844c41d04c01240e85f574e59d2b9075c7eb6d
Diffstat (limited to 'vp9/encoder/vp9_encoder.c')
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 527aecbb9..2ae59dd98 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -1868,6 +1868,7 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) { // Check for resetting the rc flags (rc_1_frame, rc_2_frame) if the // configuration change has a large change in avg_frame_bandwidth. // For SVC check for resetting based on spatial layer average bandwidth. + // Also reset buffer level to optimal level. if (cm->current_video_frame > 0) { if (cpi->use_svc) { vp9_svc_check_reset_layer_rc_flag(cpi); @@ -1876,6 +1877,8 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) { rc->avg_frame_bandwidth < (rc->last_avg_frame_bandwidth >> 1)) { rc->rc_1_frame = 0; rc->rc_2_frame = 0; + rc->bits_off_target = rc->optimal_buffer_level; + rc->buffer_level = rc->optimal_buffer_level; } } } |