From 35f4b4c75550f61611df6debb180ddb7de896b5c Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Mon, 16 May 2022 10:36:43 +0000 Subject: [PATCH] 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 Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#36898} --- pc/channel_manager.cc | 39 -------------------------------- pc/channel_manager.h | 14 ------------ pc/peer_connection_factory.cc | 41 ++++++++++++++++++++-------------- pc/peer_connection_factory.h | 2 ++ pc/rtp_transceiver_unittest.cc | 2 +- pc/rtp_transmission_manager.cc | 8 +++++-- pc/rtp_transmission_manager.h | 2 ++ pc/sdp_offer_answer.cc | 16 +++++++++---- pc/sdp_offer_answer.h | 1 + 9 files changed, 48 insertions(+), 77 deletions(-) diff --git a/pc/channel_manager.cc b/pc/channel_manager.cc index e13db54806..4b08843ba3 100644 --- a/pc/channel_manager.cc +++ b/pc/channel_manager.cc @@ -121,34 +121,6 @@ void ChannelManager::GetSupportedVideoReceiveCodecs( } } -RtpHeaderExtensions ChannelManager::GetDefaultEnabledAudioRtpHeaderExtensions() - const { - if (!media_engine_) - return {}; - return GetDefaultEnabledRtpHeaderExtensions(media_engine_->voice()); -} - -std::vector -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 -ChannelManager::GetSupportedVideoRtpHeaderExtensions() const { - if (!media_engine_) - return {}; - return media_engine_->video().GetRtpHeaderExtensions(); -} - std::unique_ptr ChannelManager::CreateVoiceChannel( webrtc::Call* call, const MediaConfig& media_config, @@ -224,15 +196,4 @@ std::unique_ptr ChannelManager::CreateVideoChannel( 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 8d1ec28001..693b552b84 100644 --- a/pc/channel_manager.h +++ b/pc/channel_manager.h @@ -69,12 +69,6 @@ class ChannelManager : public ChannelFactoryInterface { void GetSupportedAudioReceiveCodecs(std::vector* codecs) const; void GetSupportedVideoSendCodecs(std::vector* codecs) const; void GetSupportedVideoReceiveCodecs(std::vector* codecs) const; - RtpHeaderExtensions GetDefaultEnabledAudioRtpHeaderExtensions() const; - std::vector - GetSupportedAudioRtpHeaderExtensions() const; - RtpHeaderExtensions GetDefaultEnabledVideoRtpHeaderExtensions() const; - std::vector - GetSupportedVideoRtpHeaderExtensions() const; // The operations below all occur on the worker thread. // The caller is responsible for ensuring that destruction happens @@ -102,14 +96,6 @@ class ChannelManager : public ChannelFactoryInterface { 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 media_engine, bool enable_rtx, diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc index 6e6a72ced8..0fece2d5a6 100644 --- a/pc/peer_connection_factory.cc +++ b/pc/peer_connection_factory.cc @@ -129,17 +129,17 @@ RtpCapabilities PeerConnectionFactory::GetRtpSenderCapabilities( 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 @@ RtpCapabilities PeerConnectionFactory::GetRtpReceiverCapabilities( 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 @@ PeerConnectionFactory::CreateAudioSource(const cricket::AudioOptions& options) { 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> diff --git a/pc/peer_connection_factory.h b/pc/peer_connection_factory.h index ff3d515964..917f054fd9 100644 --- a/pc/peer_connection_factory.h +++ b/pc/peer_connection_factory.h @@ -120,6 +120,8 @@ class PeerConnectionFactory : public PeerConnectionFactoryInterface { return context_->field_trials(); } + cricket::MediaEngineInterface* media_engine() const; + protected: // Constructor used by the static Create() method. Modifies the dependencies. PeerConnectionFactory(rtc::scoped_refptr context, diff --git a/pc/rtp_transceiver_unittest.cc b/pc/rtp_transceiver_unittest.cc index ce2eefc974..3c4b2c93e4 100644 --- a/pc/rtp_transceiver_unittest.cc +++ b/pc/rtp_transceiver_unittest.cc @@ -126,7 +126,7 @@ class RtpTransceiverUnifiedPlanTest : public ::testing::Test { rtc::Thread::Current(), receiver_), &channel_manager_, - channel_manager_.GetSupportedAudioRtpHeaderExtensions(), + channel_manager_.media_engine()->voice().GetRtpHeaderExtensions(), /* on_negotiation_needed= */ [] {})) {} static rtc::scoped_refptr MockReceiver() { diff --git a/pc/rtp_transmission_manager.cc b/pc/rtp_transmission_manager.cc index 6939a07dec..b2520d58be 100644 --- a/pc/rtp_transmission_manager.cc +++ b/pc/rtp_transmission_manager.cc @@ -273,8 +273,8 @@ RtpTransmissionManager::CreateAndAddTransceiver( rtc::make_ref_counted( 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 @@ RtpTransmissionManager::FindReceiverById(const std::string& receiver_id) const { 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 6e25f2d9b7..532adcfbfd 100644 --- a/pc/rtp_transmission_manager.h +++ b/pc/rtp_transmission_manager.h @@ -244,6 +244,8 @@ class RtpTransmissionManager : public RtpSenderBase::SetStreamsObserver { 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 141d3fe79e..b1afd5c8f4 100644 --- a/pc/sdp_offer_answer.cc +++ b/pc/sdp_offer_answer.cc @@ -1255,12 +1255,20 @@ void SdpOfferAnswerHandler::Initialize( 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 @@ void SdpOfferAnswerHandler::GetOptionsForPlanBOffer( 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 @@ void SdpOfferAnswerHandler::GetOptionsForPlanBOffer( 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 @@ void SdpOfferAnswerHandler::GenerateMediaDescriptionOptions( *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 @@ void SdpOfferAnswerHandler::GenerateMediaDescriptionOptions( *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 de814ec737..ab3dc200c3 100644 --- a/pc/sdp_offer_answer.h +++ b/pc/sdp_offer_answer.h @@ -576,6 +576,7 @@ class SdpOfferAnswerHandler : public SdpStateProvider, // ================================================================== // Access to pc_ variables cricket::ChannelManager* channel_manager() const; + cricket::MediaEngineInterface* media_engine() const; TransceiverList* transceivers(); const TransceiverList* transceivers() const; DataChannelController* data_channel_controller();