Return the oldest packet instead of removing it upon RTP queue constraint violation
This commit is contained in:
parent
be78c36fa1
commit
a5b5ed8d2b
1 changed files with 10 additions and 15 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue