| Index: webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc
|
| diff --git a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc
|
| index feb8da9f28c43e935928f51c21384204bb2c66ef..aca4514279f8f3a6c08ad4b3ebc2bd94018d0a53 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc
|
| @@ -30,6 +30,8 @@ static const int kQpDeltaThresholdForSync = 8;
|
| const double ScreenshareLayers::kMaxTL0FpsReduction = 2.5;
|
| const double ScreenshareLayers::kAcceptableTargetOvershoot = 2.0;
|
|
|
| +constexpr int ScreenshareLayers::kMaxNumTemporalLayers;
|
| +
|
| // Since this is TL0 we only allow updating and predicting from the LAST
|
| // reference frame.
|
| const int ScreenshareLayers::kTl0Flags =
|
| @@ -55,8 +57,14 @@ webrtc::TemporalLayers* ScreenshareTemporalLayersFactory::Create(
|
| int simulcast_id,
|
| int num_temporal_layers,
|
| uint8_t initial_tl0_pic_idx) const {
|
| - webrtc::TemporalLayers* tl = new webrtc::ScreenshareLayers(
|
| - num_temporal_layers, rand(), webrtc::Clock::GetRealTimeClock());
|
| + webrtc::TemporalLayers* tl;
|
| + if (simulcast_id == 0) {
|
| + tl = new webrtc::ScreenshareLayers(num_temporal_layers, rand(),
|
| + webrtc::Clock::GetRealTimeClock());
|
| + } else {
|
| + RealTimeTemporalLayersFactory rt_tl_factory;
|
| + tl = rt_tl_factory.Create(simulcast_id, num_temporal_layers, rand());
|
| + }
|
| if (listener_)
|
| listener_->OnTemporalLayersCreated(simulcast_id, tl);
|
| return tl;
|
| @@ -66,7 +74,8 @@ ScreenshareLayers::ScreenshareLayers(int num_temporal_layers,
|
| uint8_t initial_tl0_pic_idx,
|
| Clock* clock)
|
| : clock_(clock),
|
| - number_of_temporal_layers_(num_temporal_layers),
|
| + number_of_temporal_layers_(
|
| + std::min(kMaxNumTemporalLayers, num_temporal_layers)),
|
| last_base_layer_sync_(false),
|
| tl0_pic_idx_(initial_tl0_pic_idx),
|
| active_layer_(-1),
|
| @@ -78,8 +87,8 @@ ScreenshareLayers::ScreenshareLayers(int num_temporal_layers,
|
| max_debt_bytes_(0),
|
| encode_framerate_(1000.0f, 1000.0f), // 1 second window, second scale.
|
| bitrate_updated_(false) {
|
| - RTC_CHECK_GT(num_temporal_layers, 0);
|
| - RTC_CHECK_LE(num_temporal_layers, 2);
|
| + RTC_CHECK_GT(number_of_temporal_layers_, 0);
|
| + RTC_CHECK_LE(number_of_temporal_layers_, kMaxNumTemporalLayers);
|
| }
|
|
|
| ScreenshareLayers::~ScreenshareLayers() {
|
|
|