From 264cf544434be9c77ccc3847d47ca293a56ec1dc Mon Sep 17 00:00:00 2001 From: Tommi Date: Mon, 9 Aug 2021 19:57:44 +0200 Subject: [PATCH] VideoSendStream: Don't disable the alive flag when updating layers. When implicit start/stop happens via activation/deactivation of layers occurs, don't change the state of the 'alive' flag since further activations following full de-activation need to be allowed to happen when Stop() has not been called. Bug: chromium:1234779 Change-Id: Ic3cae387990122eaa2f48de096ff9dafa7c34414 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/228242 Reviewed-by: Magnus Flodman Commit-Queue: Tommi Cr-Commit-Position: refs/heads/master@{#34698} --- video/video_send_stream.cc | 9 ++------- video/video_send_stream_tests.cc | 13 +++++++++++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc index a947af9068..c244d17077 100644 --- a/video/video_send_stream.cc +++ b/video/video_send_stream.cc @@ -208,14 +208,9 @@ void VideoSendStream::UpdateActiveSimulcastLayers( RTC_LOG(LS_INFO) << "UpdateActiveSimulcastLayers: " << active_layers_string.str(); - rtp_transport_queue_->PostTask(ToQueuedTask( - transport_queue_safety_, [this, active_layers, was_running = running_] { + rtp_transport_queue_->PostTask( + ToQueuedTask(transport_queue_safety_, [this, active_layers] { send_stream_.UpdateActiveSimulcastLayers(active_layers); - const bool running = rtp_video_sender_->IsActive(); - if (was_running != running) { - running ? transport_queue_safety_->SetAlive() - : transport_queue_safety_->SetNotAlive(); - } })); running_ = running; diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc index 85dbbafcec..8cb43136e5 100644 --- a/video/video_send_stream_tests.cc +++ b/video/video_send_stream_tests.cc @@ -2287,6 +2287,19 @@ TEST_F(VideoSendStreamTest, VideoSendStreamUpdateActiveSimulcastLayers) { }); EXPECT_TRUE(encoder.WaitBitrateChanged(false)); + // Re-activating a layer should resume sending and trigger a bitrate change. + GetVideoEncoderConfig()->simulcast_layers[0].active = true; + SendTask(RTC_FROM_HERE, task_queue(), [this]() { + GetVideoSendStream()->UpdateActiveSimulcastLayers({true, false}); + EXPECT_TRUE(GetVideoSendStream()->started()); + }); + EXPECT_TRUE(encoder.WaitBitrateChanged(true)); + + // Stop and clean up. + SendTask(RTC_FROM_HERE, task_queue(), + [this]() { GetVideoSendStream()->Stop(); }); + EXPECT_TRUE(encoder.WaitBitrateChanged(false)); + SendTask(RTC_FROM_HERE, task_queue(), [this]() { DestroyStreams(); DestroyCalls();