diff --git a/webrtc/audio/audio_send_stream.cc b/webrtc/audio/audio_send_stream.cc index f8ee3ab565..36ad63d32e 100644 --- a/webrtc/audio/audio_send_stream.cc +++ b/webrtc/audio/audio_send_stream.cc @@ -171,7 +171,7 @@ void AudioSendStream::ConfigureStream( // Transport sequence number if (first_time || new_ids.transport_sequence_number != old_ids.transport_sequence_number) { - if (old_ids.transport_sequence_number) { + if (!first_time) { channel_proxy->ResetSenderCongestionControlObjects(); stream->bandwidth_observer_.reset(); } diff --git a/webrtc/audio/audio_send_stream_unittest.cc b/webrtc/audio/audio_send_stream_unittest.cc index efc18d127d..b685cfbf01 100644 --- a/webrtc/audio/audio_send_stream_unittest.cc +++ b/webrtc/audio/audio_send_stream_unittest.cc @@ -174,10 +174,7 @@ struct ConfigHelper { stream_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId)); if (audio_bwe_enabled) { - stream_config_.rtp.extensions.push_back( - RtpExtension(RtpExtension::kTransportSequenceNumberUri, - kTransportSequenceNumberId)); - stream_config_.send_codec_spec->transport_cc_enabled = true; + AddBweToConfig(&stream_config_); } stream_config_.encoder_factory = SetupEncoderFactoryMock(); stream_config_.min_bitrate_bps = 10000; @@ -197,6 +194,13 @@ struct ConfigHelper { RtcEventLog* event_log() { return &event_log_; } MockVoiceEngine* voice_engine() { return &voice_engine_; } + static void AddBweToConfig(AudioSendStream::Config* config) { + config->rtp.extensions.push_back( + RtpExtension(RtpExtension::kTransportSequenceNumberUri, + kTransportSequenceNumberId)); + config->send_codec_spec->transport_cc_enabled = true; + } + void SetupDefaultChannelProxy(bool audio_bwe_enabled) { using testing::StrEq; channel_proxy_ = new testing::StrictMock(); @@ -541,5 +545,28 @@ TEST(AudioSendStreamTest, DontRecreateEncoder) { send_stream.Reconfigure(stream_config); } +TEST(AudioSendStreamTest, ReconfigureTransportCcResetsFirst) { + ConfigHelper helper(false, true); + internal::AudioSendStream send_stream( + helper.config(), helper.audio_state(), helper.worker_queue(), + helper.transport(), helper.bitrate_allocator(), helper.event_log(), + helper.rtcp_rtt_stats(), rtc::Optional()); + auto new_config = helper.config(); + ConfigHelper::AddBweToConfig(&new_config); + EXPECT_CALL(*helper.channel_proxy(), + EnableSendTransportSequenceNumber(kTransportSequenceNumberId)) + .Times(1); + { + ::testing::InSequence seq; + EXPECT_CALL(*helper.channel_proxy(), ResetSenderCongestionControlObjects()) + .Times(1); + EXPECT_CALL(*helper.channel_proxy(), RegisterSenderCongestionControlObjects( + helper.transport(), Ne(nullptr))) + .Times(1); + } + send_stream.Reconfigure(new_config); +} + + } // namespace test } // namespace webrtc