Fixes an issue in the FEC decoder where a big jump in sequence numbers may cause new packets to be discarded if there is a wrap around.
BUG= TEST= Review URL: https://webrtc-codereview.appspot.com/455003 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1934 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -673,6 +673,16 @@ int32_t ForwardErrorCorrection::DecodeFEC(
|
||||
RecoveredPacketList* recoveredPacketList) {
|
||||
// TODO(marpan/ajm): can we check for multiple ULP headers, and return an
|
||||
// error?
|
||||
if (recoveredPacketList->size() == kMaxMediaPackets) {
|
||||
const unsigned int seq_num_diff = abs(
|
||||
static_cast<int>(receivedPacketList->front()->seqNum) -
|
||||
static_cast<int>(recoveredPacketList->back()->seqNum));
|
||||
if (seq_num_diff > kMaxMediaPackets) {
|
||||
// A big gap in sequence numbers. The old recovered packets
|
||||
// are now useless, so it's safe to do a reset.
|
||||
ResetState(recoveredPacketList);
|
||||
}
|
||||
}
|
||||
InsertPackets(receivedPacketList, recoveredPacketList);
|
||||
AttemptRecover(recoveredPacketList);
|
||||
return 0;
|
||||
|
@ -288,7 +288,7 @@ TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
||||
delayed_fec = fec_packets.front();
|
||||
|
||||
// Fill the FEC decoder. No packets should be dropped.
|
||||
const unsigned int kNumMediaPacketsBatch2 = 47u;
|
||||
const unsigned int kNumMediaPacketsBatch2 = 46u;
|
||||
std::list<RtpPacket*> media_rtp_packets_batch2;
|
||||
std::list<Packet*> media_packets_batch2;
|
||||
GenerateAndAddFrames(kNumMediaPacketsBatch2, 1, &media_rtp_packets_batch2,
|
||||
|
Reference in New Issue
Block a user