From e15be3025b5b77efead67f5037d4c152450619be Mon Sep 17 00:00:00 2001 From: paulwilkins Date: Mon, 14 Aug 2017 16:11:34 +0100 Subject: [PATCH] Fix for encoder slowdown (for speeds >= 3) Some clips in nightly unit test exhibiting significant encoder slowdown which appears to bisect to Change-Id: I692311a709ccdb6003e705103de9d05b59bf840a. The above change allowed for emergency iterations of the recode loop and adjustment of the Q range if there is a large rate miss. This patch disables the above adaptation for cases of cpu_speed >= 3 or more specifically where cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF. For speeds >= 3 the code does not currently run a dummy bit pack operation inside the recode loop. Without this dummy pack operation there is no up to date estimate of the current frame's size to use as a basis for assessing the requirement for a recode. In practice it was using the previous frames size (or 0 for the first frame) which could cause odd behavior. If we require the emergency rate correction added in Change-Id: I6923.. for the higher speed settings it will be necessary to enable the dummy pack which will in turn hurt encode speed. BUG=webm:1454 Change-Id: I4fb3c6062ca9508325a6f31582f8e80f1a9b126f --- vp9/encoder/vp9_encoder.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 4888c20f4..b5156d43d 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -2740,7 +2740,8 @@ static int recode_loop_test(VP9_COMP *cpi, int high_limit, int low_limit, int q, // Force recode for extreme overshoot. if ((rc->projected_frame_size >= rc->max_frame_bandwidth) || - (rc->projected_frame_size >= big_rate_miss_high_threshold(cpi))) { + (cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF && + rc->projected_frame_size >= big_rate_miss_high_threshold(cpi))) { return 1; } -- 2.40.0