diff --git a/src/common_types.h b/src/common_types.h index e97c34d251..122c7ee130 100644 --- a/src/common_types.h +++ b/src/common_types.h @@ -522,6 +522,7 @@ struct VideoCodecVP8 bool denoisingOn; bool errorConcealmentOn; bool automaticResizeOn; + bool frameDroppingOn; }; // Unknown specific diff --git a/src/modules/video_coding/codecs/vp8/vp8.cc b/src/modules/video_coding/codecs/vp8/vp8.cc index a3d2e2e6de..2016559b24 100644 --- a/src/modules/video_coding/codecs/vp8/vp8.cc +++ b/src/modules/video_coding/codecs/vp8/vp8.cc @@ -233,7 +233,8 @@ int VP8Encoder::InitEncode(const VideoCodec* inst, } // rate control settings - config_->rc_dropframe_thresh = 30; + config_->rc_dropframe_thresh = inst->codecSpecific.VP8.frameDroppingOn ? + 30 : 0; config_->rc_end_usage = VPX_CBR; config_->g_pass = VPX_RC_ONE_PASS; config_->rc_resize_allowed = inst->codecSpecific.VP8.automaticResizeOn ? diff --git a/src/modules/video_coding/main/source/codec_database.cc b/src/modules/video_coding/main/source/codec_database.cc index 05a560ced1..fbb9836870 100644 --- a/src/modules/video_coding/main/source/codec_database.cc +++ b/src/modules/video_coding/main/source/codec_database.cc @@ -175,6 +175,7 @@ VCMCodecDataBase::Codec(WebRtc_UWord8 listId, VideoCodec *settings) settings->codecSpecific.VP8.denoisingOn = true; settings->codecSpecific.VP8.errorConcealmentOn = false; settings->codecSpecific.VP8.automaticResizeOn = false; + settings->codecSpecific.VP8.frameDroppingOn = true; break; } #endif diff --git a/src/video_engine/test/auto_test/source/vie_autotest_codec.cc b/src/video_engine/test/auto_test/source/vie_autotest_codec.cc index 570097ad0c..9efa99ba5a 100644 --- a/src/video_engine/test/auto_test/source/vie_autotest_codec.cc +++ b/src/video_engine/test/auto_test/source/vie_autotest_codec.cc @@ -463,6 +463,7 @@ void ViEAutoTest::ViECodecAPITest() { EXPECT_EQ(0, codec->GetCodec(i, video_codec)); if (video_codec.codecType == webrtc::kVideoCodecVP8) { video_codec.codecSpecific.VP8.automaticResizeOn = true; + video_codec.codecSpecific.VP8.frameDroppingOn = true; EXPECT_EQ(0, codec->SetSendCodec(video_channel, video_codec)); break; } @@ -471,11 +472,13 @@ void ViEAutoTest::ViECodecAPITest() { EXPECT_EQ(0, codec->GetSendCodec(video_channel, video_codec)); EXPECT_EQ(webrtc::kVideoCodecVP8, video_codec.codecType); EXPECT_TRUE(video_codec.codecSpecific.VP8.automaticResizeOn); + EXPECT_TRUE(video_codec.codecSpecific.VP8.frameDroppingOn); for (int i = 0; i < number_of_codecs; i++) { EXPECT_EQ(0, codec->GetCodec(i, video_codec)); if (video_codec.codecType == webrtc::kVideoCodecI420) { video_codec.codecSpecific.VP8.automaticResizeOn = false; + video_codec.codecSpecific.VP8.frameDroppingOn = false; EXPECT_EQ(0, codec->SetSendCodec(video_channel, video_codec)); break; } @@ -484,6 +487,7 @@ void ViEAutoTest::ViECodecAPITest() { EXPECT_EQ(0, codec->GetSendCodec(video_channel, video_codec)); EXPECT_EQ(webrtc::kVideoCodecI420, video_codec.codecType); EXPECT_FALSE(video_codec.codecSpecific.VP8.automaticResizeOn); + EXPECT_FALSE(video_codec.codecSpecific.VP8.frameDroppingOn); EXPECT_EQ(0, base->DeleteChannel(video_channel));