Create Environment for VoipCore

To make Environment available for creating AudioEncoders in follow ups

Bug: webrtc:343086059
Change-Id: I0965155915caeee28964ce8406045beeabaa0185
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/353741
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42460}
This commit is contained in:
Danil Chapovalov 2024-06-07 16:10:41 +02:00 committed by WebRTC LUCI CQ
parent 6f3103f23d
commit 03ebfdf044
7 changed files with 26 additions and 23 deletions

View File

@ -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",
]
}

View File

@ -12,6 +12,7 @@
#include <utility>
#include "api/environment/environment_factory.h"
#include "audio/voip/voip_core.h"
#include "rtc_base/logging.h"
@ -27,11 +28,11 @@ std::unique_ptr<VoipEngine> CreateVoipEngine(VoipEngineConfig config) {
RTC_DLOG(LS_INFO) << "No audio processing functionality provided.";
}
return std::make_unique<VoipCore>(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<VoipCore>(
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

View File

@ -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",

View File

@ -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",

View File

@ -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<NiceMock<test::MockAudioProcessing>>();
voip_core_ = std::make_unique<VoipCore>(
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_;

View File

@ -37,16 +37,16 @@ static constexpr int kMaxChannelId = 100000;
} // namespace
VoipCore::VoipCore(rtc::scoped_refptr<AudioEncoderFactory> encoder_factory,
VoipCore::VoipCore(const Environment& env,
rtc::scoped_refptr<AudioEncoderFactory> encoder_factory,
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory,
std::unique_ptr<TaskQueueFactory> task_queue_factory,
rtc::scoped_refptr<AudioDeviceModule> audio_device_module,
rtc::scoped_refptr<AudioProcessing> 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<AudioProcessing> 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<AudioChannel> channel =
rtc::make_ref_counted<AudioChannel>(transport, local_ssrc.value(),
task_queue_factory_.get(),
&env_.task_queue_factory(),
audio_mixer_.get(), decoder_factory_);
{

View File

@ -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<AudioEncoderFactory> encoder_factory,
VoipCore(const Environment& env,
rtc::scoped_refptr<AudioEncoderFactory> encoder_factory,
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory,
std::unique_ptr<TaskQueueFactory> task_queue_factory,
rtc::scoped_refptr<AudioDeviceModule> audio_device_module,
rtc::scoped_refptr<AudioProcessing> 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<AudioEncoderFactory> encoder_factory_;
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory_;
std::unique_ptr<TaskQueueFactory> task_queue_factory_;
// Synchronization is handled internally by AudioProcessing.
// Must be placed before `audio_device_module_` for proper destruction.