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& ssrcs, std::map suspended_ssrcs, const std::map& states, @@ -102,6 +102,19 @@ PayloadRouter* RtpTransportControllerSend::CreateVideoRtpSender( return video_rtp_senders_.back().get(); } +void RtpTransportControllerSend::DestroyVideoRtpSender( + VideoRtpSenderInterface* rtp_video_sender) { + std::vector>::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& ssrcs, std::map suspended_ssrcs, const std::map& @@ -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> video_rtp_senders_; + std::vector> 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(