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
This commit is contained in:
parent
9704cdec9f
commit
6f35b1958e
@ -62,7 +62,10 @@ TEST_P(KeyframeTest, TestRandomVideoSource) {
|
||||
::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 @@ TEST_P(KeyframeTest, TestAutoKeyframe) {
|
||||
|
||||
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();
|
||||
|
@ -3970,18 +3970,12 @@ static void encode_frame_to_data_rate
|
||||
/* 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;
|
||||
|
Loading…
Reference in New Issue
Block a user