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 ecaa86e5d2f38fc26ccf382cd623949226a915b3..64a846fd65c26bcad4f7565fa967b4d4e48552ad 100644 |
--- a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc |
+++ b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc |
@@ -544,11 +544,13 @@ void ForwardErrorCorrection::InsertFecPacket( |
for (uint16_t bit_idx = 0; bit_idx < 8; ++bit_idx) { |
if (packet_mask & (1 << (7 - bit_idx))) { |
ProtectedPacket* protected_packet = new ProtectedPacket(); |
- fec_packet->protected_pkt_list.push_back(protected_packet); |
// This wraps naturally with the sequence number. |
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_pkt_list.push_back(protected_packet); |
} |
} |
} |
@@ -560,6 +562,11 @@ void ForwardErrorCorrection::InsertFecPacket( |
AssignRecoveredPackets(fec_packet, recovered_packet_list); |
// 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. |
fec_packet_list_.push_back(fec_packet); |
fec_packet_list_.sort(SortablePacket::LessThan); |
if (fec_packet_list_.size() > kMaxFecPackets) { |