aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Holmer <stefan@webrtc.org>2018-07-18 15:17:14 +0200
committerCommit Bot <commit-bot@chromium.org>2018-07-18 14:15:07 +0000
commit5ed25af448bdb0917fdfa8d96bb45e32d2cbf2c4 (patch)
treef698711cb94e6f4267b5ca898103885801d58f8e
parent0c7ec809275245623b7185610c8d055f48822133 (diff)
downloadwebrtc-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.cc15
-rw-r--r--call/rtp_transport_controller_send.h6
-rw-r--r--call/rtp_transport_controller_send_interface.h2
-rw-r--r--call/test/mock_rtp_transport_controller_send.h1
-rw-r--r--video/video_send_stream_impl.cc1
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(