Return the oldest packet instead of removing it upon RTP queue constraint violation

This commit is contained in:
Cameron Gutman
2016-04-27 02:22:14 -04:00
parent be78c36fa1
commit a5b5ed8d2b

View File

@@ -134,7 +134,7 @@ static void removeEntry(PRTP_REORDER_QUEUE queue, PRTP_QUEUE_ENTRY entry) {
} }
static PRTP_QUEUE_ENTRY validateQueueConstraints(PRTP_REORDER_QUEUE queue) { static PRTP_QUEUE_ENTRY validateQueueConstraints(PRTP_REORDER_QUEUE queue) {
int needsUpdate = 0; int dequeuePacket = 0;
// Empty queue is fine // Empty queue is fine
if (queue->queueHead == NULL) { if (queue->queueHead == NULL) {
@@ -143,24 +143,19 @@ static PRTP_QUEUE_ENTRY validateQueueConstraints(PRTP_REORDER_QUEUE queue) {
// Check that the queue's time constraint is satisfied // Check that the queue's time constraint is satisfied
if (PltGetMillis() - queue->oldestQueuedTimeMs > queue->maxQueueTimeMs) { if (PltGetMillis() - queue->oldestQueuedTimeMs > queue->maxQueueTimeMs) {
Limelog("Discarding RTP packet queued for too long\n"); Limelog("Returning RTP packet queued for too long\n");
removeEntry(queue, queue->oldestQueuedEntry); dequeuePacket = 1;
free(queue->oldestQueuedEntry->packet);
needsUpdate = 1;
} }
// Check that the queue's size constraint is satisfied // Check that the queue's size constraint is satisfied. We subtract one
if (!needsUpdate && queue->queueSize == queue->maxSize) { // because this is validating that the queue will meet constraints _after_
Limelog("Discarding RTP packet after queue overgrowth\n"); // the current packet is enqueued.
removeEntry(queue, queue->oldestQueuedEntry); if (!dequeuePacket && queue->queueSize == queue->maxSize - 1) {
free(queue->oldestQueuedEntry->packet); Limelog("Returning RTP packet after queue overgrowth\n");
needsUpdate = 1; dequeuePacket = 1;
} }
if (needsUpdate) { if (dequeuePacket) {
// Recalculate the oldest entry if needed
updateOldestQueued(queue);
// Return the lowest seq queued // Return the lowest seq queued
return getEntryByLowestSeq(queue); return getEntryByLowestSeq(queue);
} }