mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 14:20:45 +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);
|
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) {
|
void UpdateActiveStreams(const std::vector<bool> active_streams) {
|
||||||
ASSERT_EQ(static_cast<int>(active_streams.size()),
|
ASSERT_EQ(static_cast<int>(active_streams.size()),
|
||||||
kNumberOfSimulcastStreams);
|
kNumberOfSimulcastStreams);
|
||||||
|
@ -291,6 +308,10 @@ class TestVp8Simulcast : public ::testing::Test {
|
||||||
settings_.simulcastStream[i].active = active_streams[i];
|
settings_.simulcastStream[i].active = active_streams[i];
|
||||||
}
|
}
|
||||||
// Re initialize the allocator and encoder with the new settings.
|
// 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();
|
SetUpRateAllocator();
|
||||||
EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200));
|
EXPECT_EQ(0, encoder_->InitEncode(&settings_, 1, 1200));
|
||||||
}
|
}
|
||||||
|
@ -526,40 +547,22 @@ class TestVp8Simulcast : public ::testing::Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestActiveStreams() {
|
void TestActiveStreams() {
|
||||||
const int kEnoughBitrateAllStreams =
|
// All streams on.
|
||||||
kMaxBitrates[0] + kMaxBitrates[1] + kMaxBitrates[2];
|
RunActiveStreamsTest({true, true, true});
|
||||||
std::vector<FrameType> frame_types(kNumberOfSimulcastStreams,
|
// All streams off.
|
||||||
kVideoFrameDelta);
|
RunActiveStreamsTest({false, false, false});
|
||||||
// TODO(shampson): Currently turning off the base stream causes unexpected
|
// Low stream off.
|
||||||
// behavior in the libvpx encoder. The libvpx encoder labels key frames
|
RunActiveStreamsTest({false, true, true});
|
||||||
// based upon the base stream. If the base stream is never enabled, it
|
// Middle stream off.
|
||||||
// will continue to spit out encoded images labeled as key frames for the
|
RunActiveStreamsTest({true, false, true});
|
||||||
// other streams that are enabled. Once this is fixed in libvpx, update this
|
// High stream off.
|
||||||
// test to reflect that change.
|
RunActiveStreamsTest({true, true, false});
|
||||||
|
// Only low stream turned on.
|
||||||
// Only turn on the the base stream.
|
RunActiveStreamsTest({true, false, false});
|
||||||
std::vector<bool> active_streams = {true, false, false};
|
// Only middle stream turned on.
|
||||||
UpdateActiveStreams(active_streams);
|
RunActiveStreamsTest({false, true, false});
|
||||||
SetRates(kEnoughBitrateAllStreams, 30);
|
// Only high stream turned on.
|
||||||
ExpectStreams(kVideoFrameKey, active_streams);
|
RunActiveStreamsTest({false, false, true});
|
||||||
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) {
|
void SwitchingToOneStream(int width, int height) {
|
||||||
|
|
Loading…
Reference in a new issue