Reland "Enables/disables simulcast streams by allocating a bitrate of 0 to the spatial layer."
This is a reland of 18c4261339dc76b220e7c805e36b4ea6f3dd161d Original change's description: > Enables/disables simulcast streams by allocating a bitrate of 0 to the spatial layer. > > Creates VideoStreams & VideoCodec.simulcastStreams with an active field, and then allocates 0 bitrate to simulcast streams that are inactive. This turns off the encoder for specific simulcast streams. > > Bug: webrtc:8653 > Change-Id: Id93b03dcd8d1191a7d3300bd77882c8af96ee469 > Reviewed-on: https://webrtc-review.googlesource.com/37740 > Reviewed-by: Stefan Holmer <stefan@webrtc.org> > 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@{#21646} TBR=sprang@webrtc.org,stefan@webrtc.org,deadbeef@webrtc.org Bug: webrtc:8630 Change-Id: Ib3df6f9b7158bff362a7ec66fc57e368682c5846 Reviewed-on: https://webrtc-review.googlesource.com/40980 Reviewed-by: Seth Hampson <shampson@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Seth Hampson <shampson@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21688}
This commit is contained in:
@ -118,6 +118,7 @@ class VideoCodecInitializerTest : public ::testing::Test {
|
||||
stream.target_bitrate_bps = kDefaultTargetBitrateBps;
|
||||
stream.max_bitrate_bps = kDefaultMaxBitrateBps;
|
||||
stream.max_qp = kDefaultMaxQp;
|
||||
stream.active = true;
|
||||
return stream;
|
||||
}
|
||||
|
||||
@ -128,6 +129,7 @@ class VideoCodecInitializerTest : public ::testing::Test {
|
||||
stream.max_bitrate_bps = 1000000;
|
||||
stream.max_framerate = kScreenshareDefaultFramerate;
|
||||
stream.temporal_layer_thresholds_bps.push_back(kScreenshareTl0BitrateBps);
|
||||
stream.active = true;
|
||||
return stream;
|
||||
}
|
||||
|
||||
@ -155,6 +157,20 @@ TEST_F(VideoCodecInitializerTest, SingleStreamVp8Screenshare) {
|
||||
EXPECT_EQ(kDefaultTargetBitrateBps, bitrate_allocation.get_sum_bps());
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, SingleStreamVp8ScreenshareInactive) {
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 1, true);
|
||||
VideoStream inactive_stream = DefaultStream();
|
||||
inactive_stream.active = false;
|
||||
streams_.push_back(inactive_stream);
|
||||
EXPECT_TRUE(InitializeCodec());
|
||||
|
||||
BitrateAllocation bitrate_allocation = bitrate_allocator_out_->GetAllocation(
|
||||
kDefaultTargetBitrateBps, kDefaultFrameRate);
|
||||
EXPECT_EQ(1u, codec_out_.numberOfSimulcastStreams);
|
||||
EXPECT_EQ(1u, codec_out_.VP8()->numberOfTemporalLayers);
|
||||
EXPECT_EQ(0U, bitrate_allocation.get_sum_bps());
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, TemporalLayeredVp8Screenshare) {
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 2, true);
|
||||
streams_.push_back(DefaultScreenshareStream());
|
||||
@ -169,7 +185,7 @@ TEST_F(VideoCodecInitializerTest, TemporalLayeredVp8Screenshare) {
|
||||
EXPECT_EQ(kScreenshareTl0BitrateBps, bitrate_allocation.GetBitrate(0, 0));
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, SimlucastVp8Screenshare) {
|
||||
TEST_F(VideoCodecInitializerTest, SimulcastVp8Screenshare) {
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 2, 1, true);
|
||||
streams_.push_back(DefaultScreenshareStream());
|
||||
VideoStream video_stream = DefaultStream();
|
||||
@ -190,7 +206,31 @@ TEST_F(VideoCodecInitializerTest, SimlucastVp8Screenshare) {
|
||||
bitrate_allocation.GetSpatialLayerSum(1));
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, HighFpsSimlucastVp8Screenshare) {
|
||||
// Tests that when a video stream is inactive, then the bitrate allocation will
|
||||
// be 0 for that stream.
|
||||
TEST_F(VideoCodecInitializerTest, SimulcastVp8ScreenshareInactive) {
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 2, 1, true);
|
||||
streams_.push_back(DefaultScreenshareStream());
|
||||
VideoStream inactive_video_stream = DefaultStream();
|
||||
inactive_video_stream.active = false;
|
||||
inactive_video_stream.max_framerate = kScreenshareDefaultFramerate;
|
||||
streams_.push_back(inactive_video_stream);
|
||||
EXPECT_TRUE(InitializeCodec());
|
||||
|
||||
EXPECT_EQ(2u, codec_out_.numberOfSimulcastStreams);
|
||||
EXPECT_EQ(1u, codec_out_.VP8()->numberOfTemporalLayers);
|
||||
const uint32_t target_bitrate =
|
||||
streams_[0].target_bitrate_bps + streams_[1].target_bitrate_bps;
|
||||
BitrateAllocation bitrate_allocation = bitrate_allocator_out_->GetAllocation(
|
||||
target_bitrate, kScreenshareDefaultFramerate);
|
||||
EXPECT_EQ(static_cast<uint32_t>(streams_[0].max_bitrate_bps),
|
||||
bitrate_allocation.get_sum_bps());
|
||||
EXPECT_EQ(static_cast<uint32_t>(streams_[0].max_bitrate_bps),
|
||||
bitrate_allocation.GetSpatialLayerSum(0));
|
||||
EXPECT_EQ(0U, bitrate_allocation.GetSpatialLayerSum(1));
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, HighFpsSimulcastVp8Screenshare) {
|
||||
// Two simulcast streams, the lower one using legacy settings (two temporal
|
||||
// streams, 5fps), the higher one using 3 temporal streams and 30fps.
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 2, 3, true);
|
||||
|
Reference in New Issue
Block a user