From a00dad39bd8a64aec35b987c730a8f54112472ee Mon Sep 17 00:00:00 2001 From: Paul Wilkins Date: Fri, 3 Jan 2014 14:14:04 +0000 Subject: No arf right before real scene cut. To reduce pulsing we now allow an arf just before forced key frames and at the end of a clip or section (which may be stitched to another clip or section). However, this does not make sense for key frames arising from real scene cuts. Change from original patch reflects other recent changes in regard to alignment of gf/arf and kf groups. Change-Id: I074a91d1207e9b3e28085af982f6718aa599775f --- vp9/encoder/vp9_firstpass.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index 34f8a9442..812ffa96d 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -1660,7 +1660,7 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { // Don't allow a gf too near the next kf if ((cpi->rc.frames_to_key - i) < MIN_GF_INTERVAL) { - while (i < cpi->rc.frames_to_key) { + while (i < (cpi->rc.frames_to_key + !cpi->rc.next_key_frame_forced)) { i++; if (EOF == input_stats(&cpi->twopass, this_frame)) @@ -1695,6 +1695,9 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { if (allow_alt_ref && (i < cpi->oxcf.lag_in_frames) && (i >= MIN_GF_INTERVAL) && + // for real scene cuts (not forced kfs) dont allow arf very near kf. + (cpi->rc.next_key_frame_forced || + (i <= (cpi->rc.frames_to_key - MIN_GF_INTERVAL))) && ((next_frame.pcnt_inter > 0.75) || (next_frame.pcnt_second_ref > 0.5)) && ((mv_in_out_accumulator / (double)i > -0.2) || @@ -2368,6 +2371,8 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { input_stats(&cpi->twopass, &tmp_frame); } cpi->rc.next_key_frame_forced = 1; + } else if (cpi->twopass.stats_in == cpi->twopass.stats_in_end) { + cpi->rc.next_key_frame_forced = 1; } else { cpi->rc.next_key_frame_forced = 0; } -- cgit v1.2.3