mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2026-04-23 00:19:53 +00:00
Return the oldest packet instead of removing it upon RTP queue constraint violation
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user