From e7a5f7bfae7e619d2c9711a0b13a17d02e407563 Mon Sep 17 00:00:00 2001 From: Amit Hilbuch Date: Tue, 12 Mar 2019 11:10:27 -0700 Subject: [PATCH] Modifying MediaChannel to accept CopyOnWriteBuffer by value. MediaChannel accepted the RtpPacket buffers through non-const pointer. This is both unclear and introduces questions regarding if the buffer is actually copied or not. This change modifies the method to accept by value to reduce ambiguity. Usage of the non-const data() method which could potentially copy the buffer contents is also reduced in favor of cdata() which never copies. Bug: None Change-Id: I3b2daef0d31cb6aacceb46c86da3a40ce836242b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/127340 Reviewed-by: Steve Anton Reviewed-by: Seth Hampson Commit-Queue: Amit Hilbuch Cr-Commit-Position: refs/heads/master@{#27090} --- media/base/fake_media_engine.h | 8 ++--- media/base/fake_network_interface.h | 4 +-- media/base/media_channel.h | 4 +-- media/base/rtp_data_engine.cc | 10 +++--- media/base/rtp_data_engine.h | 4 +-- media/base/rtp_data_engine_unittest.cc | 10 +++--- media/engine/webrtc_video_engine.cc | 14 ++++----- media/engine/webrtc_video_engine.h | 4 +-- media/engine/webrtc_video_engine_unittest.cc | 32 ++++++++++---------- media/engine/webrtc_voice_engine.cc | 12 ++++---- media/engine/webrtc_voice_engine.h | 4 +-- media/engine/webrtc_voice_engine_unittest.cc | 6 ++-- pc/channel.cc | 7 ++--- pc/jsep_transport.cc | 3 +- pc/rtp_transport.cc | 4 +-- 15 files changed, 61 insertions(+), 65 deletions(-) diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h index 3f1c28ba2c..c26095d3a7 100644 --- a/media/base/fake_media_engine.h +++ b/media/base/fake_media_engine.h @@ -267,13 +267,13 @@ class RtpHelper : public Base { void set_recv_rtcp_parameters(const RtcpParameters& params) { recv_rtcp_parameters_ = params; } - virtual void OnPacketReceived(rtc::CopyOnWriteBuffer* packet, + virtual void OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) { - rtp_packets_.push_back(std::string(packet->data(), packet->size())); + rtp_packets_.push_back(std::string(packet.cdata(), packet.size())); } - virtual void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, + virtual void OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) { - rtcp_packets_.push_back(std::string(packet->data(), packet->size())); + rtcp_packets_.push_back(std::string(packet.cdata(), packet.size())); } virtual void OnReadyToSend(bool ready) { ready_to_send_ = ready; } diff --git a/media/base/fake_network_interface.h b/media/base/fake_network_interface.h index e61202ffd3..1609f7d3de 100644 --- a/media/base/fake_network_interface.h +++ b/media/base/fake_network_interface.h @@ -169,9 +169,9 @@ class FakeNetworkInterface : public MediaChannel::NetworkInterface, static_cast*>(msg->pdata); if (dest_) { if (msg->message_id == ST_RTP) { - dest_->OnPacketReceived(&msg_data->data(), rtc::TimeMicros()); + dest_->OnPacketReceived(msg_data->data(), rtc::TimeMicros()); } else { - dest_->OnRtcpReceived(&msg_data->data(), rtc::TimeMicros()); + dest_->OnRtcpReceived(msg_data->data(), rtc::TimeMicros()); } } delete msg_data; diff --git a/media/base/media_channel.h b/media/base/media_channel.h index 7891e5569b..617af3292e 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -196,10 +196,10 @@ class MediaChannel : public sigslot::has_slots<> { virtual void SetInterface(NetworkInterface* iface, webrtc::MediaTransportInterface* media_transport); // Called when a RTP packet is received. - virtual void OnPacketReceived(rtc::CopyOnWriteBuffer* packet, + virtual void OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) = 0; // Called when a RTCP packet is received. - virtual void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, + virtual void OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) = 0; // Called when the socket's ability to send has changed. virtual void OnReadyToSend(bool ready) = 0; diff --git a/media/base/rtp_data_engine.cc b/media/base/rtp_data_engine.cc index be71f46b95..33c87cbf1a 100644 --- a/media/base/rtp_data_engine.cc +++ b/media/base/rtp_data_engine.cc @@ -194,20 +194,20 @@ bool RtpDataMediaChannel::RemoveRecvStream(uint32_t ssrc) { return true; } -void RtpDataMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, +void RtpDataMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t /* packet_time_us */) { RtpHeader header; - if (!GetRtpHeader(packet->cdata(), packet->size(), &header)) { + if (!GetRtpHeader(packet.cdata(), packet.size(), &header)) { return; } size_t header_length; - if (!GetRtpHeaderLen(packet->cdata(), packet->size(), &header_length)) { + if (!GetRtpHeaderLen(packet.cdata(), packet.size(), &header_length)) { return; } const char* data = - packet->cdata() + header_length + sizeof(kReservedSpace); - size_t data_len = packet->size() - header_length - sizeof(kReservedSpace); + packet.cdata() + header_length + sizeof(kReservedSpace); + size_t data_len = packet.size() - header_length - sizeof(kReservedSpace); if (!receiving_) { RTC_LOG(LS_WARNING) << "Not receiving packet " << header.ssrc << ":" diff --git a/media/base/rtp_data_engine.h b/media/base/rtp_data_engine.h index 6ac09aa3f4..a4647aef34 100644 --- a/media/base/rtp_data_engine.h +++ b/media/base/rtp_data_engine.h @@ -81,9 +81,9 @@ class RtpDataMediaChannel : public DataMediaChannel { receiving_ = receive; return true; } - virtual void OnPacketReceived(rtc::CopyOnWriteBuffer* packet, + virtual void OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us); - virtual void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, + virtual void OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) {} virtual void OnReadyToSend(bool ready) {} virtual bool SendData(const SendDataParams& params, diff --git a/media/base/rtp_data_engine_unittest.cc b/media/base/rtp_data_engine_unittest.cc index d0e4e84076..bcba9a4add 100644 --- a/media/base/rtp_data_engine_unittest.cc +++ b/media/base/rtp_data_engine_unittest.cc @@ -319,13 +319,13 @@ TEST_F(RtpDataMediaChannelTest, ReceiveData) { std::unique_ptr dmc(CreateChannel()); // SetReceived not called. - dmc->OnPacketReceived(&packet, /* packet_time_us */ -1); + dmc->OnPacketReceived(packet, /* packet_time_us */ -1); EXPECT_FALSE(HasReceivedData()); dmc->SetReceive(true); // Unknown payload id - dmc->OnPacketReceived(&packet, /* packet_time_us */ -1); + dmc->OnPacketReceived(packet, /* packet_time_us */ -1); EXPECT_FALSE(HasReceivedData()); cricket::DataCodec codec; @@ -336,7 +336,7 @@ TEST_F(RtpDataMediaChannelTest, ReceiveData) { ASSERT_TRUE(dmc->SetRecvParameters(parameters)); // Unknown stream - dmc->OnPacketReceived(&packet, /* packet_time_us */ -1); + dmc->OnPacketReceived(packet, /* packet_time_us */ -1); EXPECT_FALSE(HasReceivedData()); cricket::StreamParams stream; @@ -344,7 +344,7 @@ TEST_F(RtpDataMediaChannelTest, ReceiveData) { ASSERT_TRUE(dmc->AddRecvStream(stream)); // Finally works! - dmc->OnPacketReceived(&packet, /* packet_time_us */ -1); + dmc->OnPacketReceived(packet, /* packet_time_us */ -1); EXPECT_TRUE(HasReceivedData()); EXPECT_EQ("abcde", GetReceivedData()); EXPECT_EQ(5U, GetReceivedDataLen()); @@ -357,6 +357,6 @@ TEST_F(RtpDataMediaChannelTest, InvalidRtpPackets) { std::unique_ptr dmc(CreateChannel()); // Too short - dmc->OnPacketReceived(&packet, /* packet_time_us */ -1); + dmc->OnPacketReceived(packet, /* packet_time_us */ -1); EXPECT_FALSE(HasReceivedData()); } diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index c0848f6bd5..7ee30848f9 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -1360,11 +1360,11 @@ void WebRtcVideoChannel::FillSendAndReceiveCodecStats( } } -void WebRtcVideoChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, +void WebRtcVideoChannel::OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) { RTC_DCHECK_RUN_ON(&thread_checker_); const webrtc::PacketReceiver::DeliveryStatus delivery_result = - call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, *packet, + call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, packet, packet_time_us); switch (delivery_result) { case webrtc::PacketReceiver::DELIVERY_OK: @@ -1380,12 +1380,12 @@ void WebRtcVideoChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, } uint32_t ssrc = 0; - if (!GetRtpSsrc(packet->cdata(), packet->size(), &ssrc)) { + if (!GetRtpSsrc(packet.cdata(), packet.size(), &ssrc)) { return; } int payload_type = 0; - if (!GetRtpPayloadType(packet->cdata(), packet->size(), &payload_type)) { + if (!GetRtpPayloadType(packet.cdata(), packet.size(), &payload_type)) { return; } @@ -1412,7 +1412,7 @@ void WebRtcVideoChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, break; } - if (call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, *packet, + if (call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, packet, packet_time_us) != webrtc::PacketReceiver::DELIVERY_OK) { RTC_LOG(LS_WARNING) << "Failed to deliver RTP packet on re-delivery."; @@ -1420,14 +1420,14 @@ void WebRtcVideoChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, } } -void WebRtcVideoChannel::OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, +void WebRtcVideoChannel::OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) { RTC_DCHECK_RUN_ON(&thread_checker_); // TODO(pbos): Check webrtc::PacketReceiver::DELIVERY_OK once we deliver // for both audio and video on the same path. Since BundleFilter doesn't // filter RTCP anymore incoming RTCP packets could've been going to audio (so // logging failures spam the log). - call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, *packet, + call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, packet, packet_time_us); } diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index 35e6b855de..f3d4104973 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h @@ -144,9 +144,9 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { void FillBitrateInfo(BandwidthEstimationInfo* bwe_info) override; bool GetStats(VideoMediaInfo* info) override; - void OnPacketReceived(rtc::CopyOnWriteBuffer* packet, + void OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) override; - void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, + void OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) override; void OnReadyToSend(bool ready) override; void OnNetworkRouteChanged(const std::string& transport_name, diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc index 3b14f27e38..1649244fbc 100644 --- a/media/engine/webrtc_video_engine_unittest.cc +++ b/media/engine/webrtc_video_engine_unittest.cc @@ -1729,7 +1729,7 @@ TEST_F(WebRtcVideoChannelBaseTest, SetSink) { EXPECT_TRUE(SetDefaultCodec()); EXPECT_TRUE(SetSend(true)); EXPECT_EQ(0, renderer_.num_rendered_frames()); - channel_->OnPacketReceived(&packet1, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet1, /* packet_time_us */ -1); EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); SendFrame(); EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout); @@ -4835,7 +4835,7 @@ TEST_F(WebRtcVideoChannelTest, DefaultReceiveStreamReconfiguresToUseRtx) { memset(data, 0, sizeof(data)); rtc::SetBE32(&data[8], ssrcs[0]); rtc::CopyOnWriteBuffer packet(data, kDataLength); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) << "No default receive stream created."; @@ -4993,7 +4993,7 @@ TEST_F(WebRtcVideoChannelTest, RecvUnsignaledSsrcWithSignaledStreamId) { memset(data, 0, sizeof(data)); rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc); rtc::CopyOnWriteBuffer packet(data, kDataLength); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); // The stream should now be created with the appropriate sync label. EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); @@ -5006,7 +5006,7 @@ TEST_F(WebRtcVideoChannelTest, RecvUnsignaledSsrcWithSignaledStreamId) { ASSERT_TRUE(channel_->RemoveRecvStream(kIncomingUnsignalledSsrc)); EXPECT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); EXPECT_TRUE( fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group.empty()); @@ -5045,7 +5045,7 @@ TEST_F(WebRtcVideoChannelTest, BaseMinimumPlayoutDelayMsUnsignaledRecvStream) { memset(data, 0, sizeof(data)); rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc); rtc::CopyOnWriteBuffer packet(data, kDataLength); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); recv_stream = fake_call_->GetVideoReceiveStream(kIncomingUnsignalledSsrc); EXPECT_EQ(recv_stream->base_mininum_playout_delay_ms(), 200); @@ -5082,7 +5082,7 @@ void WebRtcVideoChannelTest::TestReceiveUnsignaledSsrcPacket( rtc::Set8(data, 1, payload_type); rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc); rtc::CopyOnWriteBuffer packet(data, kDataLength); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); if (expect_created_receive_stream) { EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) @@ -5169,7 +5169,7 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) { rtpHeader.ssrc = kIncomingUnsignalledSsrc + 1; cricket::SetRtpHeader(data, sizeof(data), rtpHeader); rtc::CopyOnWriteBuffer packet(data, sizeof(data)); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); // VP8 packet should create default receive stream. ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; @@ -5190,7 +5190,7 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) { rtpHeader.ssrc = kIncomingUnsignalledSsrc + 2; cricket::SetRtpHeader(data, sizeof(data), rtpHeader); rtc::CopyOnWriteBuffer packet2(data, sizeof(data)); - channel_->OnPacketReceived(&packet2, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet2, /* packet_time_us */ -1); // VP9 packet should replace the default receive SSRC. ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); recv_stream = fake_call_->GetVideoReceiveStreams()[0]; @@ -5212,7 +5212,7 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) { rtpHeader.ssrc = kIncomingUnsignalledSsrc + 3; cricket::SetRtpHeader(data, sizeof(data), rtpHeader); rtc::CopyOnWriteBuffer packet3(data, sizeof(data)); - channel_->OnPacketReceived(&packet3, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet3, /* packet_time_us */ -1); // H264 packet should replace the default receive SSRC. ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); recv_stream = fake_call_->GetVideoReceiveStreams()[0]; @@ -5251,7 +5251,7 @@ TEST_F(WebRtcVideoChannelTest, rtp_header.ssrc = kSsrcs3[0]; cricket::SetRtpHeader(data, sizeof(data), rtp_header); rtc::CopyOnWriteBuffer packet(data, sizeof(data)); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); // Default receive stream should be created. ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); FakeVideoReceiveStream* recv_stream0 = @@ -5269,7 +5269,7 @@ TEST_F(WebRtcVideoChannelTest, rtp_header.ssrc = kSsrcs3[1]; cricket::SetRtpHeader(data, sizeof(data), rtp_header); packet.SetData(data, sizeof(data)); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); // New default receive stream should be created, but old stream should remain. ASSERT_EQ(2u, fake_call_->GetVideoReceiveStreams().size()); EXPECT_EQ(recv_stream0, fake_call_->GetVideoReceiveStreams()[0]); @@ -6891,7 +6891,7 @@ TEST_F(WebRtcVideoChannelTest, GetRtpReceiveParametersWithUnsignaledSsrc) { rtpHeader.ssrc = kIncomingUnsignalledSsrc; cricket::SetRtpHeader(data, sizeof(data), rtpHeader); rtc::CopyOnWriteBuffer packet(data, sizeof(data)); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); // The |ssrc| member should still be unset. rtp_parameters = channel_->GetRtpReceiveParameters(0); @@ -7191,7 +7191,7 @@ TEST_F(WebRtcVideoChannelTestWithClock, GetSources) { EXPECT_TRUE(SetDefaultCodec()); EXPECT_TRUE(SetSend(true)); EXPECT_EQ(0, renderer_.num_rendered_frames()); - channel_->OnPacketReceived(&packet1, /*packet_time_us=*/-1); + channel_->OnPacketReceived(packet1, /*packet_time_us=*/-1); std::vector sources = channel_->GetSources(kSsrc); EXPECT_EQ(1u, sources.size()); @@ -7201,7 +7201,7 @@ TEST_F(WebRtcVideoChannelTestWithClock, GetSources) { // a new packet. int64_t timeDeltaMs = 1; fake_clock_.AdvanceTime(webrtc::TimeDelta::ms(timeDeltaMs)); - channel_->OnPacketReceived(&packet1, /*packet_time_us=*/-1); + channel_->OnPacketReceived(packet1, /*packet_time_us=*/-1); int64_t timestamp2 = channel_->GetSources(kSsrc)[0].timestamp_ms(); EXPECT_EQ(timestamp2, timestamp1 + timeDeltaMs); @@ -7226,7 +7226,7 @@ TEST_F(WebRtcVideoChannelTestWithClock, GetContributingSources) { EXPECT_TRUE(SetDefaultCodec()); EXPECT_TRUE(SetSend(true)); EXPECT_EQ(0, renderer_.num_rendered_frames()); - channel_->OnPacketReceived(&packet1, /*packet_time_us=*/-1); + channel_->OnPacketReceived(packet1, /*packet_time_us=*/-1); { ASSERT_EQ(2u, channel_->GetSources(kSsrc).size()); @@ -7251,7 +7251,7 @@ TEST_F(WebRtcVideoChannelTestWithClock, GetContributingSources) { int64_t timeDeltaMs = 1; fake_clock_.AdvanceTime(webrtc::TimeDelta::ms(timeDeltaMs)); - channel_->OnPacketReceived(&packet2, /*packet_time_us=*/-1); + channel_->OnPacketReceived(packet2, /*packet_time_us=*/-1); { ASSERT_EQ(2u, channel_->GetSources(kSsrc).size()); diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index b7128faa96..1594849cd9 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -2058,12 +2058,12 @@ bool WebRtcVoiceMediaChannel::InsertDtmf(uint32_t ssrc, event, duration); } -void WebRtcVoiceMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, +void WebRtcVoiceMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) { RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); webrtc::PacketReceiver::DeliveryStatus delivery_result = - call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, *packet, + call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, packet, packet_time_us); if (delivery_result != webrtc::PacketReceiver::DELIVERY_UNKNOWN_SSRC) { @@ -2074,7 +2074,7 @@ void WebRtcVoiceMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, // If there already is N unsignaled receive streams, delete the oldest. // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=5208 uint32_t ssrc = 0; - if (!GetRtpSsrc(packet->cdata(), packet->size(), &ssrc)) { + if (!GetRtpSsrc(packet.cdata(), packet.size(), &ssrc)) { return; } RTC_DCHECK(!absl::c_linear_search(unsignaled_recv_ssrcs_, ssrc)); @@ -2117,16 +2117,16 @@ void WebRtcVoiceMediaChannel::OnPacketReceived(rtc::CopyOnWriteBuffer* packet, } delivery_result = call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, - *packet, packet_time_us); + packet, packet_time_us); RTC_DCHECK_NE(webrtc::PacketReceiver::DELIVERY_UNKNOWN_SSRC, delivery_result); } -void WebRtcVoiceMediaChannel::OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, +void WebRtcVoiceMediaChannel::OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) { RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); // Forward packet to Call as well. - call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, *packet, + call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, packet, packet_time_us); } diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h index cbec00353d..5b3f864506 100644 --- a/media/engine/webrtc_voice_engine.h +++ b/media/engine/webrtc_voice_engine.h @@ -201,9 +201,9 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, bool CanInsertDtmf() override; bool InsertDtmf(uint32_t ssrc, int event, int duration) override; - void OnPacketReceived(rtc::CopyOnWriteBuffer* packet, + void OnPacketReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) override; - void OnRtcpReceived(rtc::CopyOnWriteBuffer* packet, + void OnRtcpReceived(rtc::CopyOnWriteBuffer packet, int64_t packet_time_us) override; void OnNetworkRouteChanged(const std::string& transport_name, const rtc::NetworkRoute& network_route) override; diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc index 4b1a5287b6..ebb2ec28d3 100644 --- a/media/engine/webrtc_voice_engine_unittest.cc +++ b/media/engine/webrtc_voice_engine_unittest.cc @@ -255,7 +255,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test { void DeliverPacket(const void* data, int len) { rtc::CopyOnWriteBuffer packet(reinterpret_cast(data), len); - channel_->OnPacketReceived(&packet, /* packet_time_us */ -1); + channel_->OnPacketReceived(packet, /* packet_time_us */ -1); } void TearDown() override { delete channel_; } @@ -3322,9 +3322,9 @@ TEST_F(WebRtcVoiceEngineTestFake, DeliverAudioPacket_Call) { const cricket::FakeAudioReceiveStream* s = call_.GetAudioReceiveStream(kAudioSsrc); EXPECT_EQ(0, s->received_packets()); - channel_->OnPacketReceived(&kPcmuPacket, /* packet_time_us */ -1); + channel_->OnPacketReceived(kPcmuPacket, /* packet_time_us */ -1); EXPECT_EQ(1, s->received_packets()); - channel_->OnRtcpReceived(&kRtcpPacket, /* packet_time_us */ -1); + channel_->OnRtcpReceived(kRtcpPacket, /* packet_time_us */ -1); EXPECT_EQ(2, s->received_packets()); } diff --git a/pc/channel.cc b/pc/channel.cc index a408a85729..991e9e338c 100644 --- a/pc/channel.cc +++ b/pc/channel.cc @@ -539,13 +539,10 @@ void BaseChannel::ProcessPacket(bool rtcp, int64_t packet_time_us) { RTC_DCHECK(worker_thread_->IsCurrent()); - // Need to copy variable because OnRtcpReceived/OnPacketReceived - // requires non-const pointer to buffer. This doesn't memcpy the actual data. - rtc::CopyOnWriteBuffer data(packet); if (rtcp) { - media_channel_->OnRtcpReceived(&data, packet_time_us); + media_channel_->OnRtcpReceived(packet, packet_time_us); } else { - media_channel_->OnPacketReceived(&data, packet_time_us); + media_channel_->OnPacketReceived(packet, packet_time_us); } } diff --git a/pc/jsep_transport.cc b/pc/jsep_transport.cc index 28c752575d..aacee66190 100644 --- a/pc/jsep_transport.cc +++ b/pc/jsep_transport.cc @@ -407,8 +407,7 @@ webrtc::RTCError JsepTransport::SetNegotiatedDtlsParameters( // Apply remote fingerprint. if (!remote_fingerprint || !dtls_transport->SetRemoteFingerprint( - remote_fingerprint->algorithm, - reinterpret_cast(remote_fingerprint->digest.data()), + remote_fingerprint->algorithm, remote_fingerprint->digest.cdata(), remote_fingerprint->digest.size())) { return webrtc::RTCError(webrtc::RTCErrorType::INVALID_PARAMETER, "Failed to apply remote fingerprint."); diff --git a/pc/rtp_transport.cc b/pc/rtp_transport.cc index 650015ef83..20559e0907 100644 --- a/pc/rtp_transport.cc +++ b/pc/rtp_transport.cc @@ -129,8 +129,8 @@ bool RtpTransport::SendPacket(bool rtcp, rtc::PacketTransportInternal* transport = rtcp && !rtcp_mux_enabled_ ? rtcp_packet_transport_ : rtp_packet_transport_; - int ret = transport->SendPacket(packet->data(), packet->size(), options, - flags); + int ret = transport->SendPacket(packet->cdata(), packet->size(), + options, flags); if (ret != static_cast(packet->size())) { if (transport->GetError() == ENOTCONN) { RTC_LOG(LS_WARNING) << "Got ENOTCONN from transport.";