From 55dd70842c3d2741b08da8e2807cc233ee797ccc Mon Sep 17 00:00:00 2001 From: Taylor Brandstetter Date: Tue, 3 May 2016 13:50:11 -0700 Subject: [PATCH] Support RtpEncodingParameters::active in voice engine. R=solenberg@webrtc.org Review URL: https://codereview.webrtc.org/1943073003 . Cr-Commit-Position: refs/heads/master@{#12615} --- webrtc/media/engine/webrtcvoiceengine.cc | 9 ++++++--- .../engine/webrtcvoiceengine_unittest.cc | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc index ed67ce84ba..464d6133d0 100644 --- a/webrtc/media/engine/webrtcvoiceengine.cc +++ b/webrtc/media/engine/webrtcvoiceengine.cc @@ -1216,16 +1216,19 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream return rtp_parameters_; } - void set_rtp_parameters(const webrtc::RtpParameters& parameters) { + void SetRtpParameters(const webrtc::RtpParameters& parameters) { RTC_CHECK_EQ(1UL, parameters.encodings.size()); rtp_parameters_ = parameters; + // parameters.encodings[0].active could have changed. + UpdateSendState(); } private: void UpdateSendState() { RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); RTC_DCHECK(stream_); - if (send_ && source_ != nullptr) { + RTC_DCHECK_EQ(1UL, rtp_parameters_.encodings.size()); + if (send_ && source_ != nullptr && rtp_parameters_.encodings[0].active) { stream_->Start(); } else { // !send || source_ = nullptr stream_->Stop(); @@ -1457,7 +1460,7 @@ bool WebRtcVoiceMediaChannel::SetRtpParameters( // Codecs are handled at the WebRtcVoiceMediaChannel level. webrtc::RtpParameters reduced_params = parameters; reduced_params.codecs.clear(); - it->second->set_rtp_parameters(reduced_params); + it->second->SetRtpParameters(reduced_params); return true; } diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc index c72775a985..e5af99fca7 100644 --- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc +++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc @@ -892,6 +892,26 @@ TEST_F(WebRtcVoiceEngineTestFake, EXPECT_FALSE(channel_->SetRtpParameters(kSsrc1, parameters)); } +// Test that a stream will not be sending if its encoding is made +// inactive through SetRtpParameters. +TEST_F(WebRtcVoiceEngineTestFake, SetRtpParametersEncodingsActive) { + EXPECT_TRUE(SetupSendStream()); + SetSend(channel_, true); + EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); + // Get current parameters and change "active" to false. + webrtc::RtpParameters parameters = channel_->GetRtpParameters(kSsrc1); + ASSERT_EQ(1u, parameters.encodings.size()); + ASSERT_TRUE(parameters.encodings[0].active); + parameters.encodings[0].active = false; + EXPECT_TRUE(channel_->SetRtpParameters(kSsrc1, parameters)); + EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); + + // Now change it back to active and verify we resume sending. + parameters.encodings[0].active = true; + EXPECT_TRUE(channel_->SetRtpParameters(kSsrc1, parameters)); + EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); +} + // Test that SetRtpParameters configures the correct encoding channel for each // SSRC. TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) {