Introduce ModuleRtpRtcpImpl factory that accepts Environment

ModuleRtpRtcpImpl and ModuleRtpRtcpImpl2 share certain components, RtcpReceiver in particular.
To always have Environment in RtcpReceiver both legacy and new module need to propagate it.

No-Iwyu: suggests too many changes, better address them separately.
Bug: webrtc:362762208
Change-Id: I2c885f57e24f135229fb7cd9781126d663017b3d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/361142
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42908}
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index 4873a74..ec05361 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -377,6 +377,7 @@
     "..:module_fec_api",
     "../../api:rtp_headers",
     "../../api:transport_api",
+    "../../api/environment",
     "../../api/rtc_event_log",
     "../../api/units:data_rate",
     "../../api/units:timestamp",
diff --git a/modules/rtp_rtcp/include/rtp_rtcp.h b/modules/rtp_rtcp/include/rtp_rtcp.h
index e56d5ef..ccf193e 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp.h
@@ -13,21 +13,22 @@
 
 #include <memory>
 
-#include "absl/base/attributes.h"
+#include "api/environment/environment.h"
 #include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
 
 namespace webrtc {
 
-class ABSL_DEPRECATED("") RtpRtcp : public RtpRtcpInterface {
+// A deprecated version of the RtpRtcp module.
+class [[deprecated("bugs.webrtc.org/42224904")]] RtpRtcp
+    : public RtpRtcpInterface {
  public:
-  // Instantiates a deprecated version of the RtpRtcp module.
-  static std::unique_ptr<RtpRtcp> ABSL_DEPRECATED("")
-      Create(const Configuration& configuration) {
-    return DEPRECATED_Create(configuration);
-  }
+  [[deprecated("bugs.webrtc.org/362762208")]]  //
+  static std::unique_ptr<RtpRtcp>
+  Create(const Configuration& configuration);
 
-  static std::unique_ptr<RtpRtcp> DEPRECATED_Create(
-      const Configuration& configuration);
+  [[deprecated("bugs.webrtc.org/42224904")]]  //
+  static std::unique_ptr<RtpRtcp>
+  Create(const Environment& env, const Configuration& configuration);
 
   // Process any pending tasks such as timeouts.
   virtual void Process() = 0;
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index eb4665b..e13b043 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -57,12 +57,24 @@
           &packet_history,
           config.paced_sender ? config.paced_sender : &non_paced_sender) {}
 
-std::unique_ptr<RtpRtcp> RtpRtcp::DEPRECATED_Create(
-    const Configuration& configuration) {
+std::unique_ptr<RtpRtcp> RtpRtcp::Create(const Configuration& configuration) {
   RTC_DCHECK(configuration.clock);
   return std::make_unique<ModuleRtpRtcpImpl>(configuration);
 }
 
+std::unique_ptr<RtpRtcp> RtpRtcp::Create(const Environment& env,
+                                         const Configuration& configuration) {
+  RTC_DCHECK(configuration.field_trials == nullptr);
+  RTC_DCHECK(configuration.clock == nullptr);
+  RTC_DCHECK(configuration.event_log == nullptr);
+
+  Configuration config = configuration;
+  config.field_trials = &env.field_trials();
+  config.clock = &env.clock();
+  config.event_log = &env.event_log();
+  return std::make_unique<ModuleRtpRtcpImpl>(config);
+}
+
 ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration)
     : rtcp_sender_(
           RTCPSender::Configuration::FromRtpRtcpConfiguration(configuration)),