Only enable conference mode simulcast allocations with flag enabled
Non-conference mode simulcast screenshares were mistakenly using the conference mode semantics in the simulcast rate allocator, which broke spec compliant usage in some situation. This behavior should only be used when explicitly using the SDP entry "a=x-google-flag:conference" in both offer and answer. Bug: webrtc:11310, chromium:1093819 Change-Id: Ibcba75c88a8405d60467546b33977a782e04e469 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179081 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Commit-Queue: Florent Castelli <orphis@webrtc.org> Cr-Commit-Position: refs/heads/master@{#31828}
This commit is contained in:

committed by
Commit Bot

parent
c878d68282
commit
32ca95145c
@ -42,7 +42,8 @@ static const uint32_t kDefaultTargetBitrateBps = 2000000;
|
||||
static const uint32_t kDefaultMaxBitrateBps = 2000000;
|
||||
static const uint32_t kDefaultMinTransmitBitrateBps = 400000;
|
||||
static const int kDefaultMaxQp = 48;
|
||||
static const uint32_t kScreenshareTl0BitrateBps = 200000;
|
||||
static const uint32_t kScreenshareTl0BitrateBps = 120000;
|
||||
static const uint32_t kScreenshareConferenceTl0BitrateBps = 200000;
|
||||
static const uint32_t kScreenshareCodecTargetBitrateBps = 200000;
|
||||
static const uint32_t kScreenshareDefaultFramerate = 5;
|
||||
// Bitrates for the temporal layers of the higher screenshare simulcast stream.
|
||||
@ -126,7 +127,7 @@ class VideoCodecInitializerTest : public ::testing::Test {
|
||||
VideoStream DefaultScreenshareStream() {
|
||||
VideoStream stream = DefaultStream();
|
||||
stream.min_bitrate_bps = 30000;
|
||||
stream.target_bitrate_bps = kScreenshareTl0BitrateBps;
|
||||
stream.target_bitrate_bps = kScreenshareCodecTargetBitrateBps;
|
||||
stream.max_bitrate_bps = 1000000;
|
||||
stream.max_framerate = kScreenshareDefaultFramerate;
|
||||
stream.num_temporal_layers = 2;
|
||||
@ -174,6 +175,23 @@ TEST_F(VideoCodecInitializerTest, SingleStreamVp8ScreenshareInactive) {
|
||||
EXPECT_EQ(0U, bitrate_allocation.get_sum_bps());
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, TemporalLayeredVp8ScreenshareConference) {
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 2, true);
|
||||
streams_.push_back(DefaultScreenshareStream());
|
||||
EXPECT_TRUE(InitializeCodec());
|
||||
bitrate_allocator_->SetLegacyConferenceMode(true);
|
||||
|
||||
EXPECT_EQ(1u, codec_out_.numberOfSimulcastStreams);
|
||||
EXPECT_EQ(2u, codec_out_.VP8()->numberOfTemporalLayers);
|
||||
VideoBitrateAllocation bitrate_allocation =
|
||||
bitrate_allocator_->Allocate(VideoBitrateAllocationParameters(
|
||||
kScreenshareCodecTargetBitrateBps, kScreenshareDefaultFramerate));
|
||||
EXPECT_EQ(kScreenshareCodecTargetBitrateBps,
|
||||
bitrate_allocation.get_sum_bps());
|
||||
EXPECT_EQ(kScreenshareConferenceTl0BitrateBps,
|
||||
bitrate_allocation.GetBitrate(0, 0));
|
||||
}
|
||||
|
||||
TEST_F(VideoCodecInitializerTest, TemporalLayeredVp8Screenshare) {
|
||||
SetUpFor(VideoCodecType::kVideoCodecVP8, 1, 2, true);
|
||||
streams_.push_back(DefaultScreenshareStream());
|
||||
|
Reference in New Issue
Block a user