From 3387b88595489f856ff28cd282c0366bd97336e5 Mon Sep 17 00:00:00 2001 From: "henrike@webrtc.org" Date: Fri, 24 Aug 2012 23:01:38 +0000 Subject: [PATCH] Makes it possible to disable frame dropping in the VP8 codec. BUG= Review URL: https://webrtc-codereview.appspot.com/757006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2661 4adac7df-926f-26a2-2b94-8c16560cd09d --- src/common_types.h | 1 + src/modules/video_coding/codecs/vp8/vp8.cc | 3 ++- src/modules/video_coding/main/source/codec_database.cc | 1 + src/video_engine/test/auto_test/source/vie_autotest_codec.cc | 4 ++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/common_types.h b/src/common_types.h index e97c34d25..122c7ee13 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 a3d2e2e6d..2016559b2 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 05a560ced..fbb983687 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 570097ad0..9efa99ba5 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));