mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 06:10:40 +01:00
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 <deadbeef@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Seth Hampson <shampson@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21831}
This commit is contained in:
parent
96d7f76036
commit
8fb22e71ee
1 changed files with 37 additions and 34 deletions
|
@ -284,6 +284,23 @@ class TestVp8Simulcast : public ::testing::Test {
|
|||
rate_allocator_->GetAllocation(bitrate_kbps * 1000, fps), fps);
|
||||
}
|
||||
|
||||
void RunActiveStreamsTest(const std::vector<bool> active_streams) {
|
||||
std::vector<FrameType> 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<bool> active_streams) {
|
||||
ASSERT_EQ(static_cast<int>(active_streams.size()),
|
||||
kNumberOfSimulcastStreams);
|
||||
|
@ -291,6 +308,10 @@ 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));
|
||||
}
|
||||
|
@ -526,40 +547,22 @@ class TestVp8Simulcast : public ::testing::Test {
|
|||
}
|
||||
|
||||
void TestActiveStreams() {
|
||||
const int kEnoughBitrateAllStreams =
|
||||
kMaxBitrates[0] + kMaxBitrates[1] + kMaxBitrates[2];
|
||||
std::vector<FrameType> 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<bool> 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));
|
||||
// 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});
|
||||
}
|
||||
|
||||
void SwitchingToOneStream(int width, int height) {
|
||||
|
|
Loading…
Reference in a new issue