diff options
author | Marco <marpan@google.com> | 2016-04-18 10:51:07 -0700 |
---|---|---|
committer | Marco <marpan@google.com> | 2016-04-18 14:40:55 -0700 |
commit | 9cc1f692bdbfcc1495b600eb1af2f7c0ffeb8abe (patch) | |
tree | cece9e62821a17dabbd68ab5ed14b1e6c1fd1f91 /vp9/encoder/vp9_ratectrl.c | |
parent | d488236ce3f46c70796df77c4a0f26972e056bbc (diff) | |
download | libvpx-9cc1f692bdbfcc1495b600eb1af2f7c0ffeb8abe.tar libvpx-9cc1f692bdbfcc1495b600eb1af2f7c0ffeb8abe.tar.gz libvpx-9cc1f692bdbfcc1495b600eb1af2f7c0ffeb8abe.tar.bz2 libvpx-9cc1f692bdbfcc1495b600eb1af2f7c0ffeb8abe.zip |
vp9: 1 pass vbr: More even spacing for gf near key frame.
More even spacing near key frame and avoid gf on scene cut
if its close to key frame.
Small increase in metrics for ytlive set (which uses key-period=150).
(~0.2% gain)
Change only affects 1 pass vbr mode.
Change-Id: If1e5a59baf1e0befbaf998522fbc47d94ac5b5df
Diffstat (limited to 'vp9/encoder/vp9_ratectrl.c')
-rw-r--r-- | vp9/encoder/vp9_ratectrl.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 300080ba1..07a834479 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -1506,6 +1506,11 @@ void vp9_rc_get_one_pass_vbr_params(VP9_COMP *cpi) { rc->baseline_gf_interval = (rc->min_gf_interval + rc->max_gf_interval) / 2; } + // Reset the gf interval to make more equal spacing for up-coming key frame. + if ((rc->frames_to_key <= 7 * rc->baseline_gf_interval >> 2) && + (rc->frames_to_key > rc->baseline_gf_interval)) { + rc->baseline_gf_interval = rc->frames_to_key >> 1; + } rc->frames_till_gf_update_due = rc->baseline_gf_interval; // NOTE: frames_till_gf_update_due must be <= frames_to_key. if (rc->frames_till_gf_update_due > rc->frames_to_key) { @@ -2092,6 +2097,7 @@ void vp9_avg_source_sad(VP9_COMP *cpi) { // For VBR, under scene change/high content change, force golden refresh. if (cpi->oxcf.rc_mode == VPX_VBR && rc->high_source_sad && + rc->frames_to_key > 3 && rc->count_last_scene_change > 4 && cpi->ext_refresh_frame_flags_pending == 0) { int target; |