diff --git a/api/voip/BUILD.gn b/api/voip/BUILD.gn index 6ed1ea8a90..b28d7ce5c6 100644 --- a/api/voip/BUILD.gn +++ b/api/voip/BUILD.gn @@ -30,6 +30,7 @@ rtc_source_set("voip_api") { rtc_library("voip_engine_factory") { visibility = [ "*" ] + allow_poison = [ "environment_construction" ] sources = [ "voip_engine_factory.cc", "voip_engine_factory.h", @@ -42,6 +43,7 @@ rtc_library("voip_engine_factory") { "../audio:audio_device", "../audio:audio_processing", "../audio_codecs:audio_codecs_api", + "../environment:environment_factory", "../task_queue", ] } diff --git a/api/voip/voip_engine_factory.cc b/api/voip/voip_engine_factory.cc index 8da53cef74..2465ec9502 100644 --- a/api/voip/voip_engine_factory.cc +++ b/api/voip/voip_engine_factory.cc @@ -12,6 +12,7 @@ #include +#include "api/environment/environment_factory.h" #include "audio/voip/voip_core.h" #include "rtc_base/logging.h" @@ -27,11 +28,11 @@ std::unique_ptr CreateVoipEngine(VoipEngineConfig config) { RTC_DLOG(LS_INFO) << "No audio processing functionality provided."; } - return std::make_unique(std::move(config.encoder_factory), - std::move(config.decoder_factory), - std::move(config.task_queue_factory), - std::move(config.audio_device_module), - std::move(config.audio_processing)); + return std::make_unique( + CreateEnvironment(std::move(config.task_queue_factory)), + std::move(config.encoder_factory), std::move(config.decoder_factory), + std::move(config.audio_device_module), + std::move(config.audio_processing)); } } // namespace webrtc diff --git a/audio/voip/BUILD.gn b/audio/voip/BUILD.gn index 8042ec99fa..a491ec43ee 100644 --- a/audio/voip/BUILD.gn +++ b/audio/voip/BUILD.gn @@ -20,6 +20,7 @@ rtc_library("voip_core") { "../../api/audio:audio_device", "../../api/audio:audio_processing", "../../api/audio_codecs:audio_codecs_api", + "../../api/environment", "../../api/task_queue", "../../api/voip:voip_api", "../../modules/audio_mixer:audio_mixer_impl", diff --git a/audio/voip/test/BUILD.gn b/audio/voip/test/BUILD.gn index 088a7a5607..5dae88832f 100644 --- a/audio/voip/test/BUILD.gn +++ b/audio/voip/test/BUILD.gn @@ -28,6 +28,7 @@ if (rtc_include_tests) { "..:voip_core", "../../../api/audio_codecs:builtin_audio_decoder_factory", "../../../api/audio_codecs:builtin_audio_encoder_factory", + "../../../api/environment:environment_factory", "../../../api/task_queue:default_task_queue_factory", "../../../modules/audio_device:mock_audio_device", "../../../modules/audio_processing:mocks", diff --git a/audio/voip/test/voip_core_unittest.cc b/audio/voip/test/voip_core_unittest.cc index b432506b12..2838f5e61d 100644 --- a/audio/voip/test/voip_core_unittest.cc +++ b/audio/voip/test/voip_core_unittest.cc @@ -12,7 +12,7 @@ #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" -#include "api/task_queue/default_task_queue_factory.h" +#include "api/environment/environment_factory.h" #include "modules/audio_device/include/mock_audio_device.h" #include "modules/audio_processing/include/mock_audio_processing.h" #include "test/gtest.h" @@ -43,9 +43,8 @@ class VoipCoreTest : public ::testing::Test { rtc::make_ref_counted>(); voip_core_ = std::make_unique( - std::move(encoder_factory), std::move(decoder_factory), - CreateDefaultTaskQueueFactory(), audio_device_, - std::move(audio_processing)); + CreateEnvironment(), std::move(encoder_factory), + std::move(decoder_factory), audio_device_, std::move(audio_processing)); } test::RunLoop run_loop_; diff --git a/audio/voip/voip_core.cc b/audio/voip/voip_core.cc index 8df1c594aa..30c84596a3 100644 --- a/audio/voip/voip_core.cc +++ b/audio/voip/voip_core.cc @@ -37,16 +37,16 @@ static constexpr int kMaxChannelId = 100000; } // namespace -VoipCore::VoipCore(rtc::scoped_refptr encoder_factory, +VoipCore::VoipCore(const Environment& env, + rtc::scoped_refptr encoder_factory, rtc::scoped_refptr decoder_factory, - std::unique_ptr task_queue_factory, rtc::scoped_refptr audio_device_module, - rtc::scoped_refptr audio_processing) { - encoder_factory_ = std::move(encoder_factory); - decoder_factory_ = std::move(decoder_factory); - task_queue_factory_ = std::move(task_queue_factory); - audio_device_module_ = std::move(audio_device_module); - audio_processing_ = std::move(audio_processing); + rtc::scoped_refptr audio_processing) + : env_(env), + encoder_factory_(std::move(encoder_factory)), + decoder_factory_(std::move(decoder_factory)), + audio_processing_(std::move(audio_processing)), + audio_device_module_(std::move(audio_device_module)) { audio_mixer_ = AudioMixerImpl::Create(); // AudioTransportImpl depends on audio mixer and audio processing instances. @@ -133,7 +133,7 @@ ChannelId VoipCore::CreateChannel(Transport* transport, rtc::scoped_refptr channel = rtc::make_ref_counted(transport, local_ssrc.value(), - task_queue_factory_.get(), + &env_.task_queue_factory(), audio_mixer_.get(), decoder_factory_); { diff --git a/audio/voip/voip_core.h b/audio/voip/voip_core.h index 4a6031dfe2..3ee1e8cec9 100644 --- a/audio/voip/voip_core.h +++ b/audio/voip/voip_core.h @@ -21,8 +21,8 @@ #include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" +#include "api/environment/environment.h" #include "api/scoped_refptr.h" -#include "api/task_queue/task_queue_factory.h" #include "api/voip/voip_base.h" #include "api/voip/voip_codec.h" #include "api/voip/voip_dtmf.h" @@ -52,10 +52,9 @@ class VoipCore : public VoipEngine, public VoipStatistics, public VoipVolumeControl { public: - // Construct VoipCore with provided arguments. - VoipCore(rtc::scoped_refptr encoder_factory, + VoipCore(const Environment& env, + rtc::scoped_refptr encoder_factory, rtc::scoped_refptr decoder_factory, - std::unique_ptr task_queue_factory, rtc::scoped_refptr audio_device_module, rtc::scoped_refptr audio_processing); ~VoipCore() override = default; @@ -136,9 +135,9 @@ class VoipCore : public VoipEngine, bool UpdateAudioTransportWithSenders(); // Synchronization for these are handled internally. + const Environment env_; rtc::scoped_refptr encoder_factory_; rtc::scoped_refptr decoder_factory_; - std::unique_ptr task_queue_factory_; // Synchronization is handled internally by AudioProcessing. // Must be placed before `audio_device_module_` for proper destruction.