From 9a9f6a8441c8b1e3c6f9bac42bac54365252cc93 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Tue, 5 Mar 2024 14:43:12 +0100 Subject: [PATCH] Add VideoEncoderFactory::Create to pass Environment for VideoEncoder construction Bug: webrtc:15860 Change-Id: I6197780aaaa9c29717cb94df5790645b674c3bc2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/341900 Reviewed-by: Philip Eliasson Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#41873} --- api/video_codecs/video_encoder_factory.h | 20 +++++++++++++++++--- video/video_stream_encoder.cc | 3 +-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/api/video_codecs/video_encoder_factory.h b/api/video_codecs/video_encoder_factory.h index d28a2a4035..fa043f5296 100644 --- a/api/video_codecs/video_encoder_factory.h +++ b/api/video_codecs/video_encoder_factory.h @@ -16,14 +16,15 @@ #include #include "absl/types/optional.h" +#include "api/environment/environment.h" #include "api/units/data_rate.h" #include "api/video/render_resolution.h" #include "api/video_codecs/sdp_video_format.h" +#include "api/video_codecs/video_encoder.h" +#include "rtc_base/checks.h" namespace webrtc { -class VideoEncoder; - // A factory that creates VideoEncoders. // NOTE: This class is still under development and may change without notice. class VideoEncoderFactory { @@ -96,8 +97,21 @@ class VideoEncoderFactory { } // Creates a VideoEncoder for the specified format. + virtual std::unique_ptr Create(const Environment& env, + const SdpVideoFormat& format) { + return CreateVideoEncoder(format); + } + + // Deprecated in favor of the `Create` above. + // TODO: bugs.webrtc.org/15860 - Make private when all callers are updated + // to use Create function above. Delete when all derived classes implement + // `Create` instead of this function. virtual std::unique_ptr CreateVideoEncoder( - const SdpVideoFormat& format) = 0; + const SdpVideoFormat& format) { + // Newer code shouldn't call this function, + // Older code should implement it in derived classes. + RTC_CHECK_NOTREACHED(); + } // This method creates a EncoderSelector to use for a VideoSendStream. // (and hence should probably been called CreateEncoderSelector()). diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc index 35d9c435cc..c28d086fa4 100644 --- a/video/video_stream_encoder.cc +++ b/video/video_stream_encoder.cc @@ -947,8 +947,7 @@ void VideoStreamEncoder::ReconfigureEncoder() { encoder_.reset(); encoder_ = MaybeCreateFrameDumpingEncoderWrapper( - settings_.encoder_factory->CreateVideoEncoder( - encoder_config_.video_format), + settings_.encoder_factory->Create(env_, encoder_config_.video_format), env_.field_trials()); if (!encoder_) { RTC_LOG(LS_ERROR) << "CreateVideoEncoder failed, failing encoder format: "