Index: webrtc/modules/rtp_rtcp/source/forward_error_correction.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc |
index 63c6d688c09e1f9315b7a77a1a98d0552bb2d6d5..6bc80e95d2d4b99d09c977a0d6c05f87227f1497 100644 |
--- a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc |
+++ b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc |
@@ -523,6 +523,8 @@ void ForwardErrorCorrection::InsertFecPacket( |
protected_packet->seq_num = |
static_cast<uint16_t>(seq_num_base + (byte_idx << 3) + bit_idx); |
protected_packet->pkt = nullptr; |
+ // Note that |protected_pkt_list| is sorted (according to sequence |
+ // number) by construction. |
fec_packet->protected_packets.push_back(std::move(protected_packet)); |
} |
} |
@@ -534,6 +536,11 @@ void ForwardErrorCorrection::InsertFecPacket( |
AssignRecoveredPackets(fec_packet.get(), recovered_packets); |
// TODO(holmer): Consider replacing this with a binary search for the right |
// position, and then just insert the new packet. Would get rid of the sort. |
+ // |
+ // For correct decoding, |fec_packet_list_| does not necessarily |
+ // need to be sorted by sequence number (see decoding algorithm in |
+ // AttemptRecover()), but by keeping it sorted we try to recover the |
+ // oldest lost packets first. |
received_fec_packets_.push_back(std::move(fec_packet)); |
received_fec_packets_.sort(SortablePacket::LessThan()); |
if (received_fec_packets_.size() > kMaxFecPackets) { |