From 0b9267830ca0e85a84f7bce5ab93417c7a0ce2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Tue, 21 Aug 2018 17:49:24 +0200 Subject: [PATCH] Fix NACK logic for empty packets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was broken in cl https://webrtc-review.googlesource.com/c/src/+/93261. Bug: chromium:875391, webrtc:7135 Change-Id: Id2051bde8a5248dd5aeefa782f9d63513d107df4 Reviewed-on: https://webrtc-review.googlesource.com/95146 Reviewed-by: Philip Eliasson Reviewed-by: Erik Språng Commit-Queue: Niels Moller Cr-Commit-Position: refs/heads/master@{#24378} --- video/rtp_video_stream_receiver.cc | 13 ++++--------- video/rtp_video_stream_receiver.h | 1 - 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc index 32a4c67eb4..37d95e3fd9 100644 --- a/video/rtp_video_stream_receiver.cc +++ b/video/rtp_video_stream_receiver.cc @@ -396,9 +396,10 @@ void RtpVideoStreamReceiver::RemoveSecondarySink( void RtpVideoStreamReceiver::ReceivePacket(const RtpPacketReceived& packet) { if (packet.payload_size() == 0) { - // Keep-alive packet. + // Padding or keep-alive packet. // TODO(nisse): Could drop empty packets earlier, but need to figure out how // they should be counted in stats. + NotifyReceiverOfEmptyPacket(packet.SequenceNumber()); return; } if (packet.PayloadType() == config_.rtp.red_payload_type) { @@ -464,7 +465,7 @@ void RtpVideoStreamReceiver::ParseAndHandleEncapsulatingHeader( rtp_receive_statistics_->FecPacketReceived(header, packet_length); // Notify video_receiver about received FEC packets to avoid NACKing these // packets. - NotifyReceiverOfFecPacket(header); + NotifyReceiverOfEmptyPacket(header.sequenceNumber); } if (ulpfec_receiver_->AddReceivedRedPacket( header, packet, packet_length, config_.rtp.ulpfec_payload_type) != @@ -481,15 +482,9 @@ void RtpVideoStreamReceiver::ParseAndHandleEncapsulatingHeader( void RtpVideoStreamReceiver::NotifyReceiverOfEmptyPacket(uint16_t seq_num) { reference_finder_->PaddingReceived(seq_num); packet_buffer_->PaddingReceived(seq_num); -} - -void RtpVideoStreamReceiver::NotifyReceiverOfFecPacket( - const RTPHeader& header) { if (nack_module_) { - nack_module_->OnReceivedPacket(header.sequenceNumber, - /* is_keyframe = */ false); + nack_module_->OnReceivedPacket(seq_num, /* is_keyframe = */ false); } - NotifyReceiverOfEmptyPacket(header.sequenceNumber); } bool RtpVideoStreamReceiver::DeliverRtcp(const uint8_t* rtcp_packet, diff --git a/video/rtp_video_stream_receiver.h b/video/rtp_video_stream_receiver.h index efd76624e7..216a768927 100644 --- a/video/rtp_video_stream_receiver.h +++ b/video/rtp_video_stream_receiver.h @@ -144,7 +144,6 @@ class RtpVideoStreamReceiver : public RtpData, size_t packet_length, const RTPHeader& header); void NotifyReceiverOfEmptyPacket(uint16_t seq_num); - void NotifyReceiverOfFecPacket(const RTPHeader& header); bool IsPacketRetransmitted(const RTPHeader& header) const; void UpdateHistograms(); bool IsRedEnabled() const;