mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-17 17:05:50 +00:00
Fix remaining RTP queue bugs
This commit is contained in:
parent
0b6727e92d
commit
da54ebf11f
@ -90,7 +90,7 @@ static void UdpPingThreadProc(void *context) {
|
|||||||
static int queuePacketToLbq(PQUEUED_AUDIO_PACKET *packet) {
|
static int queuePacketToLbq(PQUEUED_AUDIO_PACKET *packet) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = LbqOfferQueueItem(&packetQueue, packet, &(*packet)->q.lentry);
|
err = LbqOfferQueueItem(&packetQueue, *packet, &(*packet)->q.lentry);
|
||||||
if (err == LBQ_SUCCESS) {
|
if (err == LBQ_SUCCESS) {
|
||||||
// The LBQ owns the buffer now
|
// The LBQ owns the buffer now
|
||||||
*packet = NULL;
|
*packet = NULL;
|
||||||
@ -143,6 +143,9 @@ static void ReceiveThreadProc(void* context) {
|
|||||||
// Not audio
|
// Not audio
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RTP sequence number must be in host order for the RTP queue
|
||||||
|
rtp->sequenceNumber = htons(rtp->sequenceNumber);
|
||||||
|
|
||||||
queueStatus = RtpqAddPacket(&rtpReorderQueue, (PRTP_PACKET) packet, &packet->q.rentry);
|
queueStatus = RtpqAddPacket(&rtpReorderQueue, (PRTP_PACKET) packet, &packet->q.rentry);
|
||||||
if (queueStatus == RTPQ_RET_HANDLE_IMMEDIATELY) {
|
if (queueStatus == RTPQ_RET_HANDLE_IMMEDIATELY) {
|
||||||
@ -184,9 +187,6 @@ static void DecoderThreadProc(void* context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtp = (PRTP_PACKET) &packet->data[0];
|
rtp = (PRTP_PACKET) &packet->data[0];
|
||||||
|
|
||||||
rtp->sequenceNumber = htons(rtp->sequenceNumber);
|
|
||||||
|
|
||||||
if (lastSeq != 0 && (unsigned short) (lastSeq + 1) != rtp->sequenceNumber) {
|
if (lastSeq != 0 && (unsigned short) (lastSeq + 1) != rtp->sequenceNumber) {
|
||||||
Limelog("Received OOS audio data (expected %d, but got %d)\n", lastSeq + 1, rtp->sequenceNumber);
|
Limelog("Received OOS audio data (expected %d, but got %d)\n", lastSeq + 1, rtp->sequenceNumber);
|
||||||
|
|
||||||
|
@ -82,6 +82,8 @@ static void ReceiveThreadProc(void* context) {
|
|||||||
buffer = NULL;
|
buffer = NULL;
|
||||||
|
|
||||||
while (!PltIsThreadInterrupted(&receiveThread)) {
|
while (!PltIsThreadInterrupted(&receiveThread)) {
|
||||||
|
PRTP_PACKET packet;
|
||||||
|
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
buffer = (char*) malloc(bufferSize);
|
buffer = (char*) malloc(bufferSize);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
@ -99,11 +101,15 @@ static void ReceiveThreadProc(void* context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&buffer[receiveSize], &err, sizeof(int));
|
memcpy(&buffer[receiveSize], &err, sizeof(int));
|
||||||
|
|
||||||
|
// RTP sequence number must be in host order for the RTP queue
|
||||||
|
packet = (PRTP_PACKET) &buffer[0];
|
||||||
|
packet->sequenceNumber = htons(packet->sequenceNumber);
|
||||||
|
|
||||||
queueStatus = RtpqAddPacket(&rtpQueue, (PRTP_PACKET) &buffer[0], (PRTP_QUEUE_ENTRY) &buffer[receiveSize + sizeof(int)]);
|
queueStatus = RtpqAddPacket(&rtpQueue, packet, (PRTP_QUEUE_ENTRY) &buffer[receiveSize + sizeof(int)]);
|
||||||
if (queueStatus == RTPQ_RET_HANDLE_IMMEDIATELY) {
|
if (queueStatus == RTPQ_RET_HANDLE_IMMEDIATELY) {
|
||||||
// queueRtpPacket() copies the data it needs to we can reuse the buffer
|
// queueRtpPacket() copies the data it needs to we can reuse the buffer
|
||||||
queueRtpPacket((PRTP_PACKET) buffer, err);
|
queueRtpPacket(packet, err);
|
||||||
}
|
}
|
||||||
else if (queueStatus == RTPQ_RET_QUEUED_PACKETS_READY) {
|
else if (queueStatus == RTPQ_RET_QUEUED_PACKETS_READY) {
|
||||||
// The packet queue now has packets ready
|
// The packet queue now has packets ready
|
||||||
|
Loading…
x
Reference in New Issue
Block a user