Remove more trampoline functions from ChannelManager

Bug: webrtc:13931
Change-Id: I3a1b48aeffd91ee6abaf78eb1ec69c1653b210e6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/262640
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36898}
diff --git a/pc/channel_manager.cc b/pc/channel_manager.cc
index e13db54..4b08843 100644
--- a/pc/channel_manager.cc
+++ b/pc/channel_manager.cc
@@ -121,34 +121,6 @@
   }
 }
 
-RtpHeaderExtensions ChannelManager::GetDefaultEnabledAudioRtpHeaderExtensions()
-    const {
-  if (!media_engine_)
-    return {};
-  return GetDefaultEnabledRtpHeaderExtensions(media_engine_->voice());
-}
-
-std::vector<webrtc::RtpHeaderExtensionCapability>
-ChannelManager::GetSupportedAudioRtpHeaderExtensions() const {
-  if (!media_engine_)
-    return {};
-  return media_engine_->voice().GetRtpHeaderExtensions();
-}
-
-RtpHeaderExtensions ChannelManager::GetDefaultEnabledVideoRtpHeaderExtensions()
-    const {
-  if (!media_engine_)
-    return {};
-  return GetDefaultEnabledRtpHeaderExtensions(media_engine_->video());
-}
-
-std::vector<webrtc::RtpHeaderExtensionCapability>
-ChannelManager::GetSupportedVideoRtpHeaderExtensions() const {
-  if (!media_engine_)
-    return {};
-  return media_engine_->video().GetRtpHeaderExtensions();
-}
-
 std::unique_ptr<VoiceChannel> ChannelManager::CreateVoiceChannel(
     webrtc::Call* call,
     const MediaConfig& media_config,
@@ -224,15 +196,4 @@
   return video_channel;
 }
 
-bool ChannelManager::StartAecDump(webrtc::FileWrapper file,
-                                  int64_t max_size_bytes) {
-  RTC_DCHECK_RUN_ON(worker_thread_);
-  return media_engine_->voice().StartAecDump(std::move(file), max_size_bytes);
-}
-
-void ChannelManager::StopAecDump() {
-  RTC_DCHECK_RUN_ON(worker_thread_);
-  media_engine_->voice().StopAecDump();
-}
-
 }  // namespace cricket
diff --git a/pc/channel_manager.h b/pc/channel_manager.h
index 8d1ec28..693b552 100644
--- a/pc/channel_manager.h
+++ b/pc/channel_manager.h
@@ -69,12 +69,6 @@
   void GetSupportedAudioReceiveCodecs(std::vector<AudioCodec>* codecs) const;
   void GetSupportedVideoSendCodecs(std::vector<VideoCodec>* codecs) const;
   void GetSupportedVideoReceiveCodecs(std::vector<VideoCodec>* codecs) const;
-  RtpHeaderExtensions GetDefaultEnabledAudioRtpHeaderExtensions() const;
-  std::vector<webrtc::RtpHeaderExtensionCapability>
-  GetSupportedAudioRtpHeaderExtensions() const;
-  RtpHeaderExtensions GetDefaultEnabledVideoRtpHeaderExtensions() const;
-  std::vector<webrtc::RtpHeaderExtensionCapability>
-  GetSupportedVideoRtpHeaderExtensions() const;
 
   // The operations below all occur on the worker thread.
   // The caller is responsible for ensuring that destruction happens
@@ -102,14 +96,6 @@
       webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory)
       override;
 
