From 869d82d656eaea8f0db1df6364af4d22875103f4 Mon Sep 17 00:00:00 2001 From: Deepa K G Date: Fri, 17 May 2019 16:05:06 +0530 Subject: [PATCH] Increase the bits allocated to key frame Based on the spatial complexity, increase the bits allocated to key frame. Change-Id: I4f96990a13bcc3bdb7a22d50e67e2bd622f1ff7b --- vp9/encoder/vp9_firstpass.c | 8 ++++++++ vpx_dsp/vpx_dsp_common.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index 0521daf1f..353b397d3 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -2925,6 +2925,7 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { FIRSTPASS_STATS next_frame; FIRSTPASS_STATS last_frame; int kf_bits = 0; + int64_t max_kf_bits; double decay_accumulator = 1.0; double zero_motion_accumulator = 1.0; double zero_motion_sum = 0.0; @@ -3175,6 +3176,13 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { // Work out how many bits to allocate for the key frame itself. kf_bits = calculate_boost_bits((rc->frames_to_key - 1), rc->kf_boost, twopass->kf_group_bits); + // Based on the spatial complexity, increase the bits allocated to key frame. + kf_bits += + (int)((twopass->kf_group_bits - kf_bits) * (kf_mod_err / kf_group_err)); + max_kf_bits = + twopass->kf_group_bits - (rc->frames_to_key - 1) * FRAME_OVERHEAD_BITS; + max_kf_bits = lclamp(max_kf_bits, 0, INT_MAX); + kf_bits = VPXMIN(kf_bits, (int)max_kf_bits); twopass->kf_group_bits -= kf_bits; diff --git a/vpx_dsp/vpx_dsp_common.h b/vpx_dsp/vpx_dsp_common.h index f1fcf2df5..2de449546 100644 --- a/vpx_dsp/vpx_dsp_common.h +++ b/vpx_dsp/vpx_dsp_common.h @@ -57,6 +57,10 @@ static INLINE double fclamp(double value, double low, double high) { return value < low ? low : (value > high ? high : value); } +static INLINE int64_t lclamp(int64_t value, int64_t low, int64_t high) { + return value < low ? low : (value > high ? high : value); +} + static INLINE uint16_t clip_pixel_highbd(int val, int bd) { switch (bd) { case 8: -- 2.40.0