From 6ade76d69d857c98b82f814f080e9990b7fcfe6a Mon Sep 17 00:00:00 2001 From: Oleh Prypin Date: Wed, 31 Jan 2018 22:11:06 +0000 Subject: [PATCH] Revert "Updates tests for turning simulcast streams on/off." MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 8fb22e71ee9bd77676838c5723f7e89a74a64aa9. Reason for revert: breaks downstream projects Original change's description: > Updates tests for turning simulcast streams on/off. > > Due to libvpx we were restricted to always turning the low simulcast > stream on, or else the encoder would always label the active streams' > encoded frames as key frames. Now that libvpx has been updated and > rolled in, this change updates tests to reflect that it is working. > > Bug: webrtc:8653 > Change-Id: I065ef817ace2292605e27e135802cf4a3e90647e > Reviewed-on: https://webrtc-review.googlesource.com/46340 > Reviewed-by: Taylor Brandstetter > Reviewed-by: Erik Språng > Commit-Queue: Seth Hampson > Cr-Commit-Position: refs/heads/master@{#21831} TBR=deadbeef@webrtc.org,sprang@webrtc.org,shampson@webrtc.org Change-Id: If14074a7fc56c83b75584d8e9a6a913a40514bad No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:8653 Reviewed-on: https://webrtc-review.googlesource.com/46840 Reviewed-by: Oleh Prypin Commit-Queue: Oleh Prypin Cr-Commit-Position: refs/heads/master@{#21832} --- .../codecs/vp8/simulcast_test_utility.h | 71 +++++++++---------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/modules/video_coding/codecs/vp8/simulcast_test_utility.h b/modules/video_coding/codecs/vp8/simulcast_test_utility.h index 00cdb0cd7b..e13bad4c85 100644 --- a/modules/video_coding/codecs/vp8/simulcast_test_utility.h +++ b/modules/video_coding/codecs/vp8/simulcast_test_utility.h @@ -284,23 +284,6 @@ class TestVp8Simulcast : public ::testing::Test { rate_allocator_->GetAllocation(bitrate_kbps * 1000, fps), fps); } - void RunActiveStreamsTest(const std::vector active_streams) { - std::vector frame_types(kNumberOfSimulcastStreams, - kVideoFrameDelta); - UpdateActiveStreams(active_streams); - // Set sufficient bitrate for all streams so we can test active without - // bitrate being an issue. - SetRates(kMaxBitrates[0] + kMaxBitrates[1] + kMaxBitrates[2], 30); - - ExpectStreams(kVideoFrameKey, active_streams); - input_frame_->set_timestamp(input_frame_->timestamp() + 3000); - EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, &frame_types)); - - ExpectStreams(kVideoFrameDelta, active_streams); - input_frame_->set_timestamp(input_frame_->timestamp() + 3000); - EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, &frame_types)); - } - void UpdateActiveStreams(const std::vector active_streams) { ASSERT_EQ(static_cast(active_streams.size()), kNumberOfSimulcastStreams); @@ -308,10 +291,6 @@ class TestVp8Simulcast : public ::testing::Test { settings_.simulcastStream[i].active = active_streams[i]; } // Re initialize the allocator and encoder with the new settings. - // TODO(bugs.webrtc.org/8807): Currently, we do a full "hard" - // reconfiguration of the allocator and encoder. When the video bitrate - // allocator has support for updating active streams without a - // reinitialization, we can just call that here instead. SetUpRateAllocator(); EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200)); } @@ -547,22 +526,40 @@ class TestVp8Simulcast : public ::testing::Test { } void TestActiveStreams() { - // All streams on. - RunActiveStreamsTest({true, true, true}); - // All streams off. - RunActiveStreamsTest({false, false, false}); - // Low stream off. - RunActiveStreamsTest({false, true, true}); - // Middle stream off. - RunActiveStreamsTest({true, false, true}); - // High stream off. - RunActiveStreamsTest({true, true, false}); - // Only low stream turned on. - RunActiveStreamsTest({true, false, false}); - // Only middle stream turned on. - RunActiveStreamsTest({false, true, false}); - // Only high stream turned on. - RunActiveStreamsTest({false, false, true}); + const int kEnoughBitrateAllStreams = + kMaxBitrates[0] + kMaxBitrates[1] + kMaxBitrates[2]; + std::vector frame_types(kNumberOfSimulcastStreams, + kVideoFrameDelta); + // TODO(shampson): Currently turning off the base stream causes unexpected + // behavior in the libvpx encoder. The libvpx encoder labels key frames + // based upon the base stream. If the base stream is never enabled, it + // will continue to spit out encoded images labeled as key frames for the + // other streams that are enabled. Once this is fixed in libvpx, update this + // test to reflect that change. + + // Only turn on the the base stream. + std::vector active_streams = {true, false, false}; + UpdateActiveStreams(active_streams); + SetRates(kEnoughBitrateAllStreams, 30); + ExpectStreams(kVideoFrameKey, active_streams); + input_frame_->set_timestamp(input_frame_->timestamp() + 3000); + EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, &frame_types)); + + ExpectStreams(kVideoFrameDelta, active_streams); + input_frame_->set_timestamp(input_frame_->timestamp() + 3000); + EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, &frame_types)); + + // Turn off only the middle stream. + active_streams = {true, false, true}; + UpdateActiveStreams(active_streams); + SetRates(kEnoughBitrateAllStreams, 30); + ExpectStreams(kVideoFrameKey, active_streams); + input_frame_->set_timestamp(input_frame_->timestamp() + 3000); + EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, &frame_types)); + + ExpectStreams(kVideoFrameDelta, active_streams); + input_frame_->set_timestamp(input_frame_->timestamp() + 3000); + EXPECT_EQ(0, encoder_->Encode(*input_frame_, NULL, &frame_types)); } void SwitchingToOneStream(int width, int height) {