Cleanup of feedback observer interface
Removes all unused features, reducing the exposed interface surface.
This makes refactoring and maintenance simpler as we can change
TransportFeedbackAdapter without making corresponding changes
to RtpVideoSender.
Bug: webrtc:9883
Change-Id: If372a868e0765e94df52b4de52d3bb619ce11471
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156943
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29649}
diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc
index 8b34048..f9ef569 100644
--- a/call/rtp_video_sender.cc
+++ b/call/rtp_video_sender.cc
@@ -399,14 +399,16 @@
fec_controller_->SetProtectionCallback(this);
// Signal congestion controller this object is ready for OnPacket* callbacks.
- transport_->RegisterPacketFeedbackObserver(this);
+ transport_->GetStreamFeedbackProvider()->RegisterStreamFeedbackObserver(
+ rtp_config_.ssrcs, this);
}
RtpVideoSender::~RtpVideoSender() {
for (const RtpStreamSender& stream : rtp_streams_) {
transport_->packet_router()->RemoveSendRtpModule(stream.rtp_rtcp.get());
}
- transport_->DeRegisterPacketFeedbackObserver(this);
+ transport_->GetStreamFeedbackProvider()->DeRegisterStreamFeedbackObserver(
+ this);
}
void RtpVideoSender::RegisterProcessThread(
@@ -810,30 +812,19 @@
}
void RtpVideoSender::OnPacketFeedbackVector(
- const std::vector<PacketFeedback>& packet_feedback_vector) {
+ std::vector<StreamPacketInfo> packet_feedback_vector) {
if (fec_controller_->UseLossVectorMask()) {
rtc::CritScope cs(&crit_);
- for (const PacketFeedback& packet : packet_feedback_vector) {
- if (packet.send_time_ms == PacketFeedback::kNoSendTime || !packet.ssrc ||
- absl::c_find(rtp_config_.ssrcs, *packet.ssrc) ==
- rtp_config_.ssrcs.end()) {
- // If packet send time is missing, the feedback for this packet has
- // probably already been processed, so ignore it.
- // If packet does not belong to a registered media ssrc, we are also
- // not interested in it.
- continue;
- }
- loss_mask_vector_.push_back(packet.arrival_time_ms ==
- PacketFeedback::kNotReceived);
+ for (const StreamPacketInfo& packet : packet_feedback_vector) {
+ loss_mask_vector_.push_back(!packet.received);
}
}
// Map from SSRC to all acked packets for that RTP module.
std::map<uint32_t, std::vector<uint16_t>> acked_packets_per_ssrc;
- for (const PacketFeedback& packet : packet_feedback_vector) {
- if (packet.ssrc && packet.arrival_time_ms != PacketFeedback::kNotReceived) {
- acked_packets_per_ssrc[*packet.ssrc].push_back(
- packet.rtp_sequence_number);
+ for (const StreamPacketInfo& packet : packet_feedback_vector) {
+ if (packet.received) {
+ acked_packets_per_ssrc[packet.ssrc].push_back(packet.rtp_sequence_number);
}
}
@@ -842,25 +833,15 @@
// lost by feedback, without being trailed by any received packets.
std::map<uint32_t, std::vector<uint16_t>> early_loss_detected_per_ssrc;
- for (const PacketFeedback& packet : packet_feedback_vector) {
- if (packet.send_time_ms == PacketFeedback::kNoSendTime || !packet.ssrc ||
- absl::c_find(rtp_config_.ssrcs, *packet.ssrc) ==
- rtp_config_.ssrcs.end()) {
- // If packet send time is missing, the feedback for this packet has
- // probably already been processed, so ignore it.
- // If packet does not belong to a registered media ssrc, we are also
- // not interested in it.
- continue;
- }
-
- if (packet.arrival_time_ms == PacketFeedback::kNotReceived) {
+ for (const StreamPacketInfo& packet : packet_feedback_vector) {
+ if (!packet.received) {
// Last known lost packet, might not be detectable as lost by remote
// jitter buffer.
- early_loss_detected_per_ssrc[*packet.ssrc].push_back(
+ early_loss_detected_per_ssrc[packet.ssrc].push_back(
packet.rtp_sequence_number);
} else {
// Packet received, so any loss prior to this is already detectable.
- early_loss_detected_per_ssrc.erase(*packet.ssrc);
+ early_loss_detected_per_ssrc.erase(packet.ssrc);
}
}