From 02bfcf513280188ac8fb2280bdb9c680f9c8cbfd Mon Sep 17 00:00:00 2001 From: philipel Date: Wed, 13 Jul 2022 11:07:07 +0200 Subject: [PATCH] Compare only SdpVideoFormat::name and SdpVideoFormat::parameters in the VideoEncoderFactoryTemplate. Since https://webrtc-review.googlesource.com/c/src/+/267780 supported scalability modes are also used to compare for equality between SdpVideoFormats(?). Bug: webrtc:14267, webrtc:13573 Change-Id: I2f3c2fca93bac6fadd222f776f672c9bd3f1de0a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/268304 Reviewed-by: Tomas Gunnarsson Commit-Queue: Philip Eliasson Cr-Commit-Position: refs/heads/main@{#37510} --- api/video_codecs/BUILD.gn | 2 ++ .../video_encoder_factory_template.h | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn index 4c91482afb..872e16466f 100644 --- a/api/video_codecs/BUILD.gn +++ b/api/video_codecs/BUILD.gn @@ -139,8 +139,10 @@ rtc_source_set("video_encoder_factory_template") { deps = [ ":video_codecs_api", + "../../api:array_view", "../../modules/video_coding/svc:scalability_mode_util", ] + absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ] } diff --git a/api/video_codecs/video_encoder_factory_template.h b/api/video_codecs/video_encoder_factory_template.h index 4913039d04..b167ccdcea 100644 --- a/api/video_codecs/video_encoder_factory_template.h +++ b/api/video_codecs/video_encoder_factory_template.h @@ -16,6 +16,7 @@ #include #include "absl/algorithm/container.h" +#include "api/array_view.h" #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" #include "modules/video_coding/svc/scalability_mode_util.h" @@ -62,9 +63,14 @@ class VideoEncoderFactoryTemplate : public VideoEncoderFactory { } private: - template - bool IsFormatSupported(const SdpVideoFormat& format) const { - return absl::c_count(V::SupportedFormats(), format) > 0; + bool IsFormatInList( + const SdpVideoFormat& format, + rtc::ArrayView supported_formats) const { + return absl::c_any_of( + supported_formats, [&](const SdpVideoFormat& supported_format) { + return supported_format.name == format.name && + supported_format.parameters == format.parameters; + }); } template @@ -83,7 +89,7 @@ class VideoEncoderFactoryTemplate : public VideoEncoderFactory { void GetSupportedFormatsInternal(std::vector& formats) const { auto supported_formats = V::SupportedFormats(); for (const auto& format : supported_formats) { - if (absl::c_count(formats, format) == 0) { + if (!IsFormatInList(format, formats)) { formats.push_back(format); } } @@ -96,7 +102,7 @@ class VideoEncoderFactoryTemplate : public VideoEncoderFactory { template std::unique_ptr CreateVideoEncoderInternal( const SdpVideoFormat& format) { - if (IsFormatSupported(format)) { + if (IsFormatInList(format, V::SupportedFormats())) { return V::CreateEncoder(format); } @@ -111,7 +117,7 @@ class VideoEncoderFactoryTemplate : public VideoEncoderFactory { CodecSupport QueryCodecSupportInternal( const SdpVideoFormat& format, const absl::optional& scalability_mode) const { - if (IsFormatSupported(format)) { + if (IsFormatInList(format, V::SupportedFormats())) { return {.is_supported = IsScalabilityModeSupported(scalability_mode)}; }