Pass Environment instead of just clock to AcmReceiver at construction

Passing Environment would allow to propage field trials with it further to NetEq and AudioDecoders

Bug: webrtc:356878416
Change-Id: Ic68420df3b157ed341146207a2c45cb49e59a931
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/358501
Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42728}
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 4a90e37..64b41ab 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -538,7 +538,8 @@
       worker_thread_(TaskQueueBase::Current()),
       rtp_receive_statistics_(ReceiveStatistics::Create(&env_.clock())),
       remote_ssrc_(remote_ssrc),
-      acm_receiver_(AcmConfig(neteq_factory,
+      acm_receiver_(env_,
+                    AcmConfig(neteq_factory,
                               decoder_factory,
                               codec_pair_id,
                               jitter_buffer_max_packets,
diff --git a/audio/voip/audio_ingress.cc b/audio/voip/audio_ingress.cc
index 7a61ab4..9809c6b 100644
--- a/audio/voip/audio_ingress.cc
+++ b/audio/voip/audio_ingress.cc
@@ -51,7 +51,7 @@
       first_rtp_timestamp_(-1),
       rtp_receive_statistics_(receive_statistics),
       rtp_rtcp_(rtp_rtcp),
-      acm_receiver_(CreateAcmConfig(decoder_factory)),
+      acm_receiver_(env_, CreateAcmConfig(decoder_factory)),
       ntp_estimator_(&env_.clock()) {}
 
 AudioIngress::~AudioIngress() = default;
diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
index cb7163f..5e5e610 100644
--- a/modules/audio_coding/BUILD.gn
+++ b/modules/audio_coding/BUILD.gn
@@ -46,6 +46,7 @@
     "../../api:function_view",
     "../../api/audio:audio_frame_api",
     "../../api/audio_codecs:audio_codecs_api",
+    "../../api/environment",
     "../../api/neteq:neteq_api",
     "../../api/units:timestamp",
     "../../common_audio",
@@ -1138,6 +1139,7 @@
       "../../api:scoped_refptr",
       "../../api/audio_codecs:audio_codecs_api",
       "../../api/audio_codecs:builtin_audio_decoder_factory",
+      "../../api/environment:environment_factory",
       "../../test:test_support",
       "//testing/gtest",
     ]
diff --git a/modules/audio_coding/acm2/acm_receive_test.cc b/modules/audio_coding/acm2/acm_receive_test.cc
index 20d0a2f..fa48433 100644
--- a/modules/audio_coding/acm2/acm_receive_test.cc
+++ b/modules/audio_coding/acm2/acm_receive_test.cc
@@ -15,6 +15,7 @@
 #include <memory>
 
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
+#include "api/environment/environment_factory.h"
 #include "modules/audio_coding/include/audio_coding_module.h"
 #include "modules/audio_coding/neteq/tools/audio_sink.h"
 #include "modules/audio_coding/neteq/tools/packet.h"
@@ -26,10 +27,8 @@
 
 namespace {
 acm2::AcmReceiver::Config MakeAcmConfig(
-    Clock& clock,
     rtc::scoped_refptr<AudioDecoderFactory> decoder_factory) {
   acm2::AcmReceiver::Config config;
-  config.clock = clock;
   config.decoder_factory = std::move(decoder_factory);
   return config;
 }
@@ -43,7 +42,8 @@
     rtc::scoped_refptr<AudioDecoderFactory> decoder_factory)
     : clock_(0),
       acm_receiver_(std::make_unique<acm2::AcmReceiver>(
-          MakeAcmConfig(clock_, std::move(decoder_factory)))),
+          CreateEnvironment(&clock_),
+          MakeAcmConfig(std::move(decoder_factory)))),
       packet_source_(packet_source),
       audio_sink_(audio_sink),
       output_freq_hz_(output_freq_hz),
diff --git a/modules/audio_coding/acm2/acm_receiver.cc b/modules/audio_coding/acm2/acm_receiver.cc
index e50545f..7d04458 100644
--- a/modules/audio_coding/acm2/acm_receiver.cc
+++ b/modules/audio_coding/acm2/acm_receiver.cc
@@ -51,17 +51,27 @@
 
 AcmReceiver::Config::Config(
     rtc::scoped_refptr<AudioDecoderFactory> decoder_factory)
-    : clock(*Clock::GetRealTimeClock()), decoder_factory(decoder_factory) {}
+    : decoder_factory(decoder_factory) {}
 
 AcmReceiver::Config::Config(const Config&) = default;
 AcmReceiver::Config::~Config() = default;
 
-AcmReceiver::AcmReceiver(const Config& config)
-    : neteq_(CreateNetEq(config.neteq_factory,
+AcmReceiver::AcmReceiver(const Environment& env, Config config)
+    : clock_(env.clock()),
+      neteq_(CreateNetEq(config.neteq_factory,
                          config.neteq_config,
-                         &config.clock,
+                         &clock_,
                          config.decoder_factory)),
-      clock_(config.clock),
+      resampled_last_output_frame_(true) {
+  ClearSamples(last_audio_buffer_);
+}
+
+AcmReceiver::AcmReceiver(const Config& config)
+    : clock_(*Clock::GetRealTimeClock()),
+      neteq_(CreateNetEq(config.neteq_factory,
+                         config.neteq_config,
+                         &clock_,
+                         config.decoder_factory)),
       resampled_last_output_frame_(true) {
   ClearSamples(last_audio_buffer_);
 }
diff --git a/modules/audio_coding/acm2/acm_receiver.h b/modules/audio_coding/acm2/acm_receiver.h
index 8b57523..f3e98fd 100644
--- a/modules/audio_coding/acm2/acm_receiver.h
+++ b/modules/audio_coding/acm2/acm_receiver.h
@@ -26,6 +26,7 @@
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/environment/environment.h"
 #include "api/neteq/neteq.h"
 #include "api/neteq/neteq_factory.h"
 #include "api/units/timestamp.h"
@@ -52,13 +53,14 @@
     ~Config();
 
     NetEq::Config neteq_config;
-    Clock& clock;
     rtc::scoped_refptr<AudioDecoderFactory> decoder_factory;
     NetEqFactory* neteq_factory = nullptr;
   };
 
-  // Constructor of the class
-  explicit AcmReceiver(const Config& config);
+  [[deprecated("bugs.webrtc.org/356878416")]] explicit AcmReceiver(
+      const Config& config);
+
+  AcmReceiver(const Environment& env, Config config);
 
   // Destructor of the class.
   ~AcmReceiver();
@@ -230,12 +232,12 @@
 
   uint32_t NowInTimestamp(int decoder_sampling_rate) const;
 
+  Clock& clock_;
   mutable Mutex mutex_;
   absl::optional<DecoderInfo> last_decoder_ RTC_GUARDED_BY(mutex_);
   ACMResampler resampler_ RTC_GUARDED_BY(mutex_);
   CallStatistics call_stats_ RTC_GUARDED_BY(mutex_);
   const std::unique_ptr<NetEq> neteq_;  // NetEq is thread-safe; no lock needed.
-  Clock& clock_;
   bool resampled_last_output_frame_ RTC_GUARDED_BY(mutex_);
   std::array<int16_t, AudioFrame::kMaxDataSizeSamples> last_audio_buffer_
       RTC_GUARDED_BY(mutex_);
diff --git a/modules/audio_coding/acm2/acm_receiver_unittest.cc b/modules/audio_coding/acm2/acm_receiver_unittest.cc
index 8b63424..07fcb05 100644
--- a/modules/audio_coding/acm2/acm_receiver_unittest.cc
+++ b/modules/audio_coding/acm2/acm_receiver_unittest.cc
@@ -48,7 +48,7 @@
 
   void SetUp() override {
     acm_ = AudioCodingModule::Create();
-    receiver_.reset(new AcmReceiver(config_));
+    receiver_ = std::make_unique<AcmReceiver>(env_, config_);
     ASSERT_TRUE(receiver_.get() != NULL);
     ASSERT_TRUE(acm_.get() != NULL);
     acm_->RegisterTransportCallback(this);
diff --git a/modules/audio_coding/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/acm2/audio_coding_module_unittest.cc
index 90f7383..b30788c 100644
--- a/modules/audio_coding/acm2/audio_coding_module_unittest.cc
+++ b/modules/audio_coding/acm2/audio_coding_module_unittest.cc
@@ -175,9 +175,8 @@
   void SetUp() {
     acm_ = AudioCodingModule::Create();
     acm2::AcmReceiver::Config config;
-    config.clock = env_.clock();
     config.decoder_factory = CreateBuiltinAudioDecoderFactory();
-    acm_receiver_ = std::make_unique<acm2::AcmReceiver>(config);
+    acm_receiver_ = std::make_unique<acm2::AcmReceiver>(env_, config);
 
     rtp_utility_->Populate(&rtp_header_);
 
diff --git a/modules/audio_coding/test/EncodeDecodeTest.cc b/modules/audio_coding/test/EncodeDecodeTest.cc
index a480773..70e18b3 100644
--- a/modules/audio_coding/test/EncodeDecodeTest.cc
+++ b/modules/audio_coding/test/EncodeDecodeTest.cc
@@ -52,7 +52,8 @@
 Sender::Sender()
     : _acm(NULL), _pcmFile(), _audioFrame(), _packetization(NULL) {}
 
-void Sender::Setup(AudioCodingModule* acm,
+void Sender::Setup(const Environment& env,
+                   AudioCodingModule* acm,
                    RTPStream* rtpStream,
                    absl::string_view in_file_name,
                    int in_sample_rate,
@@ -70,7 +71,7 @@
   _pcmFile.FastForward(100);
 
   acm->SetEncoder(CreateBuiltinAudioEncoderFactory()->Create(
-      CreateEnvironment(), format, {.payload_type = payload_type}));
+      env, format, {.payload_type = payload_type}));
   _packetization = new TestPacketization(rtpStream, format.clockrate_hz);
   EXPECT_EQ(0, acm->RegisterTransportCallback(_packetization));
 
@@ -244,6 +245,7 @@
       {9, {"G722", 8000, 1}},
 #endif
   };
+  const Environment env = CreateEnvironment();
   int file_num = 0;
   for (const auto& send_codec : send_codecs) {
     RTPFile rtpFile;
@@ -254,7 +256,7 @@
     rtpFile.Open(fileName.c_str(), "wb+");
     rtpFile.WriteHeader();
     Sender sender;
-    sender.Setup(acm.get(), &rtpFile, "audio_coding/testfile32kHz", 32000,
+    sender.Setup(env, acm.get(), &rtpFile, "audio_coding/testfile32kHz", 32000,
                  send_codec.first, send_codec.second);
     sender.Run();
     sender.Teardown();
@@ -262,9 +264,9 @@
 
     rtpFile.Open(fileName.c_str(), "rb");
     rtpFile.ReadHeader();
-    std::unique_ptr<acm2::AcmReceiver> acm_receiver(
+    std::unique_ptr<acm2::AcmReceiver> acm_receiver =
         std::make_unique<acm2::AcmReceiver>(
-            acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory())));
+            env, acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory()));
     Receiver receiver;
     receiver.Setup(acm_receiver.get(), &rtpFile, "encodeDecode_out", 1,
                    file_num);
diff --git a/modules/audio_coding/test/EncodeDecodeTest.h b/modules/audio_coding/test/EncodeDecodeTest.h
index 9cd2c23..8acacb9 100644
--- a/modules/audio_coding/test/EncodeDecodeTest.h
+++ b/modules/audio_coding/test/EncodeDecodeTest.h
@@ -15,6 +15,7 @@
 #include <string.h>
 
 #include "absl/strings/string_view.h"
+#include "api/environment/environment.h"
 #include "modules/audio_coding/acm2/acm_receiver.h"
 #include "modules/audio_coding/include/audio_coding_module.h"
 #include "modules/audio_coding/test/PCMFile.h"
@@ -51,7 +52,8 @@
 class Sender {
  public:
   Sender();
-  void Setup(AudioCodingModule* acm,
+  void Setup(const Environment& env,
+             AudioCodingModule* acm,
              RTPStream* rtpStream,
              absl::string_view in_file_name,
              int in_sample_rate,
diff --git a/modules/audio_coding/test/PacketLossTest.cc b/modules/audio_coding/test/PacketLossTest.cc
index 6b52000..9226b0f 100644
--- a/modules/audio_coding/test/PacketLossTest.cc
+++ b/modules/audio_coding/test/PacketLossTest.cc
@@ -14,6 +14,8 @@
 
 #include "absl/strings/string_view.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
+#include "api/environment/environment.h"
+#include "api/environment/environment_factory.h"
 #include "api/units/timestamp.h"
 #include "rtc_base/strings/string_builder.h"
 #include "test/gtest.h"
@@ -92,14 +94,15 @@
 
 SenderWithFEC::SenderWithFEC() : expected_loss_rate_(0) {}
 
-void SenderWithFEC::Setup(AudioCodingModule* acm,
+void SenderWithFEC::Setup(const Environment& env,
+                          AudioCodingModule* acm,
                           RTPStream* rtpStream,
                           absl::string_view in_file_name,
                           int payload_type,
                           SdpAudioFormat format,
                           int expected_loss_rate) {
-  Sender::Setup(acm, rtpStream, in_file_name, format.clockrate_hz, payload_type,
-                format);
+  Sender::Setup(env, acm, rtpStream, in_file_name, format.clockrate_hz,
+                payload_type, format);
   EXPECT_TRUE(SetFEC(true));
   EXPECT_TRUE(SetPacketLossRate(expected_loss_rate));
 }
@@ -138,6 +141,7 @@
 #ifndef WEBRTC_CODEC_OPUS
   return;
 #else
+  const Environment env = CreateEnvironment();
   RTPFile rtpFile;
   std::unique_ptr<AudioCodingModule> acm(AudioCodingModule::Create());
   SdpAudioFormat send_format = SdpAudioFormat("opus", 48000, 2);
@@ -150,7 +154,7 @@
   rtpFile.Open(fileName.c_str(), "wb+");
   rtpFile.WriteHeader();
   SenderWithFEC sender;
-  sender.Setup(acm.get(), &rtpFile, in_file_name_, 120, send_format,
+  sender.Setup(env, acm.get(), &rtpFile, in_file_name_, 120, send_format,
                expected_loss_rate_);
   sender.Run();
   sender.Teardown();
@@ -158,9 +162,9 @@
 
   rtpFile.Open(fileName.c_str(), "rb");
   rtpFile.ReadHeader();
-  std::unique_ptr<acm2::AcmReceiver> acm_receiver(
+  std::unique_ptr<acm2::AcmReceiver> acm_receiver =
       std::make_unique<acm2::AcmReceiver>(
-          acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory())));
+          env, acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory()));
   ReceiverWithPacketLoss receiver;
   receiver.Setup(acm_receiver.get(), &rtpFile, "packetLoss_out", channels_, 15,
                  actual_loss_rate_, burst_length_);
diff --git a/modules/audio_coding/test/PacketLossTest.h b/modules/audio_coding/test/PacketLossTest.h
index 7569e23..b256393 100644
--- a/modules/audio_coding/test/PacketLossTest.h
+++ b/modules/audio_coding/test/PacketLossTest.h
@@ -42,7 +42,8 @@
 class SenderWithFEC : public Sender {
  public:
   SenderWithFEC();
-  void Setup(AudioCodingModule* acm,
+  void Setup(const Environment& env,
+             AudioCodingModule* acm,
              RTPStream* rtpStream,
              absl::string_view in_file_name,
              int payload_type,
diff --git a/modules/audio_coding/test/TestAllCodecs.cc b/modules/audio_coding/test/TestAllCodecs.cc
index 821b881..41c4a3a 100644
--- a/modules/audio_coding/test/TestAllCodecs.cc
+++ b/modules/audio_coding/test/TestAllCodecs.cc
@@ -111,6 +111,7 @@
     : env_(CreateEnvironment()),
       acm_a_(AudioCodingModule::Create()),
       acm_b_(std::make_unique<acm2::AcmReceiver>(
+          env_,
           acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory()))),
       channel_a_to_b_(NULL),
       test_count_(0),
diff --git a/modules/audio_coding/test/TestRedFec.cc b/modules/audio_coding/test/TestRedFec.cc
index 6f765e9..c2b42cc 100644
--- a/modules/audio_coding/test/TestRedFec.cc
+++ b/modules/audio_coding/test/TestRedFec.cc
@@ -46,6 +46,7 @@
                                                  AudioDecoderOpus>()),
       _acmA(AudioCodingModule::Create()),
       _acm_receiver(std::make_unique<acm2::AcmReceiver>(
+          env_,
           acm2::AcmReceiver::Config(decoder_factory_))),
       _channelA2B(NULL),
       _testCntr(0) {}
diff --git a/modules/audio_coding/test/TestStereo.cc b/modules/audio_coding/test/TestStereo.cc
index 535aadb..0c258e9 100644
--- a/modules/audio_coding/test/TestStereo.cc
+++ b/modules/audio_coding/test/TestStereo.cc
@@ -102,6 +102,7 @@
     : env_(CreateEnvironment()),
       acm_a_(AudioCodingModule::Create()),
       acm_b_(std::make_unique<acm2::AcmReceiver>(
+          env_,
           acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory()))),
       channel_a2b_(NULL),
       test_cntr_(0),
diff --git a/modules/audio_coding/test/TestVADDTX.cc b/modules/audio_coding/test/TestVADDTX.cc
index 17eba26..50781a7 100644
--- a/modules/audio_coding/test/TestVADDTX.cc
+++ b/modules/audio_coding/test/TestVADDTX.cc
@@ -74,6 +74,7 @@
           CreateAudioDecoderFactory<AudioDecoderIlbc, AudioDecoderOpus>()),
       acm_send_(AudioCodingModule::Create()),
       acm_receive_(std::make_unique<acm2::AcmReceiver>(
+          env_,
           acm2::AcmReceiver::Config(decoder_factory_))),
       channel_(std::make_unique<Channel>()),
       packetization_callback_(
diff --git a/modules/audio_coding/test/opus_test.cc b/modules/audio_coding/test/opus_test.cc
index dfebb5f..95cfef5 100644
--- a/modules/audio_coding/test/opus_test.cc
+++ b/modules/audio_coding/test/opus_test.cc
@@ -13,6 +13,7 @@
 #include <string>
 
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
+#include "api/environment/environment_factory.h"
 #include "modules/audio_coding/codecs/opus/opus_interface.h"
 #include "modules/audio_coding/include/audio_coding_module_typedefs.h"
 #include "modules/audio_coding/test/TestStereo.h"
@@ -23,6 +24,7 @@
 
 OpusTest::OpusTest()
     : acm_receiver_(std::make_unique<acm2::AcmReceiver>(
+          CreateEnvironment(),
           acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory()))),
       channel_a2b_(NULL),
       counter_(0),
diff --git a/modules/audio_coding/test/target_delay_unittest.cc b/modules/audio_coding/test/target_delay_unittest.cc
index cd8fb34..cb15610 100644
--- a/modules/audio_coding/test/target_delay_unittest.cc
+++ b/modules/audio_coding/test/target_delay_unittest.cc
@@ -12,6 +12,7 @@
 
 #include "api/audio/audio_frame.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
+#include "api/environment/environment_factory.h"
 #include "api/rtp_headers.h"
 #include "api/units/timestamp.h"
 #include "modules/audio_coding/acm2/acm_receiver.h"
@@ -26,6 +27,7 @@
  protected:
   TargetDelayTest()
       : receiver_(
+            CreateEnvironment(),
             acm2::AcmReceiver::Config(CreateBuiltinAudioDecoderFactory())) {}
 
   ~TargetDelayTest() {}