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}
This commit is contained in:
committed by
Commit Bot
parent
21219a0e43
commit
be71a1ee08
@ -195,54 +195,46 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec(
|
||||
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: {
|
||||
|
||||
Reference in New Issue
Block a user