From 44437d35cdcf4df0c76cdd0acc9822be26276445 Mon Sep 17 00:00:00 2001 From: philipel Date: Fri, 31 Mar 2023 16:36:12 +0200 Subject: [PATCH] Replace BuiltinVideo{Encoder,Decoder}Factory with Video{Encoder,Decoder}FactoryTemplate. Bug: webrtc:13573 Change-Id: I4eb5bb99bfde9c38c1d4072b933ef11a9ca32f53 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/299703 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Philip Eliasson Cr-Commit-Position: refs/heads/main@{#39743} --- media/BUILD.gn | 12 ++++- media/engine/webrtc_video_engine_unittest.cc | 50 ++++++++++++++++++-- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/media/BUILD.gn b/media/BUILD.gn index 0179462cc7..00a0745721 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -794,9 +794,17 @@ if (rtc_include_tests) { "../api/video:video_codec_constants", "../api/video:video_frame", "../api/video:video_rtp_headers", - "../api/video_codecs:builtin_video_decoder_factory", - "../api/video_codecs:builtin_video_encoder_factory", "../api/video_codecs:video_codecs_api", + "../api/video_codecs:video_decoder_factory_template", + "../api/video_codecs:video_decoder_factory_template_dav1d_adapter", + "../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter", + "../api/video_codecs:video_decoder_factory_template_libvpx_vp9_adapter", + "../api/video_codecs:video_decoder_factory_template_open_h264_adapter", + "../api/video_codecs:video_encoder_factory_template", + "../api/video_codecs:video_encoder_factory_template_libaom_av1_adapter", + "../api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter", + "../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter", + "../api/video_codecs:video_encoder_factory_template_open_h264_adapter", "../audio", "../call:call_interfaces", "../common_video", diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc index c86ceb6176..7f77a12e78 100644 --- a/media/engine/webrtc_video_engine_unittest.cc +++ b/media/engine/webrtc_video_engine_unittest.cc @@ -36,13 +36,21 @@ #include "api/video/builtin_video_bitrate_allocator_factory.h" #include "api/video/i420_buffer.h" #include "api/video/video_bitrate_allocation.h" -#include "api/video_codecs/builtin_video_decoder_factory.h" -#include "api/video_codecs/builtin_video_encoder_factory.h" #include "api/video_codecs/h264_profile_level_id.h" #include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/video_decoder_factory.h" +#include "api/video_codecs/video_decoder_factory_template.h" +#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h" +#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h" +#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h" +#include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h" #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" +#include "api/video_codecs/video_encoder_factory_template.h" +#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h" +#include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h" +#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" +#include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "call/flexfec_receive_stream.h" #include "media/base/fake_frame_source.h" #include "media/base/fake_network_interface.h" @@ -122,6 +130,34 @@ constexpr size_t kNumSimulcastStreams = 3; static const char kUnsupportedExtensionName[] = "urn:ietf:params:rtp-hdrext:unsupported"; +class FuzzyMatchedVideoEncoderFactory : public webrtc::VideoEncoderFactory { + public: + std::vector GetSupportedFormats() const override { + return factory_.GetSupportedFormats(); + } + + std::unique_ptr CreateVideoEncoder( + const webrtc::SdpVideoFormat& format) override { + absl::optional matched_format = + webrtc::FuzzyMatchSdpVideoFormat(factory_.GetSupportedFormats(), + format); + return factory_.CreateVideoEncoder(matched_format.value_or(format)); + } + + CodecSupport QueryCodecSupport( + const webrtc::SdpVideoFormat& format, + absl::optional scalability_mode) const override { + return factory_.QueryCodecSupport(format, scalability_mode); + } + + private: + webrtc::VideoEncoderFactoryTemplate + factory_; +}; + cricket::VideoCodec RemoveFeedbackParams(cricket::VideoCodec&& codec) { codec.feedback_params = cricket::FeedbackParams(); return std::move(codec); @@ -1593,7 +1629,7 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test { video_bitrate_allocator_factory_( webrtc::CreateBuiltinVideoBitrateAllocatorFactory()), engine_( - webrtc::CreateBuiltinVideoEncoderFactory(), + std::make_unique(), std::make_unique( []() { return std::make_unique(); }, kSdpVideoFormats), @@ -1727,8 +1763,12 @@ class WebRtcVideoChannelBaseTest : public ::testing::Test { : task_queue_factory_(webrtc::CreateDefaultTaskQueueFactory()), video_bitrate_allocator_factory_( webrtc::CreateBuiltinVideoBitrateAllocatorFactory()), - engine_(webrtc::CreateBuiltinVideoEncoderFactory(), - webrtc::CreateBuiltinVideoDecoderFactory(), + engine_(std::make_unique(), + std::make_unique>(), field_trials_) {} void SetUp() override {