Improved Force Key Frame Behaviour These changes improve the behaviour of the code with forced key frames sent in by a calling application. The sizing of the frames is still suboptimal for two pass in particular but the behaviour is much better than it was. Change-Id: I35fae610c67688ccc69d11f385e87dfc884e65a1
diff --git a/vp8/encoder/ratectrl.c b/vp8/encoder/ratectrl.c index d328081..3712722 100644 --- a/vp8/encoder/ratectrl.c +++ b/vp8/encoder/ratectrl.c
@@ -1444,6 +1444,9 @@ } else { + int last_kf_interval = + (cpi->frames_since_key > 0) ? cpi->frames_since_key : 1; + // reset keyframe context and calculate weighted average of last KEY_FRAME_CONTEXT keyframes for (i = 0; i < KEY_FRAME_CONTEXT; i++) { @@ -1454,8 +1457,8 @@ } else { - cpi->prior_key_frame_size[KEY_FRAME_CONTEXT - 1] = cpi->projected_frame_size; - cpi->prior_key_frame_distance[KEY_FRAME_CONTEXT - 1] = cpi->frames_since_key; + cpi->prior_key_frame_size[i] = cpi->projected_frame_size; + cpi->prior_key_frame_distance[i] = last_kf_interval; } av_key_frame_bits += prior_key_frame_weight[i] * cpi->prior_key_frame_size[i];