Calls OnPacketsAcknowledged on RtpRtcp instead of RTPSender directly.

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 <srte@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29601}
This commit is contained in:
Erik Språng
2019-10-24 12:39:32 +02:00
committed by Commit Bot
parent b2290f4e13
commit a9229043e3
6 changed files with 21 additions and 11 deletions

View File

@ -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;

View File

@ -203,10 +203,10 @@ class RtpVideoSender : public RtpVideoSenderInterface,
std::vector<FrameCounts> 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<uint32_t, RTPSender*> ssrc_to_rtp_sender_;
std::map<uint32_t, RtpRtcp*> ssrc_to_rtp_module_;
RTC_DISALLOW_COPY_AND_ASSIGN(RtpVideoSender);
};

View File

@ -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<const uint16_t> sequence_numbers) = 0;
virtual std::vector<std::unique_ptr<RtpPacketToSend>> GeneratePadding(
size_t target_size_bytes) = 0;

View File

@ -89,6 +89,7 @@ class MockRtpRtcp : public RtpRtcp {
MOCK_METHOD2(TrySendPacket,
bool(RtpPacketToSend* packet,
const PacedPacketInfo& pacing_info));
MOCK_METHOD1(OnPacketsAcknowledged, void(rtc::ArrayView<const uint16_t>));
MOCK_METHOD1(
GeneratePadding,
std::vector<std::unique_ptr<RtpPacketToSend>>(size_t target_size_bytes));

View File

@ -342,6 +342,12 @@ bool ModuleRtpRtcpImpl::TrySendPacket(RtpPacketToSend* packet,
return rtp_sender_->TrySendPacket(packet, pacing_info);
}
void ModuleRtpRtcpImpl::OnPacketsAcknowledged(
rtc::ArrayView<const uint16_t> sequence_numbers) {
RTC_DCHECK(rtp_sender_);
rtp_sender_->OnPacketsAcknowledged(sequence_numbers);
}
bool ModuleRtpRtcpImpl::SupportsPadding() const {
return rtp_sender_->SupportsPadding();
}

View File

@ -133,6 +133,8 @@ class ModuleRtpRtcpImpl : public RtpRtcp, public RTCPReceiver::ModuleRtpRtcp {
bool TrySendPacket(RtpPacketToSend* packet,
const PacedPacketInfo& pacing_info) override;
void OnPacketsAcknowledged(
rtc::ArrayView<const uint16_t> sequence_numbers) override;
std::vector<std::unique_ptr<RtpPacketToSend>> GeneratePadding(
size_t target_size_bytes) override;