From 6d6e7c5e1ac4b033e919cf562cc34ccc3b37f201 Mon Sep 17 00:00:00 2001 From: solenberg Date: Wed, 13 Apr 2016 09:07:30 -0700 Subject: [PATCH] Fix bug causing audio to stop being sent when AudioSendStreams are recreated. BUG=webrtc:5772 Review URL: https://codereview.webrtc.org/1881793006 Cr-Commit-Position: refs/heads/master@{#12347} --- webrtc/media/engine/webrtcvoiceengine.cc | 1 + .../engine/webrtcvoiceengine_unittest.cc | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc index 21f12105f1..cef7cdf2be 100644 --- a/webrtc/media/engine/webrtcvoiceengine.cc +++ b/webrtc/media/engine/webrtcvoiceengine.cc @@ -1121,6 +1121,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioSendStream RTC_DCHECK(!stream_); stream_ = call_->CreateAudioSendStream(config_); RTC_CHECK(stream_); + UpdateSendState(); } bool SendTelephoneEvent(int payload_type, int event, int duration_ms) { diff --git a/webrtc/media/engine/webrtcvoiceengine_unittest.cc b/webrtc/media/engine/webrtcvoiceengine_unittest.cc index f88b99ba10..1ed493b6d0 100644 --- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc +++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc @@ -2176,6 +2176,31 @@ TEST_F(WebRtcVoiceEngineTestFake, SendStateWithAndWithoutSource) { EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); } +// Test that SetSendParameters() does not alter a stream's send state. +TEST_F(WebRtcVoiceEngineTestFake, SendStateWhenStreamsAreRecreated) { + EXPECT_TRUE(SetupSendStream()); + EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); + + // Turn on sending. + channel_->SetSend(true); + EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); + + // Changing RTP header extensions will recreate the AudioSendStream. + send_parameters_.extensions.push_back( + cricket::RtpHeaderExtension(kRtpAudioLevelHeaderExtension, 12)); + EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); + EXPECT_TRUE(GetSendStream(kSsrc1).IsSending()); + + // Turn off sending. + channel_->SetSend(false); + EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); + + // Changing RTP header extensions will recreate the AudioSendStream. + send_parameters_.extensions.clear(); + EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); + EXPECT_FALSE(GetSendStream(kSsrc1).IsSending()); +} + // Test that we can create a channel and start playing out on it. TEST_F(WebRtcVoiceEngineTestFake, Playout) { EXPECT_TRUE(SetupRecvStream());