From cdbd89197ec878c9c9fed8876c5c3f436ae8994d Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 10 Oct 2016 11:42:47 -0700 Subject: vp9: 1 pass vbr: some adjustments to gf interval. Put limit on gf interval based on lag, and allow for the adjustment on next gf group also on key frame. Small/neutral change on ytlive metrics. Change only affects 1 pass vbr real-time mode. Change-Id: I339c8f4398848698b6e10fe9482c52ca661b94a5 --- vp9/encoder/vp9_ratectrl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'vp9') diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 93eddd655..da1f2c84a 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -1499,8 +1499,8 @@ void vp9_rc_get_one_pass_vbr_params(VP9_COMP *cpi) { if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cpi->oxcf.pass == 0) { vp9_cyclic_refresh_set_golden_update(cpi); } else { - rc->baseline_gf_interval = - (rc->min_gf_interval + rc->max_gf_interval) / 2; + rc->baseline_gf_interval = VPXMIN( + 20, VPXMAX(10, (rc->min_gf_interval + rc->max_gf_interval) / 2)); } rc->af_ratio_onepass_vbr = 10; if (rc->rolling_target_bits > 0) @@ -2088,8 +2088,8 @@ void adjust_gf_boost_lag_one_pass_vbr(VP9_COMP *cpi, uint64_t avg_sad_current) { rc->high_source_sad_lagindex = high_source_sad_lagindex; // Adjust some factors for the next GF group, ignore initial key frame, // and only for lag_in_frames not too small. - if (cpi->refresh_golden_frame == 1 && cm->frame_type != KEY_FRAME && - cm->current_video_frame > 30 && cpi->oxcf.lag_in_frames > 8) { + if (cpi->refresh_golden_frame == 1 && cm->current_video_frame > 30 && + cpi->oxcf.lag_in_frames > 8) { int frame_constraint; if (rc->rolling_target_bits > 0) rate_err = @@ -2110,6 +2110,8 @@ void adjust_gf_boost_lag_one_pass_vbr(VP9_COMP *cpi, uint64_t avg_sad_current) { ? VPXMAX(10, rc->baseline_gf_interval >> 1) : VPXMAX(6, rc->baseline_gf_interval >> 1); } + if (rc->baseline_gf_interval > cpi->oxcf.lag_in_frames - 1) + rc->baseline_gf_interval = cpi->oxcf.lag_in_frames - 1; // Check for constraining gf_interval for up-coming scene/content changes, // or for up-coming key frame, whichever is closer. frame_constraint = rc->frames_to_key; -- cgit v1.2.3