From 543e589205af006f6b999a2c5df51d3fb722d925 Mon Sep 17 00:00:00 2001 From: "pbos@webrtc.org" Date: Wed, 23 Jul 2014 07:01:31 +0000 Subject: [PATCH] Wire up VideoOptions for payload-based padding. BUG=1788 R=wu@webrtc.org Review URL: https://webrtc-codereview.appspot.com/18879004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6759 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/media/webrtc/webrtcvideoengine2.cc | 5 ++++ .../webrtc/webrtcvideoengine2_unittest.cc | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc index 75937b046..549aa2cfe 100644 --- a/talk/media/webrtc/webrtcvideoengine2.cc +++ b/talk/media/webrtc/webrtcvideoengine2.cc @@ -664,6 +664,7 @@ void WebRtcVideoChannel2::Construct(webrtc::Call* call, void WebRtcVideoChannel2::SetDefaultOptions() { options_.video_noise_reduction.Set(true); + options_.use_payload_padding.Set(false); } WebRtcVideoChannel2::~WebRtcVideoChannel2() { @@ -1508,6 +1509,9 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( // Set RTX payload type if RTX is enabled. if (!parameters_.config.rtp.rtx.ssrcs.empty()) { parameters_.config.rtp.rtx.payload_type = codec_settings.rtx_payload_type; + + options.use_payload_padding.Get( + ¶meters_.config.rtp.rtx.pad_with_redundant_payloads); } if (IsNackEnabled(codec_settings.codec)) { @@ -1516,6 +1520,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( parameters_.codec_settings.Set(codec_settings); parameters_.options = options; + RecreateWebRtcStream(); delete old_encoder; } diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc index c2f2dc35c..c9d2066e0 100644 --- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc +++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc @@ -1067,6 +1067,32 @@ TEST_F(WebRtcVideoChannel2Test, FAIL() << "Not implemented."; // TODO(pbos): Implement. } +TEST_F(WebRtcVideoChannel2Test, RedundantPayloadsDisabledByDefault) { + const std::vector ssrcs = MAKE_VECTOR(kSsrcs1); + const std::vector rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); + FakeVideoSendStream* stream = AddSendStream( + cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); + EXPECT_FALSE(stream->GetConfig().rtp.rtx.pad_with_redundant_payloads); +} + +TEST_F(WebRtcVideoChannel2Test, SetOptionsWithPayloadPadding) { + VideoOptions options; + options.use_payload_padding.Set(true); + channel_->SetOptions(options); + + const std::vector ssrcs = MAKE_VECTOR(kSsrcs1); + const std::vector rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); + FakeVideoSendStream* stream = AddSendStream( + cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); + EXPECT_TRUE(stream->GetConfig().rtp.rtx.pad_with_redundant_payloads); + + options.use_payload_padding.Set(false); + channel_->SetOptions(options); + + stream = fake_channel_->GetFakeCall()->GetVideoSendStreams()[0]; + EXPECT_FALSE(stream->GetConfig().rtp.rtx.pad_with_redundant_payloads); +} + TEST_F(WebRtcVideoChannel2Test, Vp8DenoisingEnabledByDefault) { FakeVideoSendStream* stream = AddSendStream(); webrtc::VideoCodecVP8 vp8_settings;