Catch RTP FEC queue corruption earlier

This commit is contained in:
Cameron Gutman 2018-09-04 15:56:02 -07:00
parent 4a3521cfc6
commit fa7b23f339
2 changed files with 6 additions and 6 deletions

View File

@ -5,7 +5,6 @@
void RtpfInitializeQueue(PRTP_FEC_QUEUE queue) {
reed_solomon_init();
memset(queue, 0, sizeof(*queue));
queue->nextRtpSequenceNumber = UINT16_MAX;
queue->currentFrameNumber = UINT16_MAX;
}
@ -28,7 +27,7 @@ void RtpfCleanupQueue(PRTP_FEC_QUEUE queue) {
static int queuePacket(PRTP_FEC_QUEUE queue, PRTPFEC_QUEUE_ENTRY newEntry, int head, PRTP_PACKET packet, int length, int isParity) {
PRTPFEC_QUEUE_ENTRY entry;
LC_ASSERT(!isBefore16(packet->sequenceNumber, queue->nextRtpSequenceNumber));
LC_ASSERT(!isBefore16(packet->sequenceNumber, queue->bufferLowestSequenceNumber));
// Don't queue duplicates either
entry = queue->bufferHead;
@ -212,8 +211,8 @@ static void removeEntry(PRTP_FEC_QUEUE queue, PRTPFEC_QUEUE_ENTRY entry) {
}
int RtpfAddPacket(PRTP_FEC_QUEUE queue, PRTP_PACKET packet, int length, PRTPFEC_QUEUE_ENTRY packetEntry) {
if (isBefore16(packet->sequenceNumber, queue->nextRtpSequenceNumber)) {
// Reject packets behind our current sequence number
if (isBefore16(packet->sequenceNumber, queue->bufferLowestSequenceNumber)) {
// Reject packets behind our current buffer window
return RTPF_RET_REJECTED;
}
@ -241,7 +240,6 @@ int RtpfAddPacket(PRTP_FEC_QUEUE queue, PRTP_PACKET packet, int length, PRTPFEC_
}
queue->currentFrameNumber = nvPacket->frameIndex;
queue->nextRtpSequenceNumber = queue->bufferHighestSequenceNumber;
// Discard any unsubmitted buffers from the previous frame
while (queue->bufferHead != NULL) {
@ -263,6 +261,9 @@ int RtpfAddPacket(PRTP_FEC_QUEUE queue, PRTP_PACKET packet, int length, PRTPFEC_
} else if (isBefore16(queue->bufferHighestSequenceNumber, packet->sequenceNumber)) {
queue->bufferHighestSequenceNumber = packet->sequenceNumber;
}
LC_ASSERT(((nvPacket->fecInfo & 0xFF0) >> 4) == queue->fecPercentage);
LC_ASSERT(((nvPacket->fecInfo & 0xFFF00000) >> 20) / 4 == queue->bufferDataPackets);
if (!queuePacket(queue, packetEntry, 0, packet, length, !isBefore16(packet->sequenceNumber, queue->bufferFirstParitySequenceNumber))) {
return RTPF_RET_REJECTED;

View File

@ -28,7 +28,6 @@ typedef struct _RTP_FEC_QUEUE {
int fecPercentage;
int currentFrameNumber;
unsigned int nextRtpSequenceNumber;
} RTP_FEC_QUEUE, *PRTP_FEC_QUEUE;
#define RTPF_RET_QUEUED_NOTHING_READY 0