mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-18 01:15:46 +00:00
Various minor fixes to the FEC queue
This commit is contained in:
parent
4791f62688
commit
1a2996a49a
@ -2,8 +2,8 @@
|
|||||||
#include "RtpFecQueue.h"
|
#include "RtpFecQueue.h"
|
||||||
#include "rs.h"
|
#include "rs.h"
|
||||||
|
|
||||||
#define ushort(x) (unsigned short) ((x) % (UINT16_MAX+1))
|
#define ushort(x) ((unsigned short) ((x) % (UINT16_MAX+1)))
|
||||||
#define isBefore(x, y) ushort((x) - (y)) > (UINT16_MAX/2)
|
#define isBefore(x, y) (ushort((x) - (y)) > (UINT16_MAX/2))
|
||||||
|
|
||||||
void RtpfInitializeQueue(PRTP_FEC_QUEUE queue) {
|
void RtpfInitializeQueue(PRTP_FEC_QUEUE queue) {
|
||||||
reed_solomon_init();
|
reed_solomon_init();
|
||||||
@ -19,16 +19,19 @@ void RtpfCleanupQueue(PRTP_FEC_QUEUE queue) {
|
|||||||
queue->bufferHead = entry->next;
|
queue->bufferHead = entry->next;
|
||||||
free(entry->packet);
|
free(entry->packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (queue->queueHead != NULL) {
|
||||||
|
PRTPFEC_QUEUE_ENTRY entry = queue->queueHead;
|
||||||
|
queue->queueHead = entry->next;
|
||||||
|
free(entry->packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// newEntry is contained within the packet buffer so we free the whole entry by freeing entry->packet
|
// newEntry is contained within the packet buffer so we free the whole entry by freeing entry->packet
|
||||||
static int queuePacket(PRTP_FEC_QUEUE queue, PRTPFEC_QUEUE_ENTRY newEntry, int head, PRTP_PACKET packet) {
|
static int queuePacket(PRTP_FEC_QUEUE queue, PRTPFEC_QUEUE_ENTRY newEntry, int head, PRTP_PACKET packet) {
|
||||||
PRTPFEC_QUEUE_ENTRY entry;
|
PRTPFEC_QUEUE_ENTRY entry;
|
||||||
|
|
||||||
// Don't queue packets we're already ahead of
|
LC_ASSERT(!isBefore(packet->sequenceNumber, queue->nextRtpSequenceNumber));
|
||||||
if (isBefore(packet->sequenceNumber, queue->nextRtpSequenceNumber)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't queue duplicates either
|
// Don't queue duplicates either
|
||||||
entry = queue->bufferHead;
|
entry = queue->bufferHead;
|
||||||
@ -134,7 +137,8 @@ static void repairPackets(PRTP_FEC_QUEUE queue) {
|
|||||||
cleanup_packets:
|
cleanup_packets:
|
||||||
for (i = 0; i < totalPackets; i++) {
|
for (i = 0; i < totalPackets; i++) {
|
||||||
if (marks[i]) {
|
if (marks[i]) {
|
||||||
if (ret == 0) {
|
// Only submit frame data, not FEC packets
|
||||||
|
if (ret == 0 && i < queue->bufferDataPackets) {
|
||||||
PRTPFEC_QUEUE_ENTRY queueEntry = (PRTPFEC_QUEUE_ENTRY)&packets[i][receiveSize + sizeof(int)];
|
PRTPFEC_QUEUE_ENTRY queueEntry = (PRTPFEC_QUEUE_ENTRY)&packets[i][receiveSize + sizeof(int)];
|
||||||
PRTP_PACKET rtpPacket = (PRTP_PACKET) packets[i];
|
PRTP_PACKET rtpPacket = (PRTP_PACKET) packets[i];
|
||||||
rtpPacket->sequenceNumber = ushort(i + queue->bufferLowestSequenceNumber);
|
rtpPacket->sequenceNumber = ushort(i + queue->bufferLowestSequenceNumber);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user