From e7cc8830ef53558fb8a691e5f8837ee2dedb5940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Tue, 4 Jan 2022 15:20:03 +0100 Subject: [PATCH] Update pc/ to not use implicit T* --> scoped_refptr conversion Bug: webrtc:13464 Change-Id: I729ec2306ec0d6df2e546b5dbb530f57065d60da Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/244090 Reviewed-by: Harald Alvestrand Commit-Queue: Niels Moller Cr-Commit-Position: refs/heads/main@{#35623} --- api/media_stream_interface.h | 2 + pc/connection_context.cc | 3 +- pc/media_stream.cc | 12 ++++-- pc/media_stream.h | 2 +- pc/peer_connection.cc | 5 ++- pc/peer_connection_end_to_end_unittest.cc | 48 +++++++++++------------ pc/peer_connection_factory.cc | 3 +- pc/peer_connection_interface_unittest.cc | 4 +- pc/peer_connection_rtp_unittest.cc | 6 ++- pc/peer_connection_signaling_unittest.cc | 15 ++++--- pc/peer_connection_wrapper.cc | 3 +- pc/rtc_stats_collector.cc | 15 ++++--- pc/rtc_stats_collector_unittest.cc | 29 +++++++------- pc/rtp_sender_receiver_unittest.cc | 2 +- pc/rtp_transceiver.cc | 4 +- pc/rtp_transmission_manager.cc | 6 ++- pc/sdp_offer_answer.cc | 21 +++++----- pc/stream_collection.h | 5 ++- pc/track_media_info_map_unittest.cc | 4 +- 19 files changed, 106 insertions(+), 83 deletions(-) diff --git a/api/media_stream_interface.h b/api/media_stream_interface.h index d61dd98498..7e010289a0 100644 --- a/api/media_stream_interface.h +++ b/api/media_stream_interface.h @@ -333,6 +333,8 @@ class MediaStreamInterface : public rtc::RefCountInterface, virtual rtc::scoped_refptr FindVideoTrack( const std::string& track_id) = 0; + // Takes ownership of added tracks. + // TODO(hta): Should take scoped_refptr rather than raw pointer. virtual bool AddTrack(AudioTrackInterface* track) = 0; virtual bool AddTrack(VideoTrackInterface* track) = 0; virtual bool RemoveTrack(AudioTrackInterface* track) = 0; diff --git a/pc/connection_context.cc b/pc/connection_context.cc index d058c9d564..6c6da4e476 100644 --- a/pc/connection_context.cc +++ b/pc/connection_context.cc @@ -75,7 +75,8 @@ std::unique_ptr MaybeCreateSctpFactory( // Static rtc::scoped_refptr ConnectionContext::Create( PeerConnectionFactoryDependencies* dependencies) { - return new ConnectionContext(dependencies); + return rtc::scoped_refptr( + new ConnectionContext(dependencies)); } ConnectionContext::ConnectionContext( diff --git a/pc/media_stream.cc b/pc/media_stream.cc index 08a2a723d0..f353af712a 100644 --- a/pc/media_stream.cc +++ b/pc/media_stream.cc @@ -12,6 +12,7 @@ #include +#include #include #include "rtc_base/checks.h" @@ -41,11 +42,13 @@ bool MediaStream::AddTrack(AudioTrackInterface* track) { } bool MediaStream::AddTrack(VideoTrackInterface* track) { - return AddTrack(&video_tracks_, track); + return AddTrack( + &video_tracks_, rtc::scoped_refptr(track)); } bool MediaStream::RemoveTrack(AudioTrackInterface* track) { - return RemoveTrack(&audio_tracks_, track); + return RemoveTrack( + &audio_tracks_, rtc::scoped_refptr(track)); } bool MediaStream::RemoveTrack(VideoTrackInterface* track) { @@ -69,11 +72,12 @@ rtc::scoped_refptr MediaStream::FindVideoTrack( } template -bool MediaStream::AddTrack(TrackVector* tracks, Track* track) { +bool MediaStream::AddTrack(TrackVector* tracks, + rtc::scoped_refptr track) { typename TrackVector::iterator it = FindTrack(tracks, track->id()); if (it != tracks->end()) return false; - tracks->push_back(track); + tracks->emplace_back(std::move((track))); FireOnChanged(); return true; } diff --git a/pc/media_stream.h b/pc/media_stream.h index 6f16bea1d9..70e58f9760 100644 --- a/pc/media_stream.h +++ b/pc/media_stream.h @@ -44,7 +44,7 @@ class MediaStream : public Notifier { private: template - bool AddTrack(TrackVector* Tracks, Track* track); + bool AddTrack(TrackVector* Tracks, rtc::scoped_refptr track); template bool RemoveTrack(TrackVector* Tracks, MediaStreamTrackInterface* track); diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc index 350233df5e..a00e400a69 100644 --- a/pc/peer_connection.cc +++ b/pc/peer_connection.cc @@ -849,7 +849,7 @@ RTCErrorOr> PeerConnection::AddTrack( bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) { TRACE_EVENT0("webrtc", "PeerConnection::RemoveTrack"); - return RemoveTrackNew(sender).ok(); + return RemoveTrackNew(rtc::scoped_refptr(sender)).ok(); } RTCError PeerConnection::RemoveTrackNew( @@ -1181,7 +1181,8 @@ void PeerConnection::GetStats(RTCStatsCollectorCallback* callback) { RTC_DCHECK(stats_collector_); RTC_DCHECK(callback); RTC_LOG_THREAD_BLOCK_COUNT(); - stats_collector_->GetStatsReport(callback); + stats_collector_->GetStatsReport( + rtc::scoped_refptr(callback)); } void PeerConnection::GetStats( diff --git a/pc/peer_connection_end_to_end_unittest.cc b/pc/peer_connection_end_to_end_unittest.cc index a4704c0b7d..3a6402703f 100644 --- a/pc/peer_connection_end_to_end_unittest.cc +++ b/pc/peer_connection_end_to_end_unittest.cc @@ -60,9 +60,9 @@ class PeerConnectionEndToEndBaseTest : public sigslot::has_slots<>, worker_thread_(rtc::Thread::Create()) { RTC_CHECK(network_thread_->Start()); RTC_CHECK(worker_thread_->Start()); - caller_ = new rtc::RefCountedObject( + caller_ = rtc::make_ref_counted( "caller", network_thread_.get(), worker_thread_.get()); - callee_ = new rtc::RefCountedObject( + callee_ = rtc::make_ref_counted( "callee", network_thread_.get(), worker_thread_.get()); webrtc::PeerConnectionInterface::IceServer ice_server; ice_server.uri = "stun:stun.l.google.com:19302"; @@ -126,11 +126,13 @@ class PeerConnectionEndToEndBaseTest : public sigslot::has_slots<>, } void OnCallerAddedDataChanel(DataChannelInterface* dc) { - caller_signaled_data_channels_.push_back(dc); + caller_signaled_data_channels_.push_back( + rtc::scoped_refptr(dc)); } void OnCalleeAddedDataChannel(DataChannelInterface* dc) { - callee_signaled_data_channels_.push_back(dc); + callee_signaled_data_channels_.push_back( + rtc::scoped_refptr(dc)); } // Tests that `dc1` and `dc2` can send to and receive from each other. @@ -258,7 +260,7 @@ rtc::scoped_refptr CreateForwardingMockDecoderFactory( webrtc::AudioDecoderFactory* real_decoder_factory) { rtc::scoped_refptr mock_decoder_factory = - new rtc::RefCountedObject>; + rtc::make_ref_counted>(); EXPECT_CALL(*mock_decoder_factory, GetSupportedDecoders()) .Times(AtLeast(1)) .WillRepeatedly(Invoke([real_decoder_factory] { @@ -432,26 +434,22 @@ TEST_P(PeerConnectionEndToEndTest, CallWithCustomCodec) { std::vector encoder_id1, encoder_id2, decoder_id1, decoder_id2; - CreatePcs(rtc::scoped_refptr( - new rtc::RefCountedObject( - webrtc::CreateAudioEncoderFactory< - AudioEncoderUnicornSparklesRainbow>(), - &encoder_id1)), - rtc::scoped_refptr( - new rtc::RefCountedObject( - webrtc::CreateAudioDecoderFactory< - AudioDecoderUnicornSparklesRainbow>(), - &decoder_id1)), - rtc::scoped_refptr( - new rtc::RefCountedObject( - webrtc::CreateAudioEncoderFactory< - AudioEncoderUnicornSparklesRainbow>(), - &encoder_id2)), - rtc::scoped_refptr( - new rtc::RefCountedObject( - webrtc::CreateAudioDecoderFactory< - AudioDecoderUnicornSparklesRainbow>(), - &decoder_id2))); + CreatePcs(rtc::make_ref_counted( + webrtc::CreateAudioEncoderFactory< + AudioEncoderUnicornSparklesRainbow>(), + &encoder_id1), + rtc::make_ref_counted( + webrtc::CreateAudioDecoderFactory< + AudioDecoderUnicornSparklesRainbow>(), + &decoder_id1), + rtc::make_ref_counted( + webrtc::CreateAudioEncoderFactory< + AudioEncoderUnicornSparklesRainbow>(), + &encoder_id2), + rtc::make_ref_counted( + webrtc::CreateAudioDecoderFactory< + AudioDecoderUnicornSparklesRainbow>(), + &decoder_id2)); GetAndAddUserMedia(); Negotiate(); WaitForCallEstablished(); diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc index 3ab969dc32..193754ea2a 100644 --- a/pc/peer_connection_factory.cc +++ b/pc/peer_connection_factory.cc @@ -284,7 +284,8 @@ rtc::scoped_refptr PeerConnectionFactory::CreateAudioTrack( const std::string& id, AudioSourceInterface* source) { RTC_DCHECK(signaling_thread()->IsCurrent()); - rtc::scoped_refptr track(AudioTrack::Create(id, source)); + rtc::scoped_refptr track( + AudioTrack::Create(id, rtc::scoped_refptr(source))); return AudioTrackProxy::Create(signaling_thread(), track); } diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc index 54522388a2..3aaae64be3 100644 --- a/pc/peer_connection_interface_unittest.cc +++ b/pc/peer_connection_interface_unittest.cc @@ -2456,8 +2456,8 @@ TEST_F(PeerConnectionInterfaceTestPlanB, CloseAndTestMethods) { CreateAnswerAsLocalDescription(); ASSERT_EQ(1u, pc_->local_streams()->count()); - rtc::scoped_refptr local_stream = - pc_->local_streams()->at(0); + rtc::scoped_refptr local_stream( + pc_->local_streams()->at(0)); pc_->Close(); diff --git a/pc/peer_connection_rtp_unittest.cc b/pc/peer_connection_rtp_unittest.cc index 715546b2ea..e46df3181a 100644 --- a/pc/peer_connection_rtp_unittest.cc +++ b/pc/peer_connection_rtp_unittest.cc @@ -738,10 +738,12 @@ TEST_F(PeerConnectionRtpTestPlanB, // when the first callback is invoked. callee->pc()->SetRemoteDescription( std::move(srd1_sdp), - new OnSuccessObserver(srd1_callback)); + rtc::make_ref_counted>( + srd1_callback)); callee->pc()->SetRemoteDescription( std::move(srd2_sdp), - new OnSuccessObserver(srd2_callback)); + rtc::make_ref_counted>( + srd2_callback)); EXPECT_TRUE_WAIT(srd1_callback_called, kDefaultTimeout); EXPECT_TRUE_WAIT(srd2_callback_called, kDefaultTimeout); } diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc index eb09a11fdd..71ef51f559 100644 --- a/pc/peer_connection_signaling_unittest.cc +++ b/pc/peer_connection_signaling_unittest.cc @@ -674,8 +674,9 @@ TEST_P(PeerConnectionSignalingTest, SetRemoteDescriptionExecutesImmediately) { // By not waiting for the observer's callback we can verify that the operation // executed immediately. - callee->pc()->SetRemoteDescription(std::move(offer), - new FakeSetRemoteDescriptionObserver()); + callee->pc()->SetRemoteDescription( + std::move(offer), + rtc::make_ref_counted()); EXPECT_EQ(2u, callee->pc()->GetReceivers().size()); } @@ -693,8 +694,9 @@ TEST_P(PeerConnectionSignalingTest, CreateOfferBlocksSetRemoteDescription) { // SetRemoteDescription() operation should be chained to be executed // asynchronously, when CreateOffer() completes. callee->pc()->CreateOffer(offer_observer, RTCOfferAnswerOptions()); - callee->pc()->SetRemoteDescription(std::move(offer), - new FakeSetRemoteDescriptionObserver()); + callee->pc()->SetRemoteDescription( + std::move(offer), + rtc::make_ref_counted()); // CreateOffer() is asynchronous; without message processing this operation // should not have completed. EXPECT_FALSE(offer_observer->called()); @@ -1113,8 +1115,9 @@ TEST_F(PeerConnectionSignalingUnifiedPlanTest, // the new observer should also be invoked synchronously - as is ensured by // other tests.) RTC_DCHECK(!caller->pc()->GetTransceivers()[0]->mid().has_value()); - caller->pc()->SetLocalDescription(std::move(offer), - new FakeSetLocalDescriptionObserver()); + caller->pc()->SetLocalDescription( + std::move(offer), + rtc::make_ref_counted()); EXPECT_TRUE(caller->pc()->GetTransceivers()[0]->mid().has_value()); } diff --git a/pc/peer_connection_wrapper.cc b/pc/peer_connection_wrapper.cc index 3b4d28f0d9..641d8bf053 100644 --- a/pc/peer_connection_wrapper.cc +++ b/pc/peer_connection_wrapper.cc @@ -168,8 +168,7 @@ bool PeerConnectionWrapper::SetRemoteDescription( bool PeerConnectionWrapper::SetRemoteDescription( std::unique_ptr desc, RTCError* error_out) { - rtc::scoped_refptr observer = - new FakeSetRemoteDescriptionObserver(); + auto observer = rtc::make_ref_counted(); pc()->SetRemoteDescription(std::move(desc), observer); EXPECT_EQ_WAIT(true, observer->called(), kDefaultTimeout); bool ok = observer->error().ok(); diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc index 0539559946..4735805342 100644 --- a/pc/rtc_stats_collector.cc +++ b/pc/rtc_stats_collector.cc @@ -1224,7 +1224,8 @@ void RTCStatsCollector::GetStatsReportInternal( std::vector requests_; }; signaling_thread_->PostTask(std::make_unique( - this, cached_report_, std::move(requests))); + rtc::scoped_refptr(this), cached_report_, + std::move(requests))); } else if (!num_pending_partial_reports_) { // Only start gathering stats if we're not already gathering stats. In the // case of already gathering stats, `callback_` will be invoked when there @@ -1660,14 +1661,16 @@ void RTCStatsCollector::ProduceMediaStreamTrackStats_s( for (const RtpTransceiverStatsInfo& stats : transceiver_stats_infos_) { std::vector> senders; for (const auto& sender : stats.transceiver->senders()) { - senders.push_back(sender->internal()); + senders.push_back( + rtc::scoped_refptr(sender->internal())); } ProduceSenderMediaTrackStats(timestamp_us, *stats.track_media_info_map, senders, report); std::vector> receivers; for (const auto& receiver : stats.transceiver->receivers()) { - receivers.push_back(receiver->internal()); + receivers.push_back( + rtc::scoped_refptr(receiver->internal())); } ProduceReceiverMediaTrackStats(timestamp_us, *stats.track_media_info_map, receivers, report); @@ -2210,11 +2213,13 @@ void RTCStatsCollector::PrepareTransceiverStatsInfosAndCallStats_s_w_n() { } std::vector> senders; for (const auto& sender : transceiver->senders()) { - senders.push_back(sender->internal()); + senders.push_back( + rtc::scoped_refptr(sender->internal())); } std::vector> receivers; for (const auto& receiver : transceiver->receivers()) { - receivers.push_back(receiver->internal()); + receivers.push_back( + rtc::scoped_refptr(receiver->internal())); } stats.track_media_info_map = std::make_unique( std::move(voice_media_info), std::move(video_media_info), senders, diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc index 0fc37927f0..fb9ba96f92 100644 --- a/pc/rtc_stats_collector_unittest.cc +++ b/pc/rtc_stats_collector_unittest.cc @@ -1152,10 +1152,10 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCertificateStatsChain) { } TEST_F(RTCStatsCollectorTest, CollectTwoRTCDataChannelStatsWithPendingId) { - pc_->AddSctpDataChannel( - new MockSctpDataChannel(/*id=*/-1, DataChannelInterface::kConnecting)); - pc_->AddSctpDataChannel( - new MockSctpDataChannel(/*id=*/-1, DataChannelInterface::kConnecting)); + pc_->AddSctpDataChannel(rtc::make_ref_counted( + /*id=*/-1, DataChannelInterface::kConnecting)); + pc_->AddSctpDataChannel(rtc::make_ref_counted( + /*id=*/-1, DataChannelInterface::kConnecting)); rtc::scoped_refptr report = stats_->GetStatsReport(); } @@ -1165,7 +1165,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) { // This is not a safe assumption, but in order to make it work for // the test, we reset the ID allocator at test start. SctpDataChannel::ResetInternalIdAllocatorForTesting(-1); - pc_->AddSctpDataChannel(new MockSctpDataChannel( + pc_->AddSctpDataChannel(rtc::make_ref_counted( 0, "MockSctpDataChannel0", DataChannelInterface::kConnecting, "udp", 1, 2, 3, 4)); RTCDataChannelStats expected_data_channel0("RTCDataChannel_0", 0); @@ -1178,9 +1178,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) { expected_data_channel0.messages_received = 3; expected_data_channel0.bytes_received = 4; - pc_->AddSctpDataChannel(new MockSctpDataChannel(1, "MockSctpDataChannel1", - DataChannelInterface::kOpen, - "tcp", 5, 6, 7, 8)); + pc_->AddSctpDataChannel(rtc::make_ref_counted( + 1, "MockSctpDataChannel1", DataChannelInterface::kOpen, "tcp", 5, 6, 7, + 8)); RTCDataChannelStats expected_data_channel1("RTCDataChannel_1", 0); expected_data_channel1.label = "MockSctpDataChannel1"; expected_data_channel1.protocol = "tcp"; @@ -1191,7 +1191,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) { expected_data_channel1.messages_received = 7; expected_data_channel1.bytes_received = 8; - pc_->AddSctpDataChannel(new MockSctpDataChannel( + pc_->AddSctpDataChannel(rtc::make_ref_counted( 2, "MockSctpDataChannel2", DataChannelInterface::kClosing, "udp", 9, 10, 11, 12)); RTCDataChannelStats expected_data_channel2("RTCDataChannel_2", 0); @@ -1204,9 +1204,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) { expected_data_channel2.messages_received = 11; expected_data_channel2.bytes_received = 12; - pc_->AddSctpDataChannel(new MockSctpDataChannel(3, "MockSctpDataChannel3", - DataChannelInterface::kClosed, - "tcp", 13, 14, 15, 16)); + pc_->AddSctpDataChannel(rtc::make_ref_counted( + 3, "MockSctpDataChannel3", DataChannelInterface::kClosed, "tcp", 13, 14, + 15, 16)); RTCDataChannelStats expected_data_channel3("RTCDataChannel_3", 0); expected_data_channel3.label = "MockSctpDataChannel3"; expected_data_channel3.protocol = "tcp"; @@ -3358,8 +3358,9 @@ class FakeRTCStatsCollector : public RTCStatsCollector, static rtc::scoped_refptr Create( PeerConnectionInternal* pc, int64_t cache_lifetime_us) { - return new rtc::RefCountedObject(pc, - cache_lifetime_us); + return rtc::scoped_refptr( + new rtc::RefCountedObject(pc, + cache_lifetime_us)); } // Since FakeRTCStatsCollector inherits twice from RefCountInterface, once via diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc index f36183366a..35a0050278 100644 --- a/pc/rtp_sender_receiver_unittest.cc +++ b/pc/rtp_sender_receiver_unittest.cc @@ -577,7 +577,7 @@ TEST_F(RtpSenderReceiverTest, LocalAudioSourceOptionsApplied) { cricket::AudioOptions options; options.echo_cancellation = true; auto source = LocalAudioSource::Create(&options); - CreateAudioRtpSender(source.get()); + CreateAudioRtpSender(source); EXPECT_EQ(true, voice_media_channel_->options().echo_cancellation); diff --git a/pc/rtp_transceiver.cc b/pc/rtp_transceiver.cc index a78b9d6be6..25ae8043ec 100644 --- a/pc/rtp_transceiver.cc +++ b/pc/rtp_transceiver.cc @@ -273,14 +273,14 @@ bool RtpTransceiver::RemoveReceiver(RtpReceiverInterface* receiver) { rtc::scoped_refptr RtpTransceiver::sender_internal() const { RTC_DCHECK(unified_plan_); RTC_CHECK_EQ(1u, senders_.size()); - return senders_[0]->internal(); + return rtc::scoped_refptr(senders_[0]->internal()); } rtc::scoped_refptr RtpTransceiver::receiver_internal() const { RTC_DCHECK(unified_plan_); RTC_CHECK_EQ(1u, receivers_.size()); - return receivers_[0]->internal(); + return rtc::scoped_refptr(receivers_[0]->internal()); } cricket::MediaType RtpTransceiver::media_type() const { diff --git a/pc/rtp_transmission_manager.cc b/pc/rtp_transmission_manager.cc index e91715496c..8e3eec6ceb 100644 --- a/pc/rtp_transmission_manager.cc +++ b/pc/rtp_transmission_manager.cc @@ -378,7 +378,8 @@ void RtpTransmissionManager::AddAudioTrack(AudioTrackInterface* track, } // Normal case; we've never seen this track before. - auto new_sender = CreateSender(cricket::MEDIA_TYPE_AUDIO, track->id(), track, + auto new_sender = CreateSender(cricket::MEDIA_TYPE_AUDIO, track->id(), + rtc::scoped_refptr(track), {stream->id()}, {}); new_sender->internal()->SetMediaChannel(voice_media_channel()); GetAudioTransceiver()->internal()->AddSender(new_sender); @@ -424,7 +425,8 @@ void RtpTransmissionManager::AddVideoTrack(VideoTrackInterface* track, } // Normal case; we've never seen this track before. - auto new_sender = CreateSender(cricket::MEDIA_TYPE_VIDEO, track->id(), track, + auto new_sender = CreateSender(cricket::MEDIA_TYPE_VIDEO, track->id(), + rtc::scoped_refptr(track), {stream->id()}, {}); new_sender->internal()->SetMediaChannel(video_media_channel()); GetVideoTransceiver()->internal()->AddSender(new_sender); diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc index 235d508c35..56eb97584d 100644 --- a/pc/sdp_offer_answer.cc +++ b/pc/sdp_offer_answer.cc @@ -1192,7 +1192,8 @@ void SdpOfferAnswerHandler::SetLocalDescription( RTC_DCHECK_RUN_ON(signaling_thread()); SetLocalDescription( rtc::make_ref_counted( - weak_ptr_factory_.GetWeakPtr(), observer)); + weak_ptr_factory_.GetWeakPtr(), + rtc::scoped_refptr(observer))); } void SdpOfferAnswerHandler::SetLocalDescription( @@ -2238,8 +2239,8 @@ void SdpOfferAnswerHandler::SetAssociatedRemoteStreams( RTC_DCHECK_RUN_ON(signaling_thread()); std::vector> media_streams; for (const std::string& stream_id : stream_ids) { - rtc::scoped_refptr stream = - remote_streams_->find(stream_id); + rtc::scoped_refptr stream( + remote_streams_->find(stream_id)); if (!stream) { stream = MediaStreamProxy::Create(rtc::Thread::Current(), MediaStream::Create(stream_id)); @@ -2577,7 +2578,8 @@ bool SdpOfferAnswerHandler::AddStream(MediaStreamInterface* local_stream) { return false; } - local_streams_->AddStream(local_stream); + local_streams_->AddStream( + rtc::scoped_refptr(local_stream)); auto observer = std::make_unique( local_stream, [this](AudioTrackInterface* audio_track, @@ -4157,8 +4159,8 @@ void SdpOfferAnswerHandler::UpdateRemoteSendersList( const std::string& sender_id = params.id; uint32_t ssrc = params.first_ssrc(); - rtc::scoped_refptr stream = - remote_streams_->find(stream_id); + rtc::scoped_refptr stream( + remote_streams_->find(stream_id)); if (!stream) { // This is a new MediaStream. Create a new remote MediaStream. stream = MediaStreamProxy::Create(rtc::Thread::Current(), @@ -4178,8 +4180,8 @@ void SdpOfferAnswerHandler::UpdateRemoteSendersList( // Add default sender if necessary. if (default_sender_needed) { - rtc::scoped_refptr default_stream = - remote_streams_->find(kDefaultStreamId); + rtc::scoped_refptr default_stream( + remote_streams_->find(kDefaultStreamId)); if (!default_stream) { // Create the new default MediaStream. default_stream = MediaStreamProxy::Create( @@ -4426,7 +4428,8 @@ void SdpOfferAnswerHandler::UpdateEndedRemoteMediaStreams() { for (size_t i = 0; i < remote_streams_->count(); ++i) { MediaStreamInterface* stream = remote_streams_->at(i); if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) { - streams_to_remove.push_back(stream); + streams_to_remove.push_back( + rtc::scoped_refptr(stream)); } } diff --git a/pc/stream_collection.h b/pc/stream_collection.h index 9bbf957efd..ed85947bf5 100644 --- a/pc/stream_collection.h +++ b/pc/stream_collection.h @@ -12,6 +12,7 @@ #define PC_STREAM_COLLECTION_H_ #include +#include #include #include "api/peer_connection_interface.h" @@ -66,13 +67,13 @@ class StreamCollection : public StreamCollectionInterface { return NULL; } - void AddStream(MediaStreamInterface* stream) { + void AddStream(rtc::scoped_refptr stream) { for (StreamVector::iterator it = media_streams_.begin(); it != media_streams_.end(); ++it) { if ((*it)->id().compare(stream->id()) == 0) return; } - media_streams_.push_back(stream); + media_streams_.push_back(std::move(stream)); } void RemoveStream(MediaStreamInterface* remove_stream) { diff --git a/pc/track_media_info_map_unittest.cc b/pc/track_media_info_map_unittest.cc index 42962daa2d..a58331f0df 100644 --- a/pc/track_media_info_map_unittest.cc +++ b/pc/track_media_info_map_unittest.cc @@ -125,7 +125,7 @@ class TrackMediaInfoMapTest : public ::testing::Test { local_track->kind() == MediaStreamTrackInterface::kAudioKind ? cricket::MEDIA_TYPE_AUDIO : cricket::MEDIA_TYPE_VIDEO, - ssrcs, local_track); + ssrcs, rtc::scoped_refptr(local_track)); rtp_senders_.push_back(rtp_sender); if (local_track->kind() == MediaStreamTrackInterface::kAudioKind) { @@ -154,7 +154,7 @@ class TrackMediaInfoMapTest : public ::testing::Test { remote_track->kind() == MediaStreamTrackInterface::kAudioKind ? cricket::MEDIA_TYPE_AUDIO : cricket::MEDIA_TYPE_VIDEO, - ssrcs, remote_track); + ssrcs, rtc::scoped_refptr(remote_track)); rtp_receivers_.push_back(rtp_receiver); if (remote_track->kind() == MediaStreamTrackInterface::kAudioKind) {