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());