Replace VP9 screen sharing.
- Remove referencing control from encoder wrapper. Use fixed temporal
prediction structure.
- Remove flexible mode from encoder wrapper. It only worked with
referencing control which this CL removes.
- Remove external framerate/bitrate controller. Keep codec's internal
frame dropping enabled at screen sharing.
- Use GetSvcConfig() to configure layering.
Bug: webrtc:9261
Change-Id: I355baa6aab7b98ac5028b3851d1f8ccc82a308e0
Reviewed-on: https://webrtc-review.googlesource.com/76801
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23311}
diff --git a/modules/video_coding/video_codec_initializer.cc b/modules/video_coding/video_codec_initializer.cc
index adc7f32..f122070 100644
--- a/modules/video_coding/video_codec_initializer.cc
+++ b/modules/video_coding/video_codec_initializer.cc
@@ -195,54 +195,46 @@
RTC_DCHECK_LE(video_codec.VP9()->numberOfTemporalLayers,
kMaxTemporalStreams);
- if (video_codec.mode == kScreensharing &&
- config.encoder_specific_settings) {
- video_codec.VP9()->flexibleMode = true;
- // For now VP9 screensharing use 1 temporal and 2 spatial layers.
- RTC_DCHECK_EQ(1, video_codec.VP9()->numberOfTemporalLayers);
- RTC_DCHECK_EQ(2, video_codec.VP9()->numberOfSpatialLayers);
+ RTC_DCHECK(config.spatial_layers.empty() ||
+ config.spatial_layers.size() ==
+ video_codec.VP9()->numberOfSpatialLayers);
+
+ std::vector<SpatialLayer> spatial_layers;
+ if (!config.spatial_layers.empty()) {
+ // Layering is set explicitly.
+ spatial_layers = config.spatial_layers;
} else {
- RTC_DCHECK(config.spatial_layers.empty() ||
- config.spatial_layers.size() ==
- video_codec.VP9()->numberOfSpatialLayers);
+ spatial_layers = GetSvcConfig(video_codec.width, video_codec.height,
+ video_codec.VP9()->numberOfSpatialLayers,
+ video_codec.VP9()->numberOfTemporalLayers,
+ video_codec.mode == kScreensharing);
- std::vector<SpatialLayer> spatial_layers;
- if (!config.spatial_layers.empty()) {
- // Layering is set explicitly.
- spatial_layers = config.spatial_layers;
- } else {
- spatial_layers =
- GetSvcConfig(video_codec.width, video_codec.height,
- video_codec.VP9()->numberOfSpatialLayers,
- video_codec.VP9()->numberOfTemporalLayers, false);
-
- const bool no_spatial_layering = (spatial_layers.size() == 1);
- if (no_spatial_layering) {
- // Use codec's bitrate limits.
- spatial_layers.back().minBitrate = video_codec.minBitrate;
- spatial_layers.back().maxBitrate = video_codec.maxBitrate;
- }
+ const bool no_spatial_layering = (spatial_layers.size() == 1);
+ if (no_spatial_layering) {
+ // Use codec's bitrate limits.
+ spatial_layers.back().minBitrate = video_codec.minBitrate;
+ spatial_layers.back().maxBitrate = video_codec.maxBitrate;
}
-
- RTC_DCHECK(!spatial_layers.empty());
- for (size_t i = 0; i < spatial_layers.size(); ++i) {
- video_codec.spatialLayers[i] = spatial_layers[i];
- }
-
- // Update layering settings.
- video_codec.VP9()->numberOfSpatialLayers =
- static_cast<unsigned char>(spatial_layers.size());
- RTC_DCHECK_GE(video_codec.VP9()->numberOfSpatialLayers, 1);
- RTC_DCHECK_LE(video_codec.VP9()->numberOfSpatialLayers,
- kMaxSpatialLayers);
-
- video_codec.VP9()->numberOfTemporalLayers = static_cast<unsigned char>(
- spatial_layers.back().numberOfTemporalLayers);
- RTC_DCHECK_GE(video_codec.VP9()->numberOfTemporalLayers, 1);
- RTC_DCHECK_LE(video_codec.VP9()->numberOfTemporalLayers,
- kMaxTemporalStreams);
}
+ RTC_DCHECK(!spatial_layers.empty());
+ for (size_t i = 0; i < spatial_layers.size(); ++i) {
+ video_codec.spatialLayers[i] = spatial_layers[i];
+ }
+
+ // Update layering settings.
+ video_codec.VP9()->numberOfSpatialLayers =
+ static_cast<unsigned char>(spatial_layers.size());
+ RTC_DCHECK_GE(video_codec.VP9()->numberOfSpatialLayers, 1);
+ RTC_DCHECK_LE(video_codec.VP9()->numberOfSpatialLayers,
+ kMaxSpatialLayers);
+
+ video_codec.VP9()->numberOfTemporalLayers = static_cast<unsigned char>(
+ spatial_layers.back().numberOfTemporalLayers);
+ RTC_DCHECK_GE(video_codec.VP9()->numberOfTemporalLayers, 1);
+ RTC_DCHECK_LE(video_codec.VP9()->numberOfTemporalLayers,
+ kMaxTemporalStreams);
+
break;
}
case kVideoCodecH264: {