From 98c78cdd20215e5fb9b429e4a136f477c7a4b445 Mon Sep 17 00:00:00 2001 From: philipel Date: Thu, 14 Jul 2022 16:52:32 +0200 Subject: [PATCH] VideoEncoderFactoryTemplate cleanup. Bug: webrtc:13573 Change-Id: Id70e64adba6c5d76132dc0edb0c93937e3e894f8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/268542 Reviewed-by: Tomas Gunnarsson Commit-Queue: Philip Eliasson Cr-Commit-Position: refs/heads/main@{#37524} --- .../video_encoder_factory_template.h | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/api/video_codecs/video_encoder_factory_template.h b/api/video_codecs/video_encoder_factory_template.h index b167ccdcea..643096dbbb 100644 --- a/api/video_codecs/video_encoder_factory_template.h +++ b/api/video_codecs/video_encoder_factory_template.h @@ -46,9 +46,7 @@ template class VideoEncoderFactoryTemplate : public VideoEncoderFactory { public: std::vector GetSupportedFormats() const override { - std::vector formats; - GetSupportedFormatsInternal(formats); - return formats; + return GetSupportedFormatsInternal(); } std::unique_ptr CreateVideoEncoder( @@ -86,17 +84,20 @@ class VideoEncoderFactoryTemplate : public VideoEncoderFactory { } template - void GetSupportedFormatsInternal(std::vector& formats) const { + std::vector GetSupportedFormatsInternal() const { auto supported_formats = V::SupportedFormats(); - for (const auto& format : supported_formats) { - if (!IsFormatInList(format, formats)) { - formats.push_back(format); + + if constexpr (sizeof...(Vs) > 0) { + // Supported formats may overlap between implementations, so duplicates + // should be filtered out. + for (const auto& other_format : GetSupportedFormatsInternal()) { + if (!IsFormatInList(other_format, supported_formats)) { + supported_formats.push_back(other_format); + } } } - if constexpr (sizeof...(Vs) > 0) { - return GetSupportedFormatsInternal(formats); - } + return supported_formats; } template