From 55a61898a80de4e602db622fd02d3adb91a03ef7 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Wed, 3 Jan 2024 18:39:27 +0100 Subject: [PATCH] Pass Environment to custom FecController at construction To allow custom FecController use propagated rather than global field trials note that there is one FecControllerFactory per peer connection factory, but FecController is created per peer connection and may use per peer connection field trials. Bug: webrtc:10335 Change-Id: Id25bfaf4b49d4f6d551730c8fd55596ddc49ab47 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/333400 Reviewed-by: Harald Alvestrand Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#41478} --- api/BUILD.gn | 2 ++ api/fec_controller.h | 19 ++++++++++++++++++- call/call.cc | 2 +- test/call_test.cc | 2 +- test/scenario/video_stream.cc | 3 ++- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/api/BUILD.gn b/api/BUILD.gn index 3413b93b46..d92962c3a8 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -889,6 +889,8 @@ rtc_source_set("fec_controller_api") { deps = [ "../modules:module_fec_api", + "../rtc_base:checks", + "environment", "video:video_frame_type", ] } diff --git a/api/fec_controller.h b/api/fec_controller.h index a9be656d6e..6f45ccbde3 100644 --- a/api/fec_controller.h +++ b/api/fec_controller.h @@ -14,8 +14,10 @@ #include #include +#include "api/environment/environment.h" #include "api/video/video_frame_type.h" #include "modules/include/module_fec_types.h" +#include "rtc_base/checks.h" namespace webrtc { // TODO(yinwa): work in progress. API in class FecController should not be @@ -87,8 +89,23 @@ class FecController { class FecControllerFactoryInterface { public: - virtual std::unique_ptr CreateFecController() = 0; virtual ~FecControllerFactoryInterface() = default; + + // TODO: bugs.webrtc.org/10335 - make pure virtual when implemented by derived + // classes. + virtual std::unique_ptr CreateFecController( + const Environment& env) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + return CreateFecController(); +#pragma clang diagnostic pop + } + + // TODO: bugs.webrtc.org/10335 - delete when implementation is removed from + // the derived classes. + [[deprecated]] virtual std::unique_ptr CreateFecController() { + RTC_CHECK_NOTREACHED(); + } }; } // namespace webrtc diff --git a/call/call.cc b/call/call.cc index e35502f202..0013bb39da 100644 --- a/call/call.cc +++ b/call/call.cc @@ -920,7 +920,7 @@ webrtc::VideoSendStream* Call::CreateVideoSendStream( } std::unique_ptr fec_controller = config_.fec_controller_factory - ? config_.fec_controller_factory->CreateFecController() + ? config_.fec_controller_factory->CreateFecController(env_) : std::make_unique(&env_.clock()); return CreateVideoSendStream(std::move(config), std::move(encoder_config), std::move(fec_controller)); diff --git a/test/call_test.cc b/test/call_test.cc index 09099cccd6..6cdd8da133 100644 --- a/test/call_test.cc +++ b/test/call_test.cc @@ -572,7 +572,7 @@ void CallTest::CreateVideoSendStreams() { if (fec_controller_factory_.get()) { video_send_streams_[i] = sender_call_->CreateVideoSendStream( video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy(), - fec_controller_factory_->CreateFecController()); + fec_controller_factory_->CreateFecController(send_env_)); } else { video_send_streams_[i] = sender_call_->CreateVideoSendStream( video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy()); diff --git a/test/scenario/video_stream.cc b/test/scenario/video_stream.cc index eb20f8dbc7..654aed7c6c 100644 --- a/test/scenario/video_stream.cc +++ b/test/scenario/video_stream.cc @@ -430,7 +430,8 @@ SendVideoStream::SendVideoStream(CallClient* sender, if (config.stream.fec_controller_factory) { send_stream_ = sender_->call_->CreateVideoSendStream( std::move(send_config), std::move(encoder_config), - config.stream.fec_controller_factory->CreateFecController()); + config.stream.fec_controller_factory->CreateFecController( + sender_->env_)); } else { send_stream_ = sender_->call_->CreateVideoSendStream( std::move(send_config), std::move(encoder_config));