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}
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index 21f1210..cef7cdf 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -1121,6 +1121,7 @@
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 f88b99b..1ed493b 100644
--- a/webrtc/media/engine/webrtcvoiceengine_unittest.cc
+++ b/webrtc/media/engine/webrtcvoiceengine_unittest.cc
@@ -2176,6 +2176,31 @@
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());