For VP9 assume max number of spatial layers to simulate generic descriptor VP9 allows to increase number of spatial layers on delta frame, which is not supported by dependency descriptor. Thus to generate DD compatible generic header, simulator would set max number of spatial layers, while number of active spatial layers would be communicated with active_decode_target bitmask Bug: webrtc:14042 Change-Id: I4da63fa7c38b0f17758a7a6243640f444470b40c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265164 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37151}
diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc index 1930036..1f55eb8 100644 --- a/call/rtp_video_sender.cc +++ b/call/rtp_video_sender.cc
@@ -378,9 +378,6 @@ field_trials_.Lookup("WebRTC-Video-UseFrameRateForOverhead"), "Enabled")), has_packet_feedback_(TransportSeqNumExtensionConfigured(rtp_config)), - simulate_generic_structure_(absl::StartsWith( - field_trials_.Lookup("WebRTC-GenericCodecDependencyDescriptor"), - "Enabled")), active_(false), fec_controller_(std::move(fec_controller)), fec_allowed_(true), @@ -603,32 +600,10 @@ RTPSenderVideo& sender_video = *rtp_streams_[stream_index].sender_video; if (codec_specific_info && codec_specific_info->template_structure) { sender_video.SetVideoStructure(&*codec_specific_info->template_structure); - } else if (codec_specific_info && - codec_specific_info->codecType == kVideoCodecVP8) { - FrameDependencyStructure structure = - RtpPayloadParams::MinimalisticStructure(/*num_spatial_layers=*/1, - kMaxTemporalStreams); - sender_video.SetVideoStructure(&structure); - } else if (codec_specific_info && - codec_specific_info->codecType == kVideoCodecVP9) { - const CodecSpecificInfoVP9& vp9 = codec_specific_info->codecSpecific.VP9; - - FrameDependencyStructure structure = - RtpPayloadParams::MinimalisticStructure(vp9.num_spatial_layers, - kMaxTemporalStreams); - if (vp9.ss_data_available && vp9.spatial_layer_resolution_present) { - for (size_t i = 0; i < vp9.num_spatial_layers; ++i) { - structure.resolutions.emplace_back(vp9.width[i], vp9.height[i]); - } - } - sender_video.SetVideoStructure(&structure); - } else if (simulate_generic_structure_ && codec_specific_info && - codec_specific_info->codecType == kVideoCodecGeneric) { - FrameDependencyStructure structure = - RtpPayloadParams::MinimalisticStructure( - /*num_spatial_layers=*/1, - /*num_temporal_layers=*/1); - sender_video.SetVideoStructure(&structure); + } else if (absl::optional<FrameDependencyStructure> structure = + params_[stream_index].GenericStructure( + codec_specific_info)) { + sender_video.SetVideoStructure(&*structure); } else { sender_video.SetVideoStructure(nullptr); }