-  // Starts AEC dump using existing file, with a specified maximum file size in
-  // bytes. When the limit is reached, logging will stop and the file will be
-  // closed. If max_size_bytes is set to <= 0, no limit will be used.
-  bool StartAecDump(webrtc::FileWrapper file, int64_t max_size_bytes);
-
-  // Stops recording AEC dump.
-  void StopAecDump();
-
  protected:
   ChannelManager(std::unique_ptr<MediaEngineInterface> media_engine,
                  bool enable_rtx,
diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc
index 6e6a72c..0fece2d 100644
--- a/pc/peer_connection_factory.cc
+++ b/pc/peer_connection_factory.cc
@@ -129,17 +129,17 @@
   switch (kind) {
     case cricket::MEDIA_TYPE_AUDIO: {
       cricket::AudioCodecs cricket_codecs;
-      channel_manager()->GetSupportedAudioSendCodecs(&cricket_codecs);
-      return ToRtpCapabilities(
-          cricket_codecs,
-          channel_manager()->GetDefaultEnabledAudioRtpHeaderExtensions());
+      cricket_codecs = media_engine()->voice().send_codecs();
+      auto extensions =
+          GetDefaultEnabledRtpHeaderExtensions(media_engine()->voice());
+      return ToRtpCapabilities(cricket_codecs, extensions);
     }
     case cricket::MEDIA_TYPE_VIDEO: {
       cricket::VideoCodecs cricket_codecs;
-      channel_manager()->GetSupportedVideoSendCodecs(&cricket_codecs);
-      return ToRtpCapabilities(
-          cricket_codecs,
-          channel_manager()->GetDefaultEnabledVideoRtpHeaderExtensions());
+      cricket_codecs = media_engine()->video().send_codecs();
+      auto extensions =
+          GetDefaultEnabledRtpHeaderExtensions(media_engine()->video());
+      return ToRtpCapabilities(cricket_codecs, extensions);
     }
     case cricket::MEDIA_TYPE_DATA:
       return RtpCapabilities();
@@ -156,17 +156,17 @@
   switch (kind) {
     case cricket::MEDIA_TYPE_AUDIO: {
       cricket::AudioCodecs cricket_codecs;
-      channel_manager()->GetSupportedAudioReceiveCodecs(&cricket_codecs);
-      return ToRtpCapabilities(
-          cricket_codecs,
-          channel_manager()->GetDefaultEnabledAudioRtpHeaderExtensions());
+      cricket_codecs = media_engine()->voice().recv_codecs();
+      auto extensions =
+          GetDefaultEnabledRtpHeaderExtensions(media_engine()->voice());
+      return ToRtpCapabilities(cricket_codecs, extensions);
     }
     case cricket::MEDIA_TYPE_VIDEO: {
       cricket::VideoCodecs cricket_codecs;
       channel_manager()->GetSupportedVideoReceiveCodecs(&cricket_codecs);
-      return ToRtpCapabilities(
-          cricket_codecs,
-          channel_manager()->GetDefaultEnabledVideoRtpHeaderExtensions());
+      auto extensions =
+          GetDefaultEnabledRtpHeaderExtensions(media_engine()->video());
+      return ToRtpCapabilities(cricket_codecs, extensions);
     }
     case cricket::MEDIA_TYPE_DATA:
       return RtpCapabilities();
@@ -187,12 +187,19 @@
 
 bool PeerConnectionFactory::StartAecDump(FILE* file, int64_t max_size_bytes) {
   RTC_DCHECK_RUN_ON(worker_thread());
-  return channel_manager()->StartAecDump(FileWrapper(file), max_size_bytes);
+  return media_engine()->voice().StartAecDump(FileWrapper(file),
+                                              max_size_bytes);
 }
 
 void PeerConnectionFactory::StopAecDump() {
   RTC_DCHECK_RUN_ON(worker_thread());
-  channel_manager()->StopAecDump();
+  media_engine()->voice().StopAecDump();
+}
+
+cricket::MediaEngineInterface* PeerConnectionFactory::media_engine() const {
+  RTC_DCHECK(context_);
+  RTC_DCHECK(context_->channel_manager());
+  return context_->channel_manager()->media_engine();
 }
 
 RTCErrorOr<rtc::scoped_refptr<PeerConnectionInterface>>
diff --git a/pc/peer_connection_factory.h b/pc/peer_connection_factory.h
index ff3d515..917f054 100644
--- a/pc/peer_connection_factory.h
+++ b/pc/peer_connection_factory.h
@@ -120,6 +120,8 @@
     return context_->field_trials();
   }
 
+  cricket::MediaEngineInterface* media_engine() const;
+
  protected:
   // Constructor used by the static Create() method. Modifies the dependencies.
   PeerConnectionFactory(rtc::scoped_refptr<ConnectionContext> context,
diff --git a/pc/rtp_transceiver_unittest.cc b/pc/rtp_transceiver_unittest.cc
index ce2eefc..3c4b2c9 100644
--- a/pc/rtp_transceiver_unittest.cc
+++ b/pc/rtp_transceiver_unittest.cc
@@ -126,7 +126,7 @@
                 rtc::Thread::Current(),
                 receiver_),
             &channel_manager_,
-            channel_manager_.GetSupportedAudioRtpHeaderExtensions(),
+            channel_manager_.media_engine()->voice().GetRtpHeaderExtensions(),
             /* on_negotiation_needed= */ [] {})) {}
 
   static rtc::scoped_refptr<MockRtpReceiverInternal> MockReceiver() {
diff --git a/pc/rtp_transmission_manager.cc b/pc/rtp_transmission_manager.cc
index 6939a07..b2520d5 100644
--- a/pc/rtp_transmission_manager.cc
+++ b/pc/rtp_transmission_manager.cc
@@ -273,8 +273,8 @@
       rtc::make_ref_counted<RtpTransceiver>(
           sender, receiver, channel_manager(),
           sender->media_type() == cricket::MEDIA_TYPE_AUDIO
-              ? channel_manager()->GetSupportedAudioRtpHeaderExtensions()
-              : channel_manager()->GetSupportedVideoRtpHeaderExtensions(),
+              ? media_engine()->voice().GetRtpHeaderExtensions()
+              : media_engine()->video().GetRtpHeaderExtensions(),
           [this_weak_ptr = weak_ptr_factory_.GetWeakPtr()]() {
             if (this_weak_ptr) {
               this_weak_ptr->OnNegotiationNeeded();
@@ -690,4 +690,8 @@
   return nullptr;
 }
 
+cricket::MediaEngineInterface* RtpTransmissionManager::media_engine() const {
+  return channel_manager()->media_engine();
+}
+
 }  // namespace webrtc
diff --git a/pc/rtp_transmission_manager.h b/pc/rtp_transmission_manager.h
index 6e25f2d..532adcf 100644
--- a/pc/rtp_transmission_manager.h
+++ b/pc/rtp_transmission_manager.h
@@ -244,6 +244,8 @@
   PeerConnectionObserver* Observer() const;
   void OnNegotiationNeeded();
 
+  cricket::MediaEngineInterface* media_engine() const;
+
   TransceiverList transceivers_;
 
   // These lists store sender info seen in local/remote descriptions.
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index 141d3fe..b1afd5c 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -1255,12 +1255,20 @@
 cricket::ChannelManager* SdpOfferAnswerHandler::channel_manager() const {
   return context_->channel_manager();
 }
+
+cricket::MediaEngineInterface* SdpOfferAnswerHandler::media_engine() const {
+  RTC_DCHECK(context_);
+  RTC_DCHECK(context_->channel_manager());
+  return context_->channel_manager()->media_engine();
+}
+
 TransceiverList* SdpOfferAnswerHandler::transceivers() {
   if (!pc_->rtp_manager()) {
     return nullptr;
   }
   return pc_->rtp_manager()->transceivers();
 }
+
 const TransceiverList* SdpOfferAnswerHandler::transceivers() const {
   if (!pc_->rtp_manager()) {
     return nullptr;
@@ -3886,7 +3894,7 @@
         cricket::MEDIA_TYPE_AUDIO, cricket::CN_AUDIO,
         RtpTransceiverDirectionFromSendRecv(send_audio, recv_audio), false);
     options.header_extensions =
-        channel_manager()->GetSupportedAudioRtpHeaderExtensions();
+        media_engine()->voice().GetRtpHeaderExtensions();
     session_options->media_description_options.push_back(options);
     audio_index = session_options->media_description_options.size() - 1;
   }
@@ -3895,7 +3903,7 @@
         cricket::MEDIA_TYPE_VIDEO, cricket::CN_VIDEO,
         RtpTransceiverDirectionFromSendRecv(send_video, recv_video), false);
     options.header_extensions =
-        channel_manager()->GetSupportedVideoRtpHeaderExtensions();
+        media_engine()->video().GetRtpHeaderExtensions();
     session_options->media_description_options.push_back(options);
     video_index = session_options->media_description_options.size() - 1;
   }
