ref: 6f35b1958e0a767240ee20f8e2cece59b1dc1e12
parent: 9704cdec9fb777833599312fc84e3f1311d25eed
author: Jim Bankoski <jimbankoski@google.com>
date: Mon Oct 1 10:17:43 EDT 2012
Disable keyframe in real time that's placed one frame after a cut. The codec as it stood placed a keyframe one frame after a real cut scene - and ignored datarate and other considerations. TODO: Its possible that we should detect a keyframe and recode the frame ( in certain circumstances) to improve quality. Change-Id: Ia1fd6d90103f4da4d21ca5ab62897d22e0b888a8
--- a/test/keyframe_test.cc
+++ b/test/keyframe_test.cc
@@ -62,7 +62,10 @@
::libvpx_test::RandomVideoSource video;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- EXPECT_GT(kf_count_, 1);
+ // In realtime mode - auto placed keyframes are exceedingly rare, don't
+ // bother with this check if(GetParam() > 0)
+ if(GetParam() > 0)
+ EXPECT_GT(kf_count_, 1);
}
TEST_P(KeyframeTest, TestDisableKeyframes) {
@@ -121,7 +124,10 @@
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
- EXPECT_EQ(2u, kf_pts_list_.size()) << " Not the right number of keyframes ";
+ // In realtime mode - auto placed keyframes are exceedingly rare, don't
+ // bother with this check
+ if(GetParam() > 0)
+ EXPECT_EQ(2u, kf_pts_list_.size()) << " Not the right number of keyframes ";
// Verify that keyframes match the file keyframes in the file.
for (std::vector<vpx_codec_pts_t>::const_iterator iter = kf_pts_list_.begin();
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -3970,18 +3970,12 @@
/* Test to see if the stats generated for this frame indicate that
* we should have coded a key frame (assuming that we didn't)!
*/
- if (cpi->pass != 2 && cpi->oxcf.auto_key && cm->frame_type != KEY_FRAME)
- {
- int key_frame_decision = decide_key_frame(cpi);
- if (cpi->compressor_speed == 2)
- {
- /* we don't do re-encoding in realtime mode
- * if key frame is decided then we force it on next frame */
- cpi->force_next_frame_intra = key_frame_decision;
- }
+ if (cpi->pass != 2 && cpi->oxcf.auto_key && cm->frame_type != KEY_FRAME
+ && cpi->compressor_speed != 2)
+ {
#if !(CONFIG_REALTIME_ONLY)
- else if (key_frame_decision)
+ if (decide_key_frame(cpi))
{
/* Reset all our sizing numbers and recode */
cm->frame_type = KEY_FRAME;