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:
@ -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,
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user