From 3bb74f38000fbe247c10e4fd95ca76a43a8ca93a Mon Sep 17 00:00:00 2001 From: Johannes Kron Date: Thu, 19 Aug 2021 10:34:32 +0200 Subject: [PATCH] Change VideoDecoderFactory::QueryCodecSupport to use reference_scaling All decoders are supposed to be able to decode all valid bitstreams that can be produced by an encoder. In the cases where this is not the case, reference_scaling better captures the cause of this than scalability_mode which was used initially. Bug: chromium:1187565 Change-Id: I21174077badf0fb9d90b1b58f003edac5b8ee0f2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/229184 Reviewed-by: Niels Moller Reviewed-by: Danil Chapovalov Commit-Queue: Johannes Kron Cr-Commit-Position: refs/heads/master@{#34800} --- api/video_codecs/video_decoder_factory.h | 25 ++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/api/video_codecs/video_decoder_factory.h b/api/video_codecs/video_decoder_factory.h index ef908099f1..030955352f 100644 --- a/api/video_codecs/video_decoder_factory.h +++ b/api/video_codecs/video_decoder_factory.h @@ -39,10 +39,27 @@ class RTC_EXPORT VideoDecoderFactory { // Query whether the specifed format is supported or not and if it will be // power efficient, which is currently interpreted as if there is support for // hardware acceleration. - // See https://w3c.github.io/webrtc-svc/#scalabilitymodes* for a specification - // of valid values for `scalability_mode`. - // NOTE: QueryCodecSupport is currently an experimental feature that is - // subject to change without notice. + // The parameter `reference_scaling` is used to query support for prediction + // across spatial layers. An example where support for reference scaling is + // needed is if the video stream is produced with a scalability mode that has + // a dependency between the spatial layers. See + // https://w3c.github.io/webrtc-svc/#scalabilitymodes* for a specification of + // different scalabilty modes. NOTE: QueryCodecSupport is currently an + // experimental feature that is subject to change without notice. + virtual CodecSupport QueryCodecSupport(const SdpVideoFormat& format, + bool reference_scaling) const { + // Default implementation, query for supported formats and check if the + // specified format is supported. Returns false if `reference_scaling` is + // true. + CodecSupport codec_support; + codec_support.is_supported = + !reference_scaling && format.IsCodecInList(GetSupportedFormats()); + return codec_support; + } + + // TODO(kron): This function is deprecated and will be removed ASAP once + // downstream projects are updated to use `reference_scaling` instead of + // `scalability_mode`. virtual CodecSupport QueryCodecSupport( const SdpVideoFormat& format, absl::optional scalability_mode) const {