From cac9a55ddf0ba33f7407f707b69d66d01c49073b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= Date: Fri, 24 Mar 2023 13:10:04 +0100 Subject: [PATCH] Add legacy SVC test that all layers can be inactivated. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A larger version of this test was previously landed but got reverted due to failures only happening on the importer bot (not on the CQ or locally). This is a smaller version of the test that does something we should support: being able to inactive all encodings of a VP9 legacy SVC stream. Let's land and see if any issues are reproducible (expecting revert). Bug: webrtc:15033 Change-Id: I88da1facf4ef05299f3392b86a0e3df029ebe264 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/299006 Commit-Queue: Henrik Boström Reviewed-by: Evan Shrubsole Cr-Commit-Position: refs/heads/main@{#39684} --- pc/peer_connection_simulcast_unittest.cc | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/pc/peer_connection_simulcast_unittest.cc b/pc/peer_connection_simulcast_unittest.cc index 41e2c81100..f47ed3808b 100644 --- a/pc/peer_connection_simulcast_unittest.cc +++ b/pc/peer_connection_simulcast_unittest.cc @@ -1557,6 +1557,43 @@ TEST_F(PeerConnectionSimulcastWithMediaFlowTests, EXPECT_FALSE(parameters.encodings[2].scalability_mode.has_value()); } +TEST_F(PeerConnectionSimulcastWithMediaFlowTests, + SendingThreeEncodings_VP9_LegacySVC_AllLayersInactive) { + rtc::scoped_refptr local_pc_wrapper = CreatePc(); + rtc::scoped_refptr remote_pc_wrapper = CreatePc(); + ExchangeIceCandidates(local_pc_wrapper, remote_pc_wrapper); + + std::vector layers = + CreateLayers({"f", "h", "q"}, /*active=*/true); + rtc::scoped_refptr transceiver = + AddTransceiverWithSimulcastLayers(local_pc_wrapper, remote_pc_wrapper, + layers); + std::vector codecs = + GetCapabilitiesAndRestrictToCodec(local_pc_wrapper, "VP9"); + transceiver->SetCodecPreferences(codecs); + + // Legacy SVC mode and all layers inactive. + rtc::scoped_refptr sender = transceiver->sender(); + RtpParameters parameters = sender->GetParameters(); + ASSERT_EQ(parameters.encodings.size(), 3u); + parameters.encodings[0].active = false; + parameters.encodings[1].active = false; + parameters.encodings[2].active = false; + sender->SetParameters(parameters); + + NegotiateWithSimulcastTweaks(local_pc_wrapper, remote_pc_wrapper, layers); + local_pc_wrapper->WaitForConnection(); + remote_pc_wrapper->WaitForConnection(); + + // Ensure no media is flowing (1 second should be enough). + rtc::Thread::Current()->SleepMs(1000); + rtc::scoped_refptr report = GetStats(local_pc_wrapper); + std::vector outbound_rtps = + report->GetStatsOfType(); + ASSERT_THAT(outbound_rtps, SizeIs(1u)); + EXPECT_EQ(*outbound_rtps[0]->bytes_sent, 0u); +} + TEST_F(PeerConnectionSimulcastWithMediaFlowTests, SendingThreeEncodings_VP9_StandardL1T3_AllLayersInactive) { rtc::scoped_refptr local_pc_wrapper = CreatePc();