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)}; }