Fix NACK logic for empty packets

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 <philipel@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24378}
This commit is contained in:
Niels Möller
2018-08-21 17:49:24 +02:00
committed by Commit Bot
parent c5d121e142
commit 0b9267830c
2 changed files with 4 additions and 10 deletions

View File

@ -396,9 +396,10 @@ void RtpVideoStreamReceiver::RemoveSecondarySink(
void RtpVideoStreamReceiver::ReceivePacket(const RtpPacketReceived& packet) { void RtpVideoStreamReceiver::ReceivePacket(const RtpPacketReceived& packet) {
if (packet.payload_size() == 0) { 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 // TODO(nisse): Could drop empty packets earlier, but need to figure out how
// they should be counted in stats. // they should be counted in stats.
NotifyReceiverOfEmptyPacket(packet.SequenceNumber());
return; return;
} }
if (packet.PayloadType() == config_.rtp.red_payload_type) { if (packet.PayloadType() == config_.rtp.red_payload_type) {
@ -464,7 +465,7 @@ void RtpVideoStreamReceiver::ParseAndHandleEncapsulatingHeader(
rtp_receive_statistics_->FecPacketReceived(header, packet_length); rtp_receive_statistics_->FecPacketReceived(header, packet_length);
// Notify video_receiver about received FEC packets to avoid NACKing these // Notify video_receiver about received FEC packets to avoid NACKing these
// packets. // packets.
NotifyReceiverOfFecPacket(header); NotifyReceiverOfEmptyPacket(header.sequenceNumber);
} }
if (ulpfec_receiver_->AddReceivedRedPacket( if (ulpfec_receiver_->AddReceivedRedPacket(
header, packet, packet_length, config_.rtp.ulpfec_payload_type) != header, packet, packet_length, config_.rtp.ulpfec_payload_type) !=
@ -481,15 +482,9 @@ void RtpVideoStreamReceiver::ParseAndHandleEncapsulatingHeader(
void RtpVideoStreamReceiver::NotifyReceiverOfEmptyPacket(uint16_t seq_num) { void RtpVideoStreamReceiver::NotifyReceiverOfEmptyPacket(uint16_t seq_num) {
reference_finder_->PaddingReceived(seq_num); reference_finder_->PaddingReceived(seq_num);
packet_buffer_->PaddingReceived(seq_num); packet_buffer_->PaddingReceived(seq_num);
}
void RtpVideoStreamReceiver::NotifyReceiverOfFecPacket(
const RTPHeader& header) {
if (nack_module_) { if (nack_module_) {
nack_module_->OnReceivedPacket(header.sequenceNumber, nack_module_->OnReceivedPacket(seq_num, /* is_keyframe = */ false);
/* is_keyframe = */ false);
} }
NotifyReceiverOfEmptyPacket(header.sequenceNumber);
} }
bool RtpVideoStreamReceiver::DeliverRtcp(const uint8_t* rtcp_packet, bool RtpVideoStreamReceiver::DeliverRtcp(const uint8_t* rtcp_packet,

View File

@ -144,7 +144,6 @@ class RtpVideoStreamReceiver : public RtpData,
size_t packet_length, size_t packet_length,
const RTPHeader& header); const RTPHeader& header);
void NotifyReceiverOfEmptyPacket(uint16_t seq_num); void NotifyReceiverOfEmptyPacket(uint16_t seq_num);
void NotifyReceiverOfFecPacket(const RTPHeader& header);
bool IsPacketRetransmitted(const RTPHeader& header) const; bool IsPacketRetransmitted(const RTPHeader& header) const;
void UpdateHistograms(); void UpdateHistograms();
bool IsRedEnabled() const; bool IsRedEnabled() const;