From 2b3891d9daf9194bbf62dc246882e3ea9c5c4768 Mon Sep 17 00:00:00 2001 From: Alex Converse Date: Thu, 16 Jan 2014 11:38:45 -0800 Subject: [PATCH] Fix key frames for one pass. Set this_key_frame_forced flag and don't use kf_boost when not set. Change-Id: Ibe66a82fa9219e60db358ddeb43d6471816c8b50 --- vp9/encoder/vp9_firstpass.c | 6 ++++++ vp9/encoder/vp9_ratectrl.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index 538599d58..0a5af18cb 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -1965,7 +1965,10 @@ void vp9_get_one_pass_params(VP9_COMP *cpi) { cpi->rc.frames_to_key == 0 || (cpi->oxcf.auto_key && test_for_kf_one_pass(cpi)))) { cm->frame_type = KEY_FRAME; + cpi->rc.this_key_frame_forced = cm->current_video_frame != 0 && + cpi->rc.frames_to_key == 0; cpi->rc.frames_to_key = cpi->key_frame_frequency; + cpi->rc.kf_boost = 300; } else { cm->frame_type = INTER_FRAME; } @@ -1982,7 +1985,10 @@ void vp9_get_one_pass_cbr_params(VP9_COMP *cpi) { cpi->rc.frames_to_key == 0 || (cpi->oxcf.auto_key && test_for_kf_one_pass(cpi)))) { cm->frame_type = KEY_FRAME; + cpi->rc.this_key_frame_forced = cm->current_video_frame != 0 && + cpi->rc.frames_to_key == 0; cpi->rc.frames_to_key = cpi->key_frame_frequency; + cpi->rc.kf_boost = 300; } else { cm->frame_type = INTER_FRAME; } diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 72ab00f98..4d2d43a11 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -602,7 +602,7 @@ int vp9_rc_pick_q_and_adjust_q_bounds(const VP9_COMP *cpi, (last_boosted_q * 0.75)); active_best_quality = MAX(qindex + delta_qindex, rc->best_quality); } else if (!(cpi->pass == 0 && cm->current_video_frame == 0)) { - // not first frame of one pass + // not first frame of one pass and kf_boost is set double q_adj_factor = 1.0; double q_val;