| 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 d217bdbed7d78cba8c179670e01a44fd43ac8fbd..6bfd03fb50b9abb8500301aa6beced6945231b5a 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc
|
| @@ -78,7 +78,8 @@ ScreenshareLayers::~ScreenshareLayers() {
|
| UpdateHistograms();
|
| }
|
|
|
| -int ScreenshareLayers::CurrentLayerId() const {
|
| +int ScreenshareLayers::GetTemporalLayerId(
|
| + const TemporalLayers::FrameConfig& tl_config) const {
|
| // Codec does not use temporal layers for screenshare.
|
| return 0;
|
| }
|
| @@ -87,19 +88,20 @@ uint8_t ScreenshareLayers::Tl0PicIdx() const {
|
| return tl0_pic_idx_;
|
| }
|
|
|
| -TemporalReferences ScreenshareLayers::UpdateLayerConfig(uint32_t timestamp) {
|
| +TemporalLayers::FrameConfig ScreenshareLayers::UpdateLayerConfig(
|
| + uint32_t timestamp) {
|
| if (number_of_temporal_layers_ <= 1) {
|
| // No flags needed for 1 layer screenshare.
|
| // TODO(pbos): Consider updating only last, and not all buffers.
|
| - return TemporalReferences(kReferenceAndUpdate, kReferenceAndUpdate,
|
| - kReferenceAndUpdate);
|
| + return TemporalLayers::FrameConfig(kReferenceAndUpdate, kReferenceAndUpdate,
|
| + kReferenceAndUpdate);
|
| }
|
|
|
| const int64_t now_ms = clock_->TimeInMilliseconds();
|
| if (target_framerate_.value_or(0) > 0 &&
|
| encode_framerate_.Rate(now_ms).value_or(0) > *target_framerate_) {
|
| // Max framerate exceeded, drop frame.
|
| - return TemporalReferences(kNone, kNone, kNone);
|
| + return TemporalLayers::FrameConfig(kNone, kNone, kNone);
|
| }
|
|
|
| if (stats_.first_frame_time_ms_ == -1)
|
| @@ -165,21 +167,23 @@ TemporalReferences ScreenshareLayers::UpdateLayerConfig(uint32_t timestamp) {
|
| // layers.
|
| switch (layer_state) {
|
| case kDrop:
|
| - return TemporalReferences(kNone, kNone, kNone);
|
| + return TemporalLayers::FrameConfig(kNone, kNone, kNone);
|
| case kTl0:
|
| // TL0 only references and updates 'last'.
|
| - return TemporalReferences(kReferenceAndUpdate, kNone, kNone);
|
| + return TemporalLayers::FrameConfig(kReferenceAndUpdate, kNone, kNone);
|
| case kTl1:
|
| // TL1 references both 'last' and 'golden' but only updates 'golden'.
|
| - return TemporalReferences(kReference, kReferenceAndUpdate, kNone);
|
| + return TemporalLayers::FrameConfig(kReference, kReferenceAndUpdate,
|
| + kNone);
|
| case kTl1Sync:
|
| // Predict from only TL0 to allow participants to switch to the high
|
| // bitrate stream. Updates 'golden' so that TL1 can continue to refer to
|
| // and update 'golden' from this point on.
|
| - return TemporalReferences(kReference, kUpdate, kNone, kLayerSync);
|
| + return TemporalLayers::FrameConfig(kReference, kUpdate, kNone,
|
| + kLayerSync);
|
| }
|
| RTC_NOTREACHED();
|
| - return TemporalReferences(kNone, kNone, kNone);
|
| + return TemporalLayers::FrameConfig(kNone, kNone, kNone);
|
| }
|
|
|
| std::vector<uint32_t> ScreenshareLayers::OnRatesUpdated(int bitrate_kbps,
|
| @@ -250,15 +254,19 @@ void ScreenshareLayers::FrameEncoded(unsigned int size, int qp) {
|
| }
|
| }
|
|
|
| -void ScreenshareLayers::PopulateCodecSpecific(bool frame_is_keyframe,
|
| - CodecSpecificInfoVP8* vp8_info,
|
| - uint32_t timestamp) {
|
| +void ScreenshareLayers::PopulateCodecSpecific(
|
| + bool frame_is_keyframe,
|
| + const TemporalLayers::FrameConfig& tl_config,
|
| + CodecSpecificInfoVP8* vp8_info,
|
| + uint32_t timestamp) {
|
| int64_t unwrapped_timestamp = time_wrap_handler_.Unwrap(timestamp);
|
| if (number_of_temporal_layers_ == 1) {
|
| vp8_info->temporalIdx = kNoTemporalIdx;
|
| vp8_info->layerSync = false;
|
| vp8_info->tl0PicIdx = kNoTl0PicIdx;
|
| } else {
|
| + // TODO(pbos): Add active_layer_ to TemporalLayers::FrameConfig (as
|
| + // pattern_idx) and make function const.
|
| RTC_DCHECK_NE(-1, active_layer_);
|
| vp8_info->temporalIdx = active_layer_;
|
| if (frame_is_keyframe) {
|
|
|