From 36fafc882728393640ec6ee8fcdb78b8e19134b0 Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Thu, 8 Dec 2022 08:47:42 +0000 Subject: [PATCH] Split MediaChannel class to sender and receiver This allows callers to differentiate on whether they need the channel for sending or receiving purposes. Note: This CL is incomplete, in that many places cast the pointers to the concrete subclasses "VideoMediaChannel" and "AudioMediaChannel", which are not split into sending and receiving APIs. The long term goal is to make two MediaChannel-like class APIs, with distinct implementations, and let the RtpSender and RtpReceiver manage those objects, rather than keeping them in the RtpTransceiver. Bug: webrtc:13931 Change-Id: I8d56defe2287bd6552b71571cc6a5ec842927fa4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/287040 Reviewed-by: Tomas Gunnarsson Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#38844} --- media/base/media_channel.h | 133 +++++++----- pc/audio_rtp_receiver.cc | 3 +- pc/audio_rtp_receiver.h | 3 +- pc/channel.cc | 45 +++-- pc/channel.h | 53 ++++- pc/channel_interface.h | 11 +- pc/channel_unittest.cc | 290 ++++++++++++++------------- pc/legacy_stats_collector.cc | 7 +- pc/peer_connection.cc | 2 +- pc/rtc_stats_collector.cc | 10 +- pc/rtp_receiver.h | 3 +- pc/rtp_sender.cc | 3 +- pc/rtp_sender.h | 8 +- pc/rtp_transceiver.cc | 9 +- pc/rtp_transceiver_unittest.cc | 6 +- pc/rtp_transmission_manager.cc | 4 +- pc/test/mock_channel_interface.h | 21 +- pc/test/mock_rtp_receiver_internal.h | 5 +- pc/test/mock_rtp_sender_internal.h | 2 +- pc/video_rtp_receiver.cc | 11 +- pc/video_rtp_receiver.h | 7 +- 21 files changed, 377 insertions(+), 259 deletions(-) diff --git a/media/base/media_channel.h b/media/base/media_channel.h index 5460cdb9ac..14d82e3edd 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -162,29 +162,15 @@ struct VideoOptions { } }; -class MediaChannel { +class MediaBaseChannelInterface { public: - class NetworkInterface { - public: - enum SocketType { ST_RTP, ST_RTCP }; - virtual bool SendPacket(rtc::CopyOnWriteBuffer* packet, - const rtc::PacketOptions& options) = 0; - virtual bool SendRtcp(rtc::CopyOnWriteBuffer* packet, - const rtc::PacketOptions& options) = 0; - virtual int SetOption(SocketType type, - rtc::Socket::Option opt, - int option) = 0; - virtual ~NetworkInterface() {} - }; - - explicit MediaChannel(webrtc::TaskQueueBase* network_thread, - bool enable_dscp = false); - virtual ~MediaChannel(); - + virtual ~MediaBaseChannelInterface() = default; virtual cricket::MediaType media_type() const = 0; - // Sets the abstract interface class for sending RTP/RTCP data. - virtual void SetInterface(NetworkInterface* iface); + // Networking functions. We assume that both the send channel and the + // receive channel send RTP packets (RTCP packets in the case of a receive + // channel). + // Called on the network when an RTP packet is received. virtual void OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) = 0; @@ -197,6 +183,13 @@ class MediaChannel { virtual void OnNetworkRouteChanged( absl::string_view transport_name, const rtc::NetworkRoute& network_route) = 0; +}; + +class MediaSendChannelInterface : virtual public MediaBaseChannelInterface { + public: + virtual ~MediaSendChannelInterface() = default; + + virtual cricket::MediaType media_type() const = 0; // Creates a new outgoing media stream with SSRCs and CNAME as described // by sp. virtual bool AddSendStream(const StreamParams& sp) = 0; @@ -205,6 +198,36 @@ class MediaChannel { // multiple SSRCs. In the case of an ssrc of 0, the possibly cached // StreamParams is removed. virtual bool RemoveSendStream(uint32_t ssrc) = 0; + // Set the frame encryptor to use on all outgoing frames. This is optional. + // This pointers lifetime is managed by the set of RtpSender it is attached + // to. + virtual void SetFrameEncryptor( + uint32_t ssrc, + rtc::scoped_refptr frame_encryptor) = 0; + + virtual webrtc::RTCError SetRtpSendParameters( + uint32_t ssrc, + const webrtc::RtpParameters& parameters, + webrtc::SetParametersCallback callback = nullptr) = 0; + + virtual void SetEncoderToPacketizerFrameTransformer( + uint32_t ssrc, + rtc::scoped_refptr + frame_transformer) = 0; + + // note: The encoder_selector object must remain valid for the lifetime of the + // MediaChannel, unless replaced. + virtual void SetEncoderSelector( + uint32_t ssrc, + webrtc::VideoEncoderFactory::EncoderSelectorInterface* encoder_selector) { + } + virtual webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const = 0; +}; + +class MediaReceiveChannelInterface : virtual public MediaBaseChannelInterface { + public: + virtual ~MediaReceiveChannelInterface() = default; + // Creates a new incoming media stream with SSRCs, CNAME as described // by sp. In the case of a sp without SSRCs, the unsignaled sp is cached // to be used later for unsignaled streams received. @@ -230,33 +253,46 @@ class MediaChannel { // new unsignalled ssrcs. virtual void OnDemuxerCriteriaUpdatePending() = 0; virtual void OnDemuxerCriteriaUpdateComplete() = 0; - // Returns the absoulte sendtime extension id value from media channel. - virtual int GetRtpSendTimeExtnId() const; - // Set the frame encryptor to use on all outgoing frames. This is optional. - // This pointers lifetime is managed by the set of RtpSender it is attached - // to. - // TODO(benwright) make pure virtual once internal supports it. - virtual void SetFrameEncryptor( - uint32_t ssrc, - rtc::scoped_refptr frame_encryptor); // Set the frame decryptor to use on all incoming frames. This is optional. // This pointers lifetimes is managed by the set of RtpReceivers it is // attached to. - // TODO(benwright) make pure virtual once internal supports it. virtual void SetFrameDecryptor( uint32_t ssrc, - rtc::scoped_refptr frame_decryptor); + rtc::scoped_refptr frame_decryptor) = 0; + virtual void SetDepacketizerToDecoderFrameTransformer( + uint32_t ssrc, + rtc::scoped_refptr + frame_transformer) = 0; +}; + +class MediaChannel : public MediaSendChannelInterface, + public MediaReceiveChannelInterface { + public: + class NetworkInterface { + public: + enum SocketType { ST_RTP, ST_RTCP }; + virtual bool SendPacket(rtc::CopyOnWriteBuffer* packet, + const rtc::PacketOptions& options) = 0; + virtual bool SendRtcp(rtc::CopyOnWriteBuffer* packet, + const rtc::PacketOptions& options) = 0; + virtual int SetOption(SocketType type, + rtc::Socket::Option opt, + int option) = 0; + virtual ~NetworkInterface() {} + }; + + explicit MediaChannel(webrtc::TaskQueueBase* network_thread, + bool enable_dscp = false); + virtual ~MediaChannel(); + + // Sets the abstract interface class for sending RTP/RTCP data. + virtual void SetInterface(NetworkInterface* iface); + // Returns the absolute sendtime extension id value from media channel. + virtual int GetRtpSendTimeExtnId() const; // Enable network condition based codec switching. virtual void SetVideoCodecSwitchingEnabled(bool enabled); - // note: The encoder_selector object must remain valid for the lifetime of the - // MediaChannel, unless replaced. - virtual void SetEncoderSelector( - uint32_t ssrc, - webrtc::VideoEncoderFactory::EncoderSelectorInterface* encoder_selector) { - } - // Base method to send packet using NetworkInterface. bool SendPacket(rtc::CopyOnWriteBuffer* packet, const rtc::PacketOptions& options); @@ -279,18 +315,21 @@ class MediaChannel { // Must be called on the network thread. bool HasNetworkInterface() const; - virtual webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const = 0; - virtual webrtc::RTCError SetRtpSendParameters( - uint32_t ssrc, - const webrtc::RtpParameters& parameters, - webrtc::SetParametersCallback callback = nullptr) = 0; + void SetFrameEncryptor(uint32_t ssrc, + rtc::scoped_refptr + frame_encryptor) override; + void SetFrameDecryptor(uint32_t ssrc, + rtc::scoped_refptr + frame_decryptor) override; - virtual void SetEncoderToPacketizerFrameTransformer( + void SetEncoderToPacketizerFrameTransformer( uint32_t ssrc, - rtc::scoped_refptr frame_transformer); - virtual void SetDepacketizerToDecoderFrameTransformer( + rtc::scoped_refptr frame_transformer) + override; + void SetDepacketizerToDecoderFrameTransformer( uint32_t ssrc, - rtc::scoped_refptr frame_transformer); + rtc::scoped_refptr frame_transformer) + override; protected: int SetOptionLocked(NetworkInterface::SocketType type, diff --git a/pc/audio_rtp_receiver.cc b/pc/audio_rtp_receiver.cc index 0dbdf0b713..09acfa8514 100644 --- a/pc/audio_rtp_receiver.cc +++ b/pc/audio_rtp_receiver.cc @@ -314,7 +314,8 @@ void AudioRtpReceiver::SetJitterBufferMinimumDelay( media_channel_->SetBaseMinimumPlayoutDelayMs(*ssrc_, delay_.GetMs()); } -void AudioRtpReceiver::SetMediaChannel(cricket::MediaChannel* media_channel) { +void AudioRtpReceiver::SetMediaChannel( + cricket::MediaReceiveChannelInterface* media_channel) { RTC_DCHECK_RUN_ON(worker_thread_); RTC_DCHECK(media_channel == nullptr || media_channel->media_type() == media_type()); diff --git a/pc/audio_rtp_receiver.h b/pc/audio_rtp_receiver.h index c68315882c..cfebfe5635 100644 --- a/pc/audio_rtp_receiver.h +++ b/pc/audio_rtp_receiver.h @@ -111,7 +111,8 @@ class AudioRtpReceiver : public ObserverInterface, void SetJitterBufferMinimumDelay( absl::optional delay_seconds) override; - void SetMediaChannel(cricket::MediaChannel* media_channel) override; + void SetMediaChannel( + cricket::MediaReceiveChannelInterface* media_channel) override; std::vector GetSources() const override; int AttachmentId() const override { return attachment_id_; } diff --git a/pc/channel.cc b/pc/channel.cc index 0e2345b2c9..3d17f244a0 100644 --- a/pc/channel.cc +++ b/pc/channel.cc @@ -154,7 +154,7 @@ std::string BaseChannel::ToString() const { bool BaseChannel::ConnectToRtpTransport_n() { RTC_DCHECK(rtp_transport_); - RTC_DCHECK(media_channel()); + RTC_DCHECK(media_send_channel()); // We don't need to call OnDemuxerCriteriaUpdatePending/Complete because // there's no previous criteria to worry about. @@ -174,7 +174,7 @@ bool BaseChannel::ConnectToRtpTransport_n() { void BaseChannel::DisconnectFromRtpTransport_n() { RTC_DCHECK(rtp_transport_); - RTC_DCHECK(media_channel()); + RTC_DCHECK(media_send_channel()); rtp_transport_->UnregisterRtpDemuxerSink(this); rtp_transport_->SignalReadyToSend.disconnect(this); rtp_transport_->SignalNetworkRouteChanged.disconnect(this); @@ -458,7 +458,7 @@ bool BaseChannel::MaybeUpdateDemuxerAndRtpExtensions_w( // TODO(bugs.webrtc.org/13536): See if we can do this asynchronously. if (update_demuxer) - media_channel()->OnDemuxerCriteriaUpdatePending(); + media_receive_channel()->OnDemuxerCriteriaUpdatePending(); bool success = network_thread()->BlockingCall([&]() mutable { RTC_DCHECK_RUN_ON(network_thread()); @@ -481,7 +481,7 @@ bool BaseChannel::MaybeUpdateDemuxerAndRtpExtensions_w( }); if (update_demuxer) - media_channel()->OnDemuxerCriteriaUpdateComplete(); + media_receive_channel()->OnDemuxerCriteriaUpdateComplete(); return success; } @@ -584,7 +584,7 @@ bool BaseChannel::SetPayloadTypeDemuxingEnabled_w(bool enabled) { // were matched to this channel by MID or RID. Ideally we'd remove only the // streams that were matched based on payload type alone, but currently // there is no straightforward way to identify those streams. - media_channel()->ResetUnsignaledRecvStream(); + media_receive_channel()->ResetUnsignaledRecvStream(); if (!demuxer_criteria_.payload_types().empty()) { config_changed = true; demuxer_criteria_.payload_types().clear(); @@ -629,7 +629,7 @@ bool BaseChannel::UpdateLocalStreams_w(const std::vector& streams, GetStream(streams, StreamFinder(&old_stream))) { continue; } - if (!media_channel()->RemoveSendStream(old_stream.first_ssrc())) { + if (!media_send_channel()->RemoveSendStream(old_stream.first_ssrc())) { error_desc = StringFormat( "Failed to remove send stream with ssrc %u from m-section with " "mid='%s'.", @@ -672,7 +672,7 @@ bool BaseChannel::UpdateLocalStreams_w(const std::vector& streams, /* flex_fec = */ false, ssrc_generator_); } - if (media_channel()->AddSendStream(new_stream)) { + if (media_send_channel()->AddSendStream(new_stream)) { RTC_LOG(LS_INFO) << "Add send stream ssrc: " << new_stream.ssrcs[0] << " into " << ToString(); } else { @@ -709,12 +709,12 @@ bool BaseChannel::UpdateRemoteStreams_w(const MediaContentDescription* content, // If we no longer have an unsignaled stream, we would like to remove // the unsignaled stream params that are cached. if (!old_stream.has_ssrcs() && !new_has_unsignaled_ssrcs) { - media_channel()->ResetUnsignaledRecvStream(); + media_receive_channel()->ResetUnsignaledRecvStream(); RTC_LOG(LS_INFO) << "Reset unsignaled remote stream for " << ToString() << "."; } else if (old_stream.has_ssrcs() && !GetStreamBySsrc(streams, old_stream.first_ssrc())) { - if (media_channel()->RemoveRecvStream(old_stream.first_ssrc())) { + if (media_receive_channel()->RemoveRecvStream(old_stream.first_ssrc())) { RTC_LOG(LS_INFO) << "Remove remote ssrc: " << old_stream.first_ssrc() << " from " << ToString() << "."; } else { @@ -735,7 +735,7 @@ bool BaseChannel::UpdateRemoteStreams_w(const MediaContentDescription* content, // stream received later. if ((!new_stream.has_ssrcs() && !old_has_unsignaled_ssrcs) || !GetStreamBySsrc(remote_streams_, new_stream.first_ssrc())) { - if (media_channel()->AddRecvStream(new_stream)) { + if (media_receive_channel()->AddRecvStream(new_stream)) { RTC_LOG(LS_INFO) << "Add remote ssrc: " << (new_stream.has_ssrcs() ? std::to_string(new_stream.first_ssrc()) @@ -808,7 +808,7 @@ bool BaseChannel::ClearHandledPayloadTypes() { void BaseChannel::SignalSentPacket_n(const rtc::SentPacket& sent_packet) { RTC_DCHECK_RUN_ON(network_thread()); RTC_DCHECK(network_initialized()); - media_channel()->OnPacketSent(sent_packet); + media_send_channel()->OnPacketSent(sent_packet); } VoiceChannel::VoiceChannel(rtc::Thread* worker_thread, @@ -839,12 +839,12 @@ void VoiceChannel::UpdateMediaSendRecvState_w() { // content. We receive data on the default channel and multiplexed streams. bool ready_to_receive = enabled() && webrtc::RtpTransceiverDirectionHasRecv( local_content_direction()); - media_channel()->SetPlayout(ready_to_receive); + media_receive_channel()->SetPlayout(ready_to_receive); // Send outgoing data if we're the active call, we have the remote content, // and we have had some form of connectivity. bool send = IsReadyToSendMedia_w(); - media_channel()->SetSend(send); + media_send_channel()->SetSend(send); RTC_LOG(LS_INFO) << "Changing voice state, recv=" << ready_to_receive << " send=" << send << " for " << ToString(); @@ -861,7 +861,7 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content, RtpHeaderExtensions header_extensions = GetDeduplicatedRtpHeaderExtensions(content->rtp_header_extensions()); bool update_header_extensions = true; - media_channel()->SetExtmapAllowMixed(content->extmap_allow_mixed()); + media_send_channel()->SetExtmapAllowMixed(content->extmap_allow_mixed()); AudioRecvParameters recv_params = last_recv_params_; RtpParametersFromMediaDescription( @@ -869,7 +869,7 @@ bool VoiceChannel::SetLocalContent_w(const MediaContentDescription* content, webrtc::RtpTransceiverDirectionHasRecv(content->direction()), &recv_params); - if (!media_channel()->SetRecvParameters(recv_params)) { + if (!media_send_channel()->SetRecvParameters(recv_params)) { error_desc = StringFormat( "Failed to set local audio description recv parameters for m-section " "with mid='%s'.", @@ -921,7 +921,8 @@ bool VoiceChannel::SetRemoteContent_w(const MediaContentDescription* content, extensions_filter(), &send_params); send_params.mid = mid(); - bool parameters_applied = media_channel()->SetSendParameters(send_params); + bool parameters_applied = + media_send_channel()->SetSendParameters(send_params); if (!parameters_applied) { error_desc = StringFormat( "Failed to set remote audio description send parameters for m-section " @@ -961,7 +962,7 @@ void VideoChannel::UpdateMediaSendRecvState_w() { // Send outgoing data if we're the active call, we have the remote content, // and we have had some form of connectivity. bool send = IsReadyToSendMedia_w(); - media_channel()->SetSend(send); + media_send_channel()->SetSend(send); RTC_LOG(LS_INFO) << "Changing video state, send=" << send << " for " << ToString(); } @@ -977,7 +978,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content, RtpHeaderExtensions header_extensions = GetDeduplicatedRtpHeaderExtensions(content->rtp_header_extensions()); bool update_header_extensions = true; - media_channel()->SetExtmapAllowMixed(content->extmap_allow_mixed()); + media_send_channel()->SetExtmapAllowMixed(content->extmap_allow_mixed()); VideoRecvParameters recv_params = last_recv_params_; @@ -1007,7 +1008,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content, } } - if (!media_channel()->SetRecvParameters(recv_params)) { + if (!media_send_channel()->SetRecvParameters(recv_params)) { error_desc = StringFormat( "Failed to set local video description recv parameters for m-section " "with mid='%s'.", @@ -1026,7 +1027,7 @@ bool VideoChannel::SetLocalContent_w(const MediaContentDescription* content, last_recv_params_ = recv_params; if (needs_send_params_update) { - if (!media_channel()->SetSendParameters(send_params)) { + if (!media_send_channel()->SetSendParameters(send_params)) { error_desc = StringFormat( "Failed to set send parameters for m-section with mid='%s'.", mid().c_str()); @@ -1092,7 +1093,7 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content, } } - if (!media_channel()->SetSendParameters(send_params)) { + if (!media_send_channel()->SetSendParameters(send_params)) { error_desc = StringFormat( "Failed to set remote video description send parameters for m-section " "with mid='%s'.", @@ -1102,7 +1103,7 @@ bool VideoChannel::SetRemoteContent_w(const MediaContentDescription* content, last_send_params_ = send_params; if (needs_recv_params_update) { - if (!media_channel()->SetRecvParameters(recv_params)) { + if (!media_send_channel()->SetRecvParameters(recv_params)) { error_desc = StringFormat( "Failed to set recv parameters for m-section with mid='%s'.", mid().c_str()); diff --git a/pc/channel.h b/pc/channel.h index 5bf4823be2..bc30993e87 100644 --- a/pc/channel.h +++ b/pc/channel.h @@ -155,14 +155,25 @@ class BaseChannel : public ChannelInterface, // RtpPacketSinkInterface overrides. void OnRtpPacket(const webrtc::RtpPacketReceived& packet) override; - MediaChannel* media_channel() const override { + MediaSendChannelInterface* media_send_channel() const override { return media_channel_.get(); } - VideoMediaChannel* video_media_channel() const override { + VideoMediaChannel* video_media_send_channel() const override { RTC_CHECK(false) << "Attempt to fetch video channel from non-video"; return nullptr; } - VoiceMediaChannel* voice_media_channel() const override { + VoiceMediaChannel* voice_media_send_channel() const override { + RTC_CHECK(false) << "Attempt to fetch voice channel from non-voice"; + return nullptr; + } + MediaReceiveChannelInterface* media_receive_channel() const override { + return media_channel_.get(); + } + VideoMediaChannel* video_media_receive_channel() const override { + RTC_CHECK(false) << "Attempt to fetch video channel from non-video"; + return nullptr; + } + VoiceMediaChannel* voice_media_receive_channel() const override { RTC_CHECK(false) << "Attempt to fetch voice channel from non-voice"; return nullptr; } @@ -368,12 +379,22 @@ class VoiceChannel : public BaseChannel { ~VoiceChannel(); // downcasts a MediaChannel - VoiceMediaChannel* media_channel() const override { - return static_cast(BaseChannel::media_channel()); + VoiceMediaChannel* media_send_channel() const override { + return static_cast(BaseChannel::media_send_channel()); } - VoiceMediaChannel* voice_media_channel() const override { - return static_cast(media_channel()); + VoiceMediaChannel* voice_media_send_channel() const override { + return static_cast(media_send_channel()); + } + + // downcasts a MediaChannel + VoiceMediaChannel* media_receive_channel() const override { + return static_cast( + BaseChannel::media_receive_channel()); + } + + VoiceMediaChannel* voice_media_receive_channel() const override { + return static_cast(media_receive_channel()); } cricket::MediaType media_type() const override { @@ -414,12 +435,22 @@ class VideoChannel : public BaseChannel { ~VideoChannel(); // downcasts a MediaChannel - VideoMediaChannel* media_channel() const override { - return static_cast(BaseChannel::media_channel()); + VideoMediaChannel* media_send_channel() const override { + return static_cast(BaseChannel::media_send_channel()); } - VideoMediaChannel* video_media_channel() const override { - return static_cast(media_channel()); + VideoMediaChannel* video_media_send_channel() const override { + return static_cast(media_send_channel()); + } + + // downcasts a MediaChannel + VideoMediaChannel* media_receive_channel() const override { + return static_cast( + BaseChannel::media_receive_channel()); + } + + VideoMediaChannel* video_media_receive_channel() const override { + return static_cast(media_receive_channel()); } cricket::MediaType media_type() const override { diff --git a/pc/channel_interface.h b/pc/channel_interface.h index 3c6ca6fe6a..032bfad5e3 100644 --- a/pc/channel_interface.h +++ b/pc/channel_interface.h @@ -47,11 +47,16 @@ class ChannelInterface { virtual ~ChannelInterface() = default; virtual cricket::MediaType media_type() const = 0; - virtual MediaChannel* media_channel() const = 0; + virtual MediaSendChannelInterface* media_send_channel() const = 0; // Typecasts of media_channel(). Will cause an exception if the // channel is of the wrong type. - virtual VideoMediaChannel* video_media_channel() const = 0; - virtual VoiceMediaChannel* voice_media_channel() const = 0; + virtual VideoMediaChannel* video_media_send_channel() const = 0; + virtual VoiceMediaChannel* voice_media_send_channel() const = 0; + virtual MediaReceiveChannelInterface* media_receive_channel() const = 0; + // Typecasts of media_channel(). Will cause an exception if the + // channel is of the wrong type. + virtual VideoMediaChannel* video_media_receive_channel() const = 0; + virtual VoiceMediaChannel* voice_media_receive_channel() const = 0; // Returns a string view for the transport name. Fetching the transport name // must be done on the network thread only and note that the lifetime of diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc index 2dd5d090bf..583c2923df 100644 --- a/pc/channel_unittest.cc +++ b/pc/channel_unittest.cc @@ -429,7 +429,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { } void SendRtp1(rtc::Buffer data) { - SendRtp(media_channel1(), std::move(data)); + SendRtp(media_send_channel1(), std::move(data)); } void SendRtp2() { @@ -449,7 +449,8 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { } bool CheckRtp1() { - return media_channel1()->CheckRtp(rtp_packet_.data(), rtp_packet_.size()); + return media_send_channel1()->CheckRtp(rtp_packet_.data(), + rtp_packet_.size()); } bool CheckRtp2() { return media_channel2()->CheckRtp(rtp_packet_.data(), rtp_packet_.size()); @@ -457,7 +458,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { // Methods to check custom data. bool CheckCustomRtp1(uint32_t ssrc, int sequence_number, int pl_type = -1) { rtc::Buffer data = CreateRtpData(ssrc, sequence_number, pl_type); - return media_channel1()->CheckRtp(data.data(), data.size()); + return media_send_channel1()->CheckRtp(data.data(), data.size()); } bool CheckCustomRtp2(uint32_t ssrc, int sequence_number, int pl_type = -1) { rtc::Buffer data = CreateRtpData(ssrc, sequence_number, pl_type); @@ -474,7 +475,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { return data; } - bool CheckNoRtp1() { return media_channel1()->CheckNoRtp(); } + bool CheckNoRtp1() { return media_send_channel1()->CheckNoRtp(); } bool CheckNoRtp2() { return media_channel2()->CheckNoRtp(); } void CreateContent(int flags, @@ -557,13 +558,13 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { void TestInit() { CreateChannels(0, 0); EXPECT_FALSE(IsSrtpActive(channel1_)); - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); if (verify_playout_) { - EXPECT_FALSE(media_channel1()->playout()); + EXPECT_FALSE(media_send_channel1()->playout()); } - EXPECT_TRUE(media_channel1()->codecs().empty()); - EXPECT_TRUE(media_channel1()->recv_streams().empty()); - EXPECT_TRUE(media_channel1()->rtp_packets().empty()); + EXPECT_TRUE(media_send_channel1()->codecs().empty()); + EXPECT_TRUE(media_send_channel1()->recv_streams().empty()); + EXPECT_TRUE(media_send_channel1()->rtp_packets().empty()); } // Test that SetLocalContent and SetRemoteContent properly configure @@ -574,11 +575,11 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { CreateContent(0, kPcmuCodec, kH264Codec, &content); std::string err; EXPECT_TRUE(channel1_->SetLocalContent(&content, SdpType::kOffer, err)); - EXPECT_EQ(0U, media_channel1()->codecs().size()); + EXPECT_EQ(0U, media_send_channel1()->codecs().size()); EXPECT_TRUE(channel1_->SetRemoteContent(&content, SdpType::kAnswer, err)); - ASSERT_EQ(1U, media_channel1()->codecs().size()); + ASSERT_EQ(1U, media_send_channel1()->codecs().size()); EXPECT_TRUE( - CodecMatches(content.codecs()[0], media_channel1()->codecs()[0])); + CodecMatches(content.codecs()[0], media_send_channel1()->codecs()[0])); } // Test that SetLocalContent and SetRemoteContent properly configure @@ -596,7 +597,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(channel1_->SetLocalContent(&content, SdpType::kOffer, err)); content.set_extmap_allow_mixed_enum(answer_enum); EXPECT_TRUE(channel1_->SetRemoteContent(&content, SdpType::kAnswer, err)); - EXPECT_EQ(answer, media_channel1()->ExtmapAllowMixed()); + EXPECT_EQ(answer, media_send_channel1()->ExtmapAllowMixed()); } void TestSetContentsExtmapAllowMixedCallee(bool offer, bool answer) { // For a callee, SetRemoteContent() is called first with an offer and next @@ -611,7 +612,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(channel1_->SetRemoteContent(&content, SdpType::kOffer, err)); content.set_extmap_allow_mixed_enum(answer_enum); EXPECT_TRUE(channel1_->SetLocalContent(&content, SdpType::kAnswer, err)); - EXPECT_EQ(answer, media_channel1()->ExtmapAllowMixed()); + EXPECT_EQ(answer, media_send_channel1()->ExtmapAllowMixed()); } // Test that SetLocalContent and SetRemoteContent properly deals @@ -622,11 +623,11 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { std::string err; EXPECT_TRUE(channel1_->SetLocalContent(&content, SdpType::kOffer, err)); CreateContent(0, kPcmuCodec, kH264Codec, &content); - EXPECT_EQ(0U, media_channel1()->codecs().size()); + EXPECT_EQ(0U, media_send_channel1()->codecs().size()); EXPECT_TRUE(channel1_->SetRemoteContent(&content, SdpType::kAnswer, err)); - ASSERT_EQ(1U, media_channel1()->codecs().size()); + ASSERT_EQ(1U, media_send_channel1()->codecs().size()); EXPECT_TRUE( - CodecMatches(content.codecs()[0], media_channel1()->codecs()[0])); + CodecMatches(content.codecs()[0], media_send_channel1()->codecs()[0])); } // Test that SetLocalContent and SetRemoteContent properly set RTCP @@ -668,7 +669,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { std::string err; EXPECT_TRUE(channel1_->SetLocalContent(&content1, SdpType::kOffer, err)); channel1_->Enable(true); - EXPECT_EQ(1u, media_channel1()->send_streams().size()); + EXPECT_EQ(1u, media_send_channel1()->send_streams().size()); EXPECT_TRUE(channel2_->SetRemoteContent(&content1, SdpType::kOffer, err)); EXPECT_EQ(1u, media_channel2()->recv_streams().size()); @@ -678,7 +679,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { typename T::Content content2; CreateContent(0, kPcmuCodec, kH264Codec, &content2); EXPECT_TRUE(channel1_->SetRemoteContent(&content2, SdpType::kAnswer, err)); - EXPECT_EQ(0u, media_channel1()->recv_streams().size()); + EXPECT_EQ(0u, media_send_channel1()->recv_streams().size()); EXPECT_TRUE(channel2_->SetLocalContent(&content2, SdpType::kAnswer, err)); channel2_->Enable(true); EXPECT_EQ(0u, media_channel2()->send_streams().size()); @@ -696,14 +697,14 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_EQ(stream2, media_channel2()->send_streams()[0]); EXPECT_TRUE(channel1_->SetRemoteContent(&content3, SdpType::kOffer, err)); - ASSERT_EQ(1u, media_channel1()->recv_streams().size()); - EXPECT_EQ(stream2, media_channel1()->recv_streams()[0]); + ASSERT_EQ(1u, media_send_channel1()->recv_streams().size()); + EXPECT_EQ(stream2, media_send_channel1()->recv_streams()[0]); // Channel 1 replies but stop sending stream1. typename T::Content content4; CreateContent(0, kPcmuCodec, kH264Codec, &content4); EXPECT_TRUE(channel1_->SetLocalContent(&content4, SdpType::kAnswer, err)); - EXPECT_EQ(0u, media_channel1()->send_streams().size()); + EXPECT_EQ(0u, media_send_channel1()->send_streams().size()); EXPECT_TRUE(channel2_->SetRemoteContent(&content4, SdpType::kAnswer, err)); EXPECT_EQ(0u, media_channel2()->recv_streams().size()); @@ -717,9 +718,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { void TestPlayoutAndSendingStates() { CreateChannels(0, 0); if (verify_playout_) { - EXPECT_FALSE(media_channel1()->playout()); + EXPECT_FALSE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); if (verify_playout_) { EXPECT_FALSE(media_channel2()->playout()); } @@ -727,16 +728,16 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { channel1_->Enable(true); FlushCurrentThread(); if (verify_playout_) { - EXPECT_FALSE(media_channel1()->playout()); + EXPECT_FALSE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); std::string err; EXPECT_TRUE(channel1_->SetLocalContent(&local_media_content1_, SdpType::kOffer, err)); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); EXPECT_TRUE(channel2_->SetRemoteContent(&local_media_content1_, SdpType::kOffer, err)); if (verify_playout_) { @@ -751,9 +752,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_FALSE(media_channel2()->sending()); ConnectFakeTransports(); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); if (verify_playout_) { EXPECT_FALSE(media_channel2()->playout()); } @@ -767,9 +768,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(channel1_->SetRemoteContent(&local_media_content2_, SdpType::kAnswer, err)); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_TRUE(media_channel1()->sending()); + EXPECT_TRUE(media_send_channel1()->sending()); } // Test that changing the MediaContentDirection in the local and remote @@ -787,9 +788,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { channel2_->Enable(true); FlushCurrentThread(); if (verify_playout_) { - EXPECT_FALSE(media_channel1()->playout()); + EXPECT_FALSE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); if (verify_playout_) { EXPECT_FALSE(media_channel2()->playout()); } @@ -804,9 +805,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { ConnectFakeTransports(); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); // remote InActive + EXPECT_FALSE(media_send_channel1()->sending()); // remote InActive if (verify_playout_) { EXPECT_FALSE(media_channel2()->playout()); // local InActive } @@ -819,9 +820,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { channel1_->SetRemoteContent(&content2, SdpType::kPrAnswer, err)); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_TRUE(media_channel1()->sending()); + EXPECT_TRUE(media_send_channel1()->sending()); if (verify_playout_) { EXPECT_TRUE(media_channel2()->playout()); // local RecvOnly } @@ -833,9 +834,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(channel1_->SetRemoteContent(&content2, SdpType::kAnswer, err)); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_TRUE(media_channel1()->sending()); + EXPECT_TRUE(media_send_channel1()->sending()); if (verify_playout_) { EXPECT_TRUE(media_channel2()->playout()); } @@ -855,15 +856,15 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { CreateChannels(DTLS, DTLS); SendInitiate(); - typename T::MediaChannel* media_channel1 = - static_cast(channel1_->media_channel()); - ASSERT_TRUE(media_channel1); + typename T::MediaChannel* media_send_channel1 = + static_cast(channel1_->media_send_channel()); + ASSERT_TRUE(media_send_channel1); // Need to wait for the threads before calling // `set_num_network_route_changes` because the network route would be set // when creating the channel. WaitForThreads(); - media_channel1->set_num_network_route_changes(0); + media_send_channel1->set_num_network_route_changes(0); SendTask(network_thread_, [this] { rtc::NetworkRoute network_route; // The transport channel becomes disconnected. @@ -871,9 +872,9 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { absl::optional(network_route)); }); WaitForThreads(); - EXPECT_EQ(1, media_channel1->num_network_route_changes()); - EXPECT_FALSE(media_channel1->last_network_route().connected); - media_channel1->set_num_network_route_changes(0); + EXPECT_EQ(1, media_send_channel1->num_network_route_changes()); + EXPECT_FALSE(media_send_channel1->last_network_route().connected); + media_send_channel1->set_num_network_route_changes(0); SendTask(network_thread_, [this] { rtc::NetworkRoute network_route; @@ -890,16 +891,16 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { absl::optional(network_route)); }); WaitForThreads(); - EXPECT_EQ(1, media_channel1->num_network_route_changes()); - EXPECT_TRUE(media_channel1->last_network_route().connected); + EXPECT_EQ(1, media_send_channel1->num_network_route_changes()); + EXPECT_TRUE(media_send_channel1->last_network_route().connected); EXPECT_EQ(kLocalNetId, - media_channel1->last_network_route().local.network_id()); + media_send_channel1->last_network_route().local.network_id()); EXPECT_EQ(kRemoteNetId, - media_channel1->last_network_route().remote.network_id()); + media_send_channel1->last_network_route().remote.network_id()); EXPECT_EQ(kLastPacketId, - media_channel1->last_network_route().last_sent_packet_id); + media_send_channel1->last_network_route().last_sent_packet_id); EXPECT_EQ(kTransportOverheadPerPacket + kSrtpOverheadPerPacket, - media_channel1->transport_overhead_per_packet()); + media_send_channel1->transport_overhead_per_packet()); } // Test setting up a call. @@ -908,13 +909,13 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_FALSE(IsSrtpActive(channel1_)); EXPECT_TRUE(SendInitiate()); if (verify_playout_) { - EXPECT_TRUE(media_channel1()->playout()); + EXPECT_TRUE(media_send_channel1()->playout()); } - EXPECT_FALSE(media_channel1()->sending()); + EXPECT_FALSE(media_send_channel1()->sending()); EXPECT_TRUE(SendAccept()); EXPECT_FALSE(IsSrtpActive(channel1_)); - EXPECT_TRUE(media_channel1()->sending()); - EXPECT_EQ(1U, media_channel1()->codecs().size()); + EXPECT_TRUE(media_send_channel1()->sending()); + EXPECT_EQ(1U, media_send_channel1()->codecs().size()); if (verify_playout_) { EXPECT_TRUE(media_channel2()->playout()); } @@ -1046,7 +1047,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { // Regain writability SendTask(network_thread_, [this] { fake_rtp_dtls_transport1_->SetWritable(true); }); - EXPECT_TRUE(media_channel1()->sending()); + EXPECT_TRUE(media_send_channel1()->sending()); SendRtp1(); SendRtp2(); WaitForThreads(); @@ -1060,7 +1061,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { bool asymmetric = true; fake_rtp_dtls_transport1_->SetDestination(nullptr, asymmetric); }); - EXPECT_TRUE(media_channel1()->sending()); + EXPECT_TRUE(media_send_channel1()->sending()); // Should fail also. SendRtp1(); @@ -1076,7 +1077,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { fake_rtp_dtls_transport1_->SetDestination(fake_rtp_dtls_transport2_.get(), asymmetric); }); - EXPECT_TRUE(media_channel1()->sending()); + EXPECT_TRUE(media_send_channel1()->sending()); SendRtp1(); SendRtp2(); WaitForThreads(); @@ -1129,17 +1130,17 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { std::unique_ptr content( CreateMediaContentWithStream(1)); - media_channel1()->set_fail_set_recv_codecs(true); + media_send_channel1()->set_fail_set_recv_codecs(true); EXPECT_FALSE( channel1_->SetLocalContent(content.get(), SdpType::kOffer, err)); EXPECT_FALSE( channel1_->SetLocalContent(content.get(), SdpType::kAnswer, err)); - media_channel1()->set_fail_set_send_codecs(true); + media_send_channel1()->set_fail_set_send_codecs(true); EXPECT_FALSE( channel1_->SetRemoteContent(content.get(), SdpType::kOffer, err)); - media_channel1()->set_fail_set_send_codecs(true); + media_send_channel1()->set_fail_set_send_codecs(true); EXPECT_FALSE( channel1_->SetRemoteContent(content.get(), SdpType::kAnswer, err)); } @@ -1152,14 +1153,14 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { CreateMediaContentWithStream(1)); EXPECT_TRUE( channel1_->SetLocalContent(content1.get(), SdpType::kOffer, err)); - EXPECT_TRUE(media_channel1()->HasSendStream(1)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(1)); std::unique_ptr content2( CreateMediaContentWithStream(2)); EXPECT_TRUE( channel1_->SetLocalContent(content2.get(), SdpType::kOffer, err)); - EXPECT_FALSE(media_channel1()->HasSendStream(1)); - EXPECT_TRUE(media_channel1()->HasSendStream(2)); + EXPECT_FALSE(media_send_channel1()->HasSendStream(1)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(2)); } void TestReceiveTwoOffers() { @@ -1170,14 +1171,14 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { CreateMediaContentWithStream(1)); EXPECT_TRUE( channel1_->SetRemoteContent(content1.get(), SdpType::kOffer, err)); - EXPECT_TRUE(media_channel1()->HasRecvStream(1)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(1)); std::unique_ptr content2( CreateMediaContentWithStream(2)); EXPECT_TRUE( channel1_->SetRemoteContent(content2.get(), SdpType::kOffer, err)); - EXPECT_FALSE(media_channel1()->HasRecvStream(1)); - EXPECT_TRUE(media_channel1()->HasRecvStream(2)); + EXPECT_FALSE(media_send_channel1()->HasRecvStream(1)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(2)); } void TestSendPrAnswer() { @@ -1189,24 +1190,24 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { CreateMediaContentWithStream(1)); EXPECT_TRUE( channel1_->SetRemoteContent(content1.get(), SdpType::kOffer, err)); - EXPECT_TRUE(media_channel1()->HasRecvStream(1)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(1)); // Send PR answer std::unique_ptr content2( CreateMediaContentWithStream(2)); EXPECT_TRUE( channel1_->SetLocalContent(content2.get(), SdpType::kPrAnswer, err)); - EXPECT_TRUE(media_channel1()->HasRecvStream(1)); - EXPECT_TRUE(media_channel1()->HasSendStream(2)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(1)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(2)); // Send answer std::unique_ptr content3( CreateMediaContentWithStream(3)); EXPECT_TRUE( channel1_->SetLocalContent(content3.get(), SdpType::kAnswer, err)); - EXPECT_TRUE(media_channel1()->HasRecvStream(1)); - EXPECT_FALSE(media_channel1()->HasSendStream(2)); - EXPECT_TRUE(media_channel1()->HasSendStream(3)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(1)); + EXPECT_FALSE(media_send_channel1()->HasSendStream(2)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(3)); } void TestReceivePrAnswer() { @@ -1218,39 +1219,39 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { CreateMediaContentWithStream(1)); EXPECT_TRUE( channel1_->SetLocalContent(content1.get(), SdpType::kOffer, err)); - EXPECT_TRUE(media_channel1()->HasSendStream(1)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(1)); // Receive PR answer std::unique_ptr content2( CreateMediaContentWithStream(2)); EXPECT_TRUE( channel1_->SetRemoteContent(content2.get(), SdpType::kPrAnswer, err)); - EXPECT_TRUE(media_channel1()->HasSendStream(1)); - EXPECT_TRUE(media_channel1()->HasRecvStream(2)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(1)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(2)); // Receive answer std::unique_ptr content3( CreateMediaContentWithStream(3)); EXPECT_TRUE( channel1_->SetRemoteContent(content3.get(), SdpType::kAnswer, err)); - EXPECT_TRUE(media_channel1()->HasSendStream(1)); - EXPECT_FALSE(media_channel1()->HasRecvStream(2)); - EXPECT_TRUE(media_channel1()->HasRecvStream(3)); + EXPECT_TRUE(media_send_channel1()->HasSendStream(1)); + EXPECT_FALSE(media_send_channel1()->HasRecvStream(2)); + EXPECT_TRUE(media_send_channel1()->HasRecvStream(3)); } void TestOnTransportReadyToSend() { CreateChannels(0, 0); - EXPECT_FALSE(media_channel1()->ready_to_send()); + EXPECT_FALSE(media_send_channel1()->ready_to_send()); network_thread_->PostTask( [this] { channel1_->OnTransportReadyToSend(true); }); WaitForThreads(); - EXPECT_TRUE(media_channel1()->ready_to_send()); + EXPECT_TRUE(media_send_channel1()->ready_to_send()); network_thread_->PostTask( [this] { channel1_->OnTransportReadyToSend(false); }); WaitForThreads(); - EXPECT_FALSE(media_channel1()->ready_to_send()); + EXPECT_FALSE(media_send_channel1()->ready_to_send()); } bool SetRemoteContentWithBitrateLimit(int remote_limit) { @@ -1279,8 +1280,8 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { std::string err; EXPECT_TRUE(channel1_->SetLocalContent(&local_media_content1_, SdpType::kOffer, err)); - EXPECT_EQ(media_channel1()->max_bps(), -1); - VerifyMaxBitrate(media_channel1()->GetRtpSendParameters(kSsrc1), + EXPECT_EQ(media_send_channel1()->max_bps(), -1); + VerifyMaxBitrate(media_send_channel1()->GetRtpSendParameters(kSsrc1), absl::nullopt); } @@ -1397,16 +1398,18 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { ProcessThreadQueue(rtc::Thread::Current()); } - typename T::MediaChannel* media_channel1() { + typename T::MediaChannel* media_send_channel1() { RTC_DCHECK(channel1_); - RTC_DCHECK(channel1_->media_channel()); - return static_cast(channel1_->media_channel()); + RTC_DCHECK(channel1_->media_send_channel()); + return static_cast( + channel1_->media_send_channel()); } typename T::MediaChannel* media_channel2() { RTC_DCHECK(channel2_); - RTC_DCHECK(channel2_->media_channel()); - return static_cast(channel2_->media_channel()); + RTC_DCHECK(channel2_->media_send_channel()); + return static_cast( + channel2_->media_send_channel()); } rtc::AutoThread main_thread_; @@ -1595,8 +1598,8 @@ class VideoChannelDoubleThreadTest : public ChannelTest { TEST_F(VoiceChannelSingleThreadTest, TestInit) { Base::TestInit(); - EXPECT_FALSE(media_channel1()->IsStreamMuted(0)); - EXPECT_TRUE(media_channel1()->dtmf_info_queue().empty()); + EXPECT_FALSE(media_send_channel1()->IsStreamMuted(0)); + EXPECT_TRUE(media_send_channel1()->dtmf_info_queue().empty()); } TEST_F(VoiceChannelSingleThreadTest, TestDeinit) { @@ -1732,8 +1735,8 @@ TEST_F(VoiceChannelSingleThreadTest, SocketOptionsMergedOnSetTransport) { // VoiceChannelDoubleThreadTest TEST_F(VoiceChannelDoubleThreadTest, TestInit) { Base::TestInit(); - EXPECT_FALSE(media_channel1()->IsStreamMuted(0)); - EXPECT_TRUE(media_channel1()->dtmf_info_queue().empty()); + EXPECT_FALSE(media_send_channel1()->IsStreamMuted(0)); + EXPECT_TRUE(media_send_channel1()->dtmf_info_queue().empty()); } TEST_F(VoiceChannelDoubleThreadTest, TestDeinit) { @@ -2016,14 +2019,15 @@ TEST_F(VideoChannelSingleThreadTest, TestSetLocalOfferWithPacketization) { std::string err; EXPECT_TRUE(channel1_->SetLocalContent(&video, SdpType::kOffer, err)); - EXPECT_THAT(media_channel1()->send_codecs(), testing::IsEmpty()); - ASSERT_THAT(media_channel1()->recv_codecs(), testing::SizeIs(2)); - EXPECT_TRUE( - media_channel1()->recv_codecs()[0].Matches(kVp8Codec, &field_trials_)); - EXPECT_EQ(media_channel1()->recv_codecs()[0].packetization, absl::nullopt); - EXPECT_TRUE( - media_channel1()->recv_codecs()[1].Matches(vp9_codec, &field_trials_)); - EXPECT_EQ(media_channel1()->recv_codecs()[1].packetization, + EXPECT_THAT(media_send_channel1()->send_codecs(), testing::IsEmpty()); + ASSERT_THAT(media_send_channel1()->recv_codecs(), testing::SizeIs(2)); + EXPECT_TRUE(media_send_channel1()->recv_codecs()[0].Matches(kVp8Codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[0].packetization, + absl::nullopt); + EXPECT_TRUE(media_send_channel1()->recv_codecs()[1].Matches(vp9_codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[1].packetization, cricket::kPacketizationParamRaw); } @@ -2039,14 +2043,15 @@ TEST_F(VideoChannelSingleThreadTest, TestSetRemoteOfferWithPacketization) { std::string err; EXPECT_TRUE(channel1_->SetRemoteContent(&video, SdpType::kOffer, err)); EXPECT_TRUE(err.empty()); - EXPECT_THAT(media_channel1()->recv_codecs(), testing::IsEmpty()); - ASSERT_THAT(media_channel1()->send_codecs(), testing::SizeIs(2)); - EXPECT_TRUE( - media_channel1()->send_codecs()[0].Matches(kVp8Codec, &field_trials_)); - EXPECT_EQ(media_channel1()->send_codecs()[0].packetization, absl::nullopt); - EXPECT_TRUE( - media_channel1()->send_codecs()[1].Matches(vp9_codec, &field_trials_)); - EXPECT_EQ(media_channel1()->send_codecs()[1].packetization, + EXPECT_THAT(media_send_channel1()->recv_codecs(), testing::IsEmpty()); + ASSERT_THAT(media_send_channel1()->send_codecs(), testing::SizeIs(2)); + EXPECT_TRUE(media_send_channel1()->send_codecs()[0].Matches(kVp8Codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->send_codecs()[0].packetization, + absl::nullopt); + EXPECT_TRUE(media_send_channel1()->send_codecs()[1].Matches(vp9_codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->send_codecs()[1].packetization, cricket::kPacketizationParamRaw); } @@ -2064,21 +2069,23 @@ TEST_F(VideoChannelSingleThreadTest, TestSetAnswerWithPacketization) { EXPECT_TRUE(err.empty()); EXPECT_TRUE(channel1_->SetRemoteContent(&video, SdpType::kAnswer, err)); EXPECT_TRUE(err.empty()); - ASSERT_THAT(media_channel1()->recv_codecs(), testing::SizeIs(2)); - EXPECT_TRUE( - media_channel1()->recv_codecs()[0].Matches(kVp8Codec, &field_trials_)); - EXPECT_EQ(media_channel1()->recv_codecs()[0].packetization, absl::nullopt); - EXPECT_TRUE( - media_channel1()->recv_codecs()[1].Matches(vp9_codec, &field_trials_)); - EXPECT_EQ(media_channel1()->recv_codecs()[1].packetization, + ASSERT_THAT(media_send_channel1()->recv_codecs(), testing::SizeIs(2)); + EXPECT_TRUE(media_send_channel1()->recv_codecs()[0].Matches(kVp8Codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[0].packetization, + absl::nullopt); + EXPECT_TRUE(media_send_channel1()->recv_codecs()[1].Matches(vp9_codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[1].packetization, cricket::kPacketizationParamRaw); - EXPECT_THAT(media_channel1()->send_codecs(), testing::SizeIs(2)); - EXPECT_TRUE( - media_channel1()->send_codecs()[0].Matches(kVp8Codec, &field_trials_)); - EXPECT_EQ(media_channel1()->send_codecs()[0].packetization, absl::nullopt); - EXPECT_TRUE( - media_channel1()->send_codecs()[1].Matches(vp9_codec, &field_trials_)); - EXPECT_EQ(media_channel1()->send_codecs()[1].packetization, + EXPECT_THAT(media_send_channel1()->send_codecs(), testing::SizeIs(2)); + EXPECT_TRUE(media_send_channel1()->send_codecs()[0].Matches(kVp8Codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->send_codecs()[0].packetization, + absl::nullopt); + EXPECT_TRUE(media_send_channel1()->send_codecs()[1].Matches(vp9_codec, + &field_trials_)); + EXPECT_EQ(media_send_channel1()->send_codecs()[1].packetization, cricket::kPacketizationParamRaw); } @@ -2096,10 +2103,12 @@ TEST_F(VideoChannelSingleThreadTest, TestSetLocalAnswerWithoutPacketization) { std::string err; EXPECT_TRUE(channel1_->SetRemoteContent(&remote_video, SdpType::kOffer, err)); EXPECT_TRUE(channel1_->SetLocalContent(&local_video, SdpType::kAnswer, err)); - ASSERT_THAT(media_channel1()->recv_codecs(), testing::SizeIs(1)); - EXPECT_EQ(media_channel1()->recv_codecs()[0].packetization, absl::nullopt); - ASSERT_THAT(media_channel1()->send_codecs(), testing::SizeIs(1)); - EXPECT_EQ(media_channel1()->send_codecs()[0].packetization, absl::nullopt); + ASSERT_THAT(media_send_channel1()->recv_codecs(), testing::SizeIs(1)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[0].packetization, + absl::nullopt); + ASSERT_THAT(media_send_channel1()->send_codecs(), testing::SizeIs(1)); + EXPECT_EQ(media_send_channel1()->send_codecs()[0].packetization, + absl::nullopt); } TEST_F(VideoChannelSingleThreadTest, TestSetRemoteAnswerWithoutPacketization) { @@ -2117,10 +2126,12 @@ TEST_F(VideoChannelSingleThreadTest, TestSetRemoteAnswerWithoutPacketization) { EXPECT_TRUE(channel1_->SetLocalContent(&local_video, SdpType::kOffer, err)); EXPECT_TRUE( channel1_->SetRemoteContent(&remote_video, SdpType::kAnswer, err)); - ASSERT_THAT(media_channel1()->recv_codecs(), testing::SizeIs(1)); - EXPECT_EQ(media_channel1()->recv_codecs()[0].packetization, absl::nullopt); - ASSERT_THAT(media_channel1()->send_codecs(), testing::SizeIs(1)); - EXPECT_EQ(media_channel1()->send_codecs()[0].packetization, absl::nullopt); + ASSERT_THAT(media_send_channel1()->recv_codecs(), testing::SizeIs(1)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[0].packetization, + absl::nullopt); + ASSERT_THAT(media_send_channel1()->send_codecs(), testing::SizeIs(1)); + EXPECT_EQ(media_send_channel1()->send_codecs()[0].packetization, + absl::nullopt); } TEST_F(VideoChannelSingleThreadTest, @@ -2142,10 +2153,10 @@ TEST_F(VideoChannelSingleThreadTest, EXPECT_FALSE( channel1_->SetRemoteContent(&remote_video, SdpType::kAnswer, err)); EXPECT_FALSE(err.empty()); - ASSERT_THAT(media_channel1()->recv_codecs(), testing::SizeIs(1)); - EXPECT_EQ(media_channel1()->recv_codecs()[0].packetization, + ASSERT_THAT(media_send_channel1()->recv_codecs(), testing::SizeIs(1)); + EXPECT_EQ(media_send_channel1()->recv_codecs()[0].packetization, cricket::kPacketizationParamRaw); - EXPECT_THAT(media_channel1()->send_codecs(), testing::IsEmpty()); + EXPECT_THAT(media_send_channel1()->send_codecs(), testing::IsEmpty()); } TEST_F(VideoChannelSingleThreadTest, @@ -2165,9 +2176,10 @@ TEST_F(VideoChannelSingleThreadTest, EXPECT_TRUE(err.empty()); EXPECT_FALSE(channel1_->SetLocalContent(&local_video, SdpType::kAnswer, err)); EXPECT_FALSE(err.empty()); - EXPECT_THAT(media_channel1()->recv_codecs(), testing::IsEmpty()); - ASSERT_THAT(media_channel1()->send_codecs(), testing::SizeIs(1)); - EXPECT_EQ(media_channel1()->send_codecs()[0].packetization, absl::nullopt); + EXPECT_THAT(media_send_channel1()->recv_codecs(), testing::IsEmpty()); + ASSERT_THAT(media_send_channel1()->send_codecs(), testing::SizeIs(1)); + EXPECT_EQ(media_send_channel1()->send_codecs()[0].packetization, + absl::nullopt); } // VideoChannelDoubleThreadTest diff --git a/pc/legacy_stats_collector.cc b/pc/legacy_stats_collector.cc index b710bc16e6..5941b8b27f 100644 --- a/pc/legacy_stats_collector.cc +++ b/pc/legacy_stats_collector.cc @@ -1042,8 +1042,7 @@ void LegacyStatsCollector::ExtractBweInfo() { } auto* video_channel = transceiver->internal()->channel(); if (video_channel) { - video_media_channels.push_back(static_cast( - video_channel->media_channel())); + video_media_channels.push_back(video_channel->video_media_send_channel()); } } @@ -1151,7 +1150,7 @@ class VideoMediaChannelStatsGatherer final : public MediaChannelStatsGatherer { }; std::unique_ptr CreateMediaChannelStatsGatherer( - cricket::MediaChannel* channel) { + cricket::MediaSendChannelInterface* channel) { RTC_DCHECK(channel); if (channel->media_type() == cricket::MEDIA_TYPE_AUDIO) { return std::make_unique( @@ -1180,7 +1179,7 @@ void LegacyStatsCollector::ExtractMediaInfo( continue; } std::unique_ptr gatherer = - CreateMediaChannelStatsGatherer(channel->media_channel()); + CreateMediaChannelStatsGatherer(channel->media_send_channel()); gatherer->mid = channel->mid(); gatherer->transport_name = transport_names_by_mid.at(gatherer->mid); diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc index 5f6016a9dc..8f2015ecde 100644 --- a/pc/peer_connection.cc +++ b/pc/peer_connection.cc @@ -1637,7 +1637,7 @@ RTCError PeerConnection::SetConfiguration( auto* video_channel = transceiver->internal()->channel(); if (video_channel) channels.push_back(static_cast( - video_channel->media_channel())); + video_channel->media_send_channel())); } worker_thread()->BlockingCall( diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc index f0070dfda6..7b76953ea9 100644 --- a/pc/rtc_stats_collector.cc +++ b/pc/rtc_stats_collector.cc @@ -2360,13 +2360,13 @@ void RTCStatsCollector::PrepareTransceiverStatsInfosAndCallStats_s_w_n() { if (media_type == cricket::MEDIA_TYPE_AUDIO) { cricket::VoiceMediaChannel* voice_channel = - static_cast(channel->media_channel()); + channel->voice_media_send_channel(); RTC_DCHECK(voice_stats.find(voice_channel) == voice_stats.end()); voice_stats.insert( std::make_pair(voice_channel, cricket::VoiceMediaInfo())); } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { cricket::VideoMediaChannel* video_channel = - static_cast(channel->media_channel()); + channel->video_media_send_channel(); RTC_DCHECK(video_stats.find(video_channel) == video_stats.end()); video_stats.insert( std::make_pair(video_channel, cricket::VideoMediaInfo())); @@ -2405,14 +2405,12 @@ void RTCStatsCollector::PrepareTransceiverStatsInfosAndCallStats_s_w_n() { cricket::MediaType media_type = transceiver->media_type(); if (media_type == cricket::MEDIA_TYPE_AUDIO) { cricket::VoiceMediaChannel* voice_channel = - static_cast( - channel->media_channel()); + channel->voice_media_send_channel(); RTC_DCHECK(voice_stats.find(voice_channel) != voice_stats.end()); voice_media_info = std::move(voice_stats[voice_channel]); } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { cricket::VideoMediaChannel* video_channel = - static_cast( - channel->media_channel()); + channel->video_media_send_channel(); RTC_DCHECK(video_stats.find(video_channel) != video_stats.end()); video_media_info = std::move(video_stats[video_channel]); } diff --git a/pc/rtp_receiver.h b/pc/rtp_receiver.h index 8c49f56b75..7622139f83 100644 --- a/pc/rtp_receiver.h +++ b/pc/rtp_receiver.h @@ -53,7 +53,8 @@ class RtpReceiverInternal : public RtpReceiverInterface { // * SetMediaChannel(nullptr) must be called before the media channel is // destroyed. // * This method must be invoked on the worker thread. - virtual void SetMediaChannel(cricket::MediaChannel* media_channel) = 0; + virtual void SetMediaChannel( + cricket::MediaReceiveChannelInterface* media_channel) = 0; // Configures the RtpReceiver with the underlying media channel, with the // given SSRC as the stream identifier. diff --git a/pc/rtp_sender.cc b/pc/rtp_sender.cc index eb9b436fbb..b3330d3897 100644 --- a/pc/rtp_sender.cc +++ b/pc/rtp_sender.cc @@ -186,7 +186,8 @@ void RtpSenderBase::SetEncoderSelectorOnChannel() { } } -void RtpSenderBase::SetMediaChannel(cricket::MediaChannel* media_channel) { +void RtpSenderBase::SetMediaChannel( + cricket::MediaSendChannelInterface* media_channel) { RTC_DCHECK(media_channel == nullptr || media_channel->media_type() == media_type()); media_channel_ = media_channel; diff --git a/pc/rtp_sender.h b/pc/rtp_sender.h index c11b2bd7d3..0a2348c362 100644 --- a/pc/rtp_sender.h +++ b/pc/rtp_sender.h @@ -54,7 +54,8 @@ class RtpSenderInternal : public RtpSenderInterface { // A VoiceMediaChannel should be used for audio RtpSenders and // a VideoMediaChannel should be used for video RtpSenders. // Must call SetMediaChannel(nullptr) before the media channel is destroyed. - virtual void SetMediaChannel(cricket::MediaChannel* media_channel) = 0; + virtual void SetMediaChannel( + cricket::MediaSendChannelInterface* media_channel) = 0; // Used to set the SSRC of the sender, once a local description has been set. // If `ssrc` is 0, this indiates that the sender should disconnect from the @@ -120,7 +121,8 @@ class RtpSenderBase : public RtpSenderInternal, public ObserverInterface { // A VoiceMediaChannel should be used for audio RtpSenders and // a VideoMediaChannel should be used for video RtpSenders. // Must call SetMediaChannel(nullptr) before the media channel is destroyed. - void SetMediaChannel(cricket::MediaChannel* media_channel) override; + void SetMediaChannel( + cricket::MediaSendChannelInterface* media_channel) override; bool SetTrack(MediaStreamTrackInterface* track) override; rtc::scoped_refptr track() const override { @@ -267,7 +269,7 @@ class RtpSenderBase : public RtpSenderInternal, public ObserverInterface { // a guard or lock. Internally there are also several Invoke()s that we could // remove since the upstream code may already be performing several operations // on the worker thread. - cricket::MediaChannel* media_channel_ = nullptr; + cricket::MediaSendChannelInterface* media_channel_ = nullptr; rtc::scoped_refptr track_; rtc::scoped_refptr dtls_transport_; diff --git a/pc/rtp_transceiver.cc b/pc/rtp_transceiver.cc index 8b65dbf4fe..5f9e876b4c 100644 --- a/pc/rtp_transceiver.cc +++ b/pc/rtp_transceiver.cc @@ -339,13 +339,16 @@ void RtpTransceiver::PushNewMediaChannelAndDeleteChannel( } context()->worker_thread()->BlockingCall([&]() { // Push down the new media_channel, if any, otherwise clear it. - auto* media_channel = channel_ ? channel_->media_channel() : nullptr; + auto* media_send_channel = + channel_ ? channel_->media_send_channel() : nullptr; for (const auto& sender : senders_) { - sender->internal()->SetMediaChannel(media_channel); + sender->internal()->SetMediaChannel(media_send_channel); } + auto* media_receive_channel = + channel_ ? channel_->media_receive_channel() : nullptr; for (const auto& receiver : receivers_) { - receiver->internal()->SetMediaChannel(media_channel); + receiver->internal()->SetMediaChannel(media_receive_channel); } // Destroy the channel, if we had one, now _after_ updating the receivers diff --git a/pc/rtp_transceiver_unittest.cc b/pc/rtp_transceiver_unittest.cc index 7961747b64..a2f2c362dd 100644 --- a/pc/rtp_transceiver_unittest.cc +++ b/pc/rtp_transceiver_unittest.cc @@ -344,7 +344,8 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, EXPECT_CALL(*mock_channel, SetFirstPacketReceivedCallback(_)); EXPECT_CALL(*mock_channel, media_type()) .WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_AUDIO)); - EXPECT_CALL(*mock_channel, media_channel()).WillRepeatedly(Return(nullptr)); + EXPECT_CALL(*mock_channel, media_send_channel()) + .WillRepeatedly(Return(nullptr)); EXPECT_CALL(*mock_channel, mid()).WillRepeatedly(ReturnRef(content_name)); EXPECT_CALL(*mock_channel, SetRtpTransport(_)).WillRepeatedly(Return(true)); transceiver_->SetChannel(std::move(mock_channel), @@ -368,7 +369,8 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, ReturnsNegotiatedHdrExts) { EXPECT_CALL(*mock_channel, SetFirstPacketReceivedCallback(_)); EXPECT_CALL(*mock_channel, media_type()) .WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_AUDIO)); - EXPECT_CALL(*mock_channel, media_channel()).WillRepeatedly(Return(nullptr)); + EXPECT_CALL(*mock_channel, media_send_channel()) + .WillRepeatedly(Return(nullptr)); EXPECT_CALL(*mock_channel, mid()).WillRepeatedly(ReturnRef(content_name)); EXPECT_CALL(*mock_channel, SetRtpTransport(_)).WillRepeatedly(Return(true)); diff --git a/pc/rtp_transmission_manager.cc b/pc/rtp_transmission_manager.cc index a81f17a95b..4fcb9918da 100644 --- a/pc/rtp_transmission_manager.cc +++ b/pc/rtp_transmission_manager.cc @@ -78,7 +78,7 @@ cricket::VoiceMediaChannel* RtpTransmissionManager::voice_media_channel() RTC_DCHECK(!IsUnifiedPlan()); auto* voice_channel = GetAudioTransceiver()->internal()->channel(); if (voice_channel) { - return voice_channel->voice_media_channel(); + return voice_channel->voice_media_send_channel(); } else { return nullptr; } @@ -90,7 +90,7 @@ cricket::VideoMediaChannel* RtpTransmissionManager::video_media_channel() RTC_DCHECK(!IsUnifiedPlan()); auto* video_channel = GetVideoTransceiver()->internal()->channel(); if (video_channel) { - return video_channel->video_media_channel(); + return video_channel->video_media_send_channel(); } else { return nullptr; } diff --git a/pc/test/mock_channel_interface.h b/pc/test/mock_channel_interface.h index 97e873e724..6188a71d0d 100644 --- a/pc/test/mock_channel_interface.h +++ b/pc/test/mock_channel_interface.h @@ -25,9 +25,24 @@ namespace cricket { class MockChannelInterface : public cricket::ChannelInterface { public: MOCK_METHOD(cricket::MediaType, media_type, (), (const, override)); - MOCK_METHOD(MediaChannel*, media_channel, (), (const, override)); - MOCK_METHOD(VoiceMediaChannel*, voice_media_channel, (), (const, override)); - MOCK_METHOD(VideoMediaChannel*, video_media_channel, (), (const, override)); + MOCK_METHOD(MediaChannel*, media_send_channel, (), (const, override)); + MOCK_METHOD(VoiceMediaChannel*, + voice_media_send_channel, + (), + (const, override)); + MOCK_METHOD(VideoMediaChannel*, + video_media_send_channel, + (), + (const, override)); + MOCK_METHOD(MediaChannel*, media_receive_channel, (), (const, override)); + MOCK_METHOD(VoiceMediaChannel*, + voice_media_receive_channel, + (), + (const, override)); + MOCK_METHOD(VideoMediaChannel*, + video_media_receive_channel, + (), + (const, override)); MOCK_METHOD(absl::string_view, transport_name, (), (const, override)); MOCK_METHOD(const std::string&, mid, (), (const, override)); MOCK_METHOD(void, Enable, (bool), (override)); diff --git a/pc/test/mock_rtp_receiver_internal.h b/pc/test/mock_rtp_receiver_internal.h index 779dcdcf08..e2a81c0dd3 100644 --- a/pc/test/mock_rtp_receiver_internal.h +++ b/pc/test/mock_rtp_receiver_internal.h @@ -57,7 +57,10 @@ class MockRtpReceiverInternal : public RtpReceiverInternal { // RtpReceiverInternal methods. MOCK_METHOD(void, Stop, (), (override)); - MOCK_METHOD(void, SetMediaChannel, (cricket::MediaChannel*), (override)); + MOCK_METHOD(void, + SetMediaChannel, + (cricket::MediaReceiveChannelInterface*), + (override)); MOCK_METHOD(void, SetupMediaChannel, (uint32_t), (override)); MOCK_METHOD(void, SetupUnsignaledMediaChannel, (), (override)); MOCK_METHOD(uint32_t, ssrc, (), (const, override)); diff --git a/pc/test/mock_rtp_sender_internal.h b/pc/test/mock_rtp_sender_internal.h index 07d80a9a36..8ed0ede21b 100644 --- a/pc/test/mock_rtp_sender_internal.h +++ b/pc/test/mock_rtp_sender_internal.h @@ -91,7 +91,7 @@ class MockRtpSenderInternal : public RtpSenderInternal { (override)); // RtpSenderInternal methods. - MOCK_METHOD1(SetMediaChannel, void(cricket::MediaChannel*)); + MOCK_METHOD1(SetMediaChannel, void(cricket::MediaSendChannelInterface*)); MOCK_METHOD1(SetSsrc, void(uint32_t)); MOCK_METHOD1(set_stream_ids, void(const std::vector&)); MOCK_METHOD1(SetStreams, void(const std::vector&)); diff --git a/pc/video_rtp_receiver.cc b/pc/video_rtp_receiver.cc index 098ffde7cd..1a4964b573 100644 --- a/pc/video_rtp_receiver.cc +++ b/pc/video_rtp_receiver.cc @@ -251,7 +251,8 @@ void VideoRtpReceiver::SetJitterBufferMinimumDelay( media_channel_->SetBaseMinimumPlayoutDelayMs(*ssrc_, delay_.GetMs()); } -void VideoRtpReceiver::SetMediaChannel(cricket::MediaChannel* media_channel) { +void VideoRtpReceiver::SetMediaChannel( + cricket::MediaReceiveChannelInterface* media_channel) { RTC_DCHECK_RUN_ON(worker_thread_); RTC_DCHECK(media_channel == nullptr || media_channel->media_type() == media_type()); @@ -259,7 +260,8 @@ void VideoRtpReceiver::SetMediaChannel(cricket::MediaChannel* media_channel) { SetMediaChannel_w(media_channel); } -void VideoRtpReceiver::SetMediaChannel_w(cricket::MediaChannel* media_channel) { +void VideoRtpReceiver::SetMediaChannel_w( + cricket::MediaReceiveChannelInterface* media_channel) { RTC_DCHECK_RUN_ON(worker_thread_); if (media_channel == media_channel_) return; @@ -310,8 +312,9 @@ std::vector VideoRtpReceiver::GetSources() const { return media_channel_->GetSources(*ssrc_); } -void VideoRtpReceiver::SetupMediaChannel(absl::optional ssrc, - cricket::MediaChannel* media_channel) { +void VideoRtpReceiver::SetupMediaChannel( + absl::optional ssrc, + cricket::MediaReceiveChannelInterface* media_channel) { RTC_DCHECK_RUN_ON(&signaling_thread_checker_); RTC_DCHECK(media_channel); MediaSourceInterface::SourceState state = source_->state(); diff --git a/pc/video_rtp_receiver.h b/pc/video_rtp_receiver.h index 8b1f3c4140..f572853018 100644 --- a/pc/video_rtp_receiver.h +++ b/pc/video_rtp_receiver.h @@ -102,7 +102,8 @@ class VideoRtpReceiver : public RtpReceiverInternal { void SetJitterBufferMinimumDelay( absl::optional delay_seconds) override; - void SetMediaChannel(cricket::MediaChannel* media_channel) override; + void SetMediaChannel( + cricket::MediaReceiveChannelInterface* media_channel) override; int AttachmentId() const override { return attachment_id_; } @@ -111,7 +112,7 @@ class VideoRtpReceiver : public RtpReceiverInternal { // Combines SetMediaChannel, SetupMediaChannel and // SetupUnsignaledMediaChannel. void SetupMediaChannel(absl::optional ssrc, - cricket::MediaChannel* media_channel); + cricket::MediaReceiveChannelInterface* media_channel); private: void RestartMediaChannel(absl::optional ssrc) @@ -121,7 +122,7 @@ class VideoRtpReceiver : public RtpReceiverInternal { RTC_RUN_ON(worker_thread_); void SetSink(rtc::VideoSinkInterface* sink) RTC_RUN_ON(worker_thread_); - void SetMediaChannel_w(cricket::MediaChannel* media_channel) + void SetMediaChannel_w(cricket::MediaReceiveChannelInterface* media_channel) RTC_RUN_ON(worker_thread_); // VideoRtpTrackSource::Callback