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}
diff --git a/api/voip/BUILD.gn b/api/voip/BUILD.gn
index 6ed1ea8..b28d7ce 100644
--- a/api/voip/BUILD.gn
+++ b/api/voip/BUILD.gn
@@ -30,6 +30,7 @@
 
 rtc_library("voip_engine_factory") {
   visibility = [ "*" ]
+  allow_poison = [ "environment_construction" ]
   sources = [
     "voip_engine_factory.cc",
     "voip_engine_factory.h",
@@ -42,6 +43,7 @@
     "../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 8da53ce..2465ec9 100644
--- a/api/voip/voip_engine_factory.cc
+++ b/api/voip/voip_engine_factory.cc
@@ -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 @@
     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
diff --git a/audio/voip/BUILD.gn b/audio/voip/BUILD.gn
index 8042ec9..a491ec4 100644
--- a/audio/voip/BUILD.gn
+++ b/audio/voip/BUILD.gn
@@ -20,6 +20,7 @@
     "../../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 088a7a5..5dae888 100644
--- a/audio/voip/test/BUILD.gn
+++ b/audio/voip/test/BUILD.gn
@@ -28,6 +28,7 @@
         "..: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 b432506..2838f5e 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 @@
         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_;
diff --git a/audio/voip/voip_core.cc b/audio/voip/voip_core.cc
index 8df1c59..30c8459 100644
--- a/audio/voip/voip_core.cc
+++ b/audio/voip/voip_core.cc
@@ -37,16 +37,16 @@
 
 }  // 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 @@
 
   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_);
 
   {
diff --git a/audio/voip/voip_core.h b/audio/voip/voip_core.h
index 4a6031d..3ee1e8c 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 @@
                  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 @@
   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.