@@ -4960,7 +4968,7 @@
         *audio_index = session_options->media_description_options.size() - 1;
       }
       session_options->media_description_options.back().header_extensions =
-          channel_manager()->GetSupportedAudioRtpHeaderExtensions();
+          media_engine()->voice().GetRtpHeaderExtensions();
     } else if (IsVideoContent(&content)) {
       // If we already have an video m= section, reject this extra one.
       if (*video_index) {
@@ -4977,7 +4985,7 @@
         *video_index = session_options->media_description_options.size() - 1;
       }
       session_options->media_description_options.back().header_extensions =
-          channel_manager()->GetSupportedVideoRtpHeaderExtensions();
+          media_engine()->video().GetRtpHeaderExtensions();
     } else if (IsUnsupportedContent(&content)) {
       session_options->media_description_options.push_back(
           cricket::MediaDescriptionOptions(cricket::MEDIA_TYPE_UNSUPPORTED,
diff --git a/pc/sdp_offer_answer.h b/pc/sdp_offer_answer.h
index de814ec..ab3dc20 100644
--- a/pc/sdp_offer_answer.h
+++ b/pc/sdp_offer_answer.h
@@ -576,6 +576,7 @@
   // ==================================================================
   // Access to pc_ variables
   cricket::ChannelManager* channel_manager() const;
+  cricket::MediaEngineInterface* media_engine() const;
   TransceiverList* transceivers();
   const TransceiverList* transceivers() const;
   DataChannelController* data_channel_controller();