From a9229043e357edfa882e80a226d4653079ee730d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Thu, 24 Oct 2019 12:39:32 +0200 Subject: [PATCH] Calls OnPacketsAcknowledged on RtpRtcp instead of RTPSender directly. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This prepares for splitting RtpSenderEgress out of RTPSender. For context, see: https://webrtc-review.googlesource.com/c/src/+/158020 Bug: webrtc:11036 Change-Id: I6d385ba255ce23f4c6685a3737eeb243ce2ec6ff Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158201 Reviewed-by: Sebastian Jansson Commit-Queue: Erik Språng Cr-Commit-Position: refs/heads/master@{#29601} --- call/rtp_video_sender.cc | 16 +++++++--------- call/rtp_video_sender.h | 4 ++-- modules/rtp_rtcp/include/rtp_rtcp.h | 3 +++ modules/rtp_rtcp/mocks/mock_rtp_rtcp.h | 1 + modules/rtp_rtcp/source/rtp_rtcp_impl.cc | 6 ++++++ modules/rtp_rtcp/source/rtp_rtcp_impl.h | 2 ++ 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc index 4f62061742..8b340487fd 100644 --- a/call/rtp_video_sender.cc +++ b/call/rtp_video_sender.cc @@ -583,7 +583,7 @@ void RtpVideoSender::DeliverRtcp(const uint8_t* packet, size_t length) { void RtpVideoSender::ConfigureSsrcs() { // Configure regular SSRCs. - RTC_CHECK(ssrc_to_rtp_sender_.empty()); + RTC_CHECK(ssrc_to_rtp_module_.empty()); for (size_t i = 0; i < rtp_config_.ssrcs.size(); ++i) { uint32_t ssrc = rtp_config_.ssrcs[i]; RtpRtcp* const rtp_rtcp = rtp_streams_[i].rtp_rtcp.get(); @@ -593,9 +593,7 @@ void RtpVideoSender::ConfigureSsrcs() { if (it != suspended_ssrcs_.end()) rtp_rtcp->SetRtpState(it->second); - RTPSender* rtp_sender = rtp_rtcp->RtpSender(); - RTC_DCHECK(rtp_sender != nullptr); - ssrc_to_rtp_sender_[ssrc] = rtp_sender; + ssrc_to_rtp_module_[ssrc] = rtp_rtcp; } // Set up RTX if available. @@ -868,9 +866,9 @@ void RtpVideoSender::OnPacketFeedbackVector( for (const auto& kv : early_loss_detected_per_ssrc) { const uint32_t ssrc = kv.first; - auto it = ssrc_to_rtp_sender_.find(ssrc); - RTC_DCHECK(it != ssrc_to_rtp_sender_.end()); - RTPSender* rtp_sender = it->second; + auto it = ssrc_to_rtp_module_.find(ssrc); + RTC_DCHECK(it != ssrc_to_rtp_module_.end()); + RTPSender* rtp_sender = it->second->RtpSender(); for (uint16_t sequence_number : kv.second) { rtp_sender->ReSendPacket(sequence_number); } @@ -879,8 +877,8 @@ void RtpVideoSender::OnPacketFeedbackVector( for (const auto& kv : acked_packets_per_ssrc) { const uint32_t ssrc = kv.first; - auto it = ssrc_to_rtp_sender_.find(ssrc); - if (it == ssrc_to_rtp_sender_.end()) { + auto it = ssrc_to_rtp_module_.find(ssrc); + if (it == ssrc_to_rtp_module_.end()) { // Packets not for a media SSRC, so likely RTX or FEC. If so, ignore // since there's no RTP history to clean up anyway. continue; diff --git a/call/rtp_video_sender.h b/call/rtp_video_sender.h index 9458f13f84..88d7ab87ac 100644 --- a/call/rtp_video_sender.h +++ b/call/rtp_video_sender.h @@ -203,10 +203,10 @@ class RtpVideoSender : public RtpVideoSenderInterface, std::vector frame_counts_ RTC_GUARDED_BY(crit_); FrameCountObserver* const frame_count_observer_; - // Effectively const map from ssrc to RTPSender, for all media ssrcs. + // Effectively const map from SSRC to RtpRtcp, for all media SSRCs. // This map is set at construction time and never changed, but it's // non-trivial to make it properly const. - std::map ssrc_to_rtp_sender_; + std::map ssrc_to_rtp_module_; RTC_DISALLOW_COPY_AND_ASSIGN(RtpVideoSender); }; diff --git a/modules/rtp_rtcp/include/rtp_rtcp.h b/modules/rtp_rtcp/include/rtp_rtcp.h index adce9649d7..2fea235d34 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp.h +++ b/modules/rtp_rtcp/include/rtp_rtcp.h @@ -276,6 +276,9 @@ class RtpRtcp : public Module, public RtcpFeedbackSenderInterface { virtual bool TrySendPacket(RtpPacketToSend* packet, const PacedPacketInfo& pacing_info) = 0; + virtual void OnPacketsAcknowledged( + rtc::ArrayView sequence_numbers) = 0; + virtual std::vector> GeneratePadding( size_t target_size_bytes) = 0; diff --git a/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h b/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h index 332f243608..6102e0a938 100644 --- a/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h +++ b/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h @@ -89,6 +89,7 @@ class MockRtpRtcp : public RtpRtcp { MOCK_METHOD2(TrySendPacket, bool(RtpPacketToSend* packet, const PacedPacketInfo& pacing_info)); + MOCK_METHOD1(OnPacketsAcknowledged, void(rtc::ArrayView)); MOCK_METHOD1( GeneratePadding, std::vector>(size_t target_size_bytes)); diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc index c7cbf5095b..f490439de1 100644 --- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc +++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc @@ -342,6 +342,12 @@ bool ModuleRtpRtcpImpl::TrySendPacket(RtpPacketToSend* packet, return rtp_sender_->TrySendPacket(packet, pacing_info); } +void ModuleRtpRtcpImpl::OnPacketsAcknowledged( + rtc::ArrayView sequence_numbers) { + RTC_DCHECK(rtp_sender_); + rtp_sender_->OnPacketsAcknowledged(sequence_numbers); +} + bool ModuleRtpRtcpImpl::SupportsPadding() const { return rtp_sender_->SupportsPadding(); } diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/modules/rtp_rtcp/source/rtp_rtcp_impl.h index 03dd81cd47..01ef03ad46 100644 --- a/modules/rtp_rtcp/source/rtp_rtcp_impl.h +++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.h @@ -133,6 +133,8 @@ class ModuleRtpRtcpImpl : public RtpRtcp, public RTCPReceiver::ModuleRtpRtcp { bool TrySendPacket(RtpPacketToSend* packet, const PacedPacketInfo& pacing_info) override; + void OnPacketsAcknowledged( + rtc::ArrayView sequence_numbers) override; std::vector> GeneratePadding( size_t target_size_bytes) override;