diff options
author | Stefan Holmer <stefan@webrtc.org> | 2018-07-18 15:17:14 +0200 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2018-07-18 14:15:07 +0000 |
commit | 5ed25af448bdb0917fdfa8d96bb45e32d2cbf2c4 (patch) | |
tree | f698711cb94e6f4267b5ca898103885801d58f8e | |
parent | 0c7ec809275245623b7185610c8d055f48822133 (diff) | |
download | webrtc-5ed25af448bdb0917fdfa8d96bb45e32d2cbf2c4.tar.gz |
Properly clean up RtpVideoSender.
Bug: webrtc:9517
Change-Id: I625c132907bd178f62c8b99f4b2407c75aa7e947
Reviewed-on: https://webrtc-review.googlesource.com/89382
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Stefan Holmer <stefan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24022}
-rw-r--r-- | call/rtp_transport_controller_send.cc | 15 | ||||
-rw-r--r-- | call/rtp_transport_controller_send.h | 6 | ||||
-rw-r--r-- | call/rtp_transport_controller_send_interface.h | 2 | ||||
-rw-r--r-- | call/test/mock_rtp_transport_controller_send.h | 1 | ||||
-rw-r--r-- | video/video_send_stream_impl.cc | 1 |
5 files changed, 22 insertions, 3 deletions
diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc index 10b39e5aff..ed01815e19 100644 --- a/call/rtp_transport_controller_send.cc +++ b/call/rtp_transport_controller_send.cc @@ -84,7 +84,7 @@ RtpTransportControllerSend::~RtpTransportControllerSend() { process_thread_->DeRegisterModule(&pacer_); } -PayloadRouter* RtpTransportControllerSend::CreateVideoRtpSender( +VideoRtpSenderInterface* RtpTransportControllerSend::CreateVideoRtpSender( const std::vector<uint32_t>& ssrcs, std::map<uint32_t, RtpState> suspended_ssrcs, const std::map<uint32_t, RtpPayloadState>& states, @@ -102,6 +102,19 @@ PayloadRouter* RtpTransportControllerSend::CreateVideoRtpSender( return video_rtp_senders_.back().get(); } +void RtpTransportControllerSend::DestroyVideoRtpSender( + VideoRtpSenderInterface* rtp_video_sender) { + std::vector<std::unique_ptr<VideoRtpSenderInterface>>::iterator it = + video_rtp_senders_.end(); + for (it = video_rtp_senders_.begin(); it != video_rtp_senders_.end(); ++it) { + if (it->get() == rtp_video_sender) { + break; + } + } + RTC_DCHECK(it != video_rtp_senders_.end()); + video_rtp_senders_.erase(it); +} + void RtpTransportControllerSend::OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, int64_t rtt_ms, diff --git a/call/rtp_transport_controller_send.h b/call/rtp_transport_controller_send.h index ce7ee1e328..f120ce0d20 100644 --- a/call/rtp_transport_controller_send.h +++ b/call/rtp_transport_controller_send.h @@ -46,7 +46,7 @@ class RtpTransportControllerSend final const BitrateConstraints& bitrate_config); ~RtpTransportControllerSend() override; - PayloadRouter* CreateVideoRtpSender( + VideoRtpSenderInterface* CreateVideoRtpSender( const std::vector<uint32_t>& ssrcs, std::map<uint32_t, RtpState> suspended_ssrcs, const std::map<uint32_t, RtpPayloadState>& @@ -56,6 +56,8 @@ class RtpTransportControllerSend final Transport* send_transport, const RtpSenderObservers& observers, RtcEventLog* event_log) override; + void DestroyVideoRtpSender( + VideoRtpSenderInterface* rtp_video_sender) override; // Implements NetworkChangedObserver interface. void OnNetworkChanged(uint32_t bitrate_bps, @@ -103,7 +105,7 @@ class RtpTransportControllerSend final private: const Clock* const clock_; PacketRouter packet_router_; - std::vector<std::unique_ptr<PayloadRouter>> video_rtp_senders_; + std::vector<std::unique_ptr<VideoRtpSenderInterface>> video_rtp_senders_; PacedSender pacer_; RtpKeepAliveConfig keepalive_; RtpBitrateConfigurator bitrate_configurator_; diff --git a/call/rtp_transport_controller_send_interface.h b/call/rtp_transport_controller_send_interface.h index e954b021f3..b9e84aebe0 100644 --- a/call/rtp_transport_controller_send_interface.h +++ b/call/rtp_transport_controller_send_interface.h @@ -100,6 +100,8 @@ class RtpTransportControllerSendInterface { Transport* send_transport, const RtpSenderObservers& observers, RtcEventLog* event_log) = 0; + virtual void DestroyVideoRtpSender( + VideoRtpSenderInterface* rtp_video_sender) = 0; virtual TransportFeedbackObserver* transport_feedback_observer() = 0; diff --git a/call/test/mock_rtp_transport_controller_send.h b/call/test/mock_rtp_transport_controller_send.h index d184e699e0..1939c1ee67 100644 --- a/call/test/mock_rtp_transport_controller_send.h +++ b/call/test/mock_rtp_transport_controller_send.h @@ -39,6 +39,7 @@ class MockRtpTransportControllerSend Transport*, const RtpSenderObservers&, RtcEventLog*)); + MOCK_METHOD1(DestroyVideoRtpSender, void(VideoRtpSenderInterface*)); MOCK_METHOD0(GetWorkerQueue, rtc::TaskQueue*()); MOCK_METHOD0(packet_router, PacketRouter*()); MOCK_METHOD0(transport_feedback_observer, TransportFeedbackObserver*()); diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc index 13461c6783..303dc5489f 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -341,6 +341,7 @@ VideoSendStreamImpl::~VideoSendStreamImpl() { if (fec_controller_->UseLossVectorMask()) { transport_->DeRegisterPacketFeedbackObserver(this); } + transport_->DestroyVideoRtpSender(payload_router_); } void VideoSendStreamImpl::RegisterProcessThread( |