From da54ebf11f51f4c25d62b0bf14bc5fd415674f7e Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 28 May 2015 09:23:28 -0500 Subject: [PATCH] Fix remaining RTP queue bugs --- limelight-common/AudioStream.c | 8 ++++---- limelight-common/VideoStream.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/limelight-common/AudioStream.c b/limelight-common/AudioStream.c index 7ddd853..fd6fd54 100644 --- a/limelight-common/AudioStream.c +++ b/limelight-common/AudioStream.c @@ -90,7 +90,7 @@ static void UdpPingThreadProc(void *context) { static int queuePacketToLbq(PQUEUED_AUDIO_PACKET *packet) { int err; - err = LbqOfferQueueItem(&packetQueue, packet, &(*packet)->q.lentry); + err = LbqOfferQueueItem(&packetQueue, *packet, &(*packet)->q.lentry); if (err == LBQ_SUCCESS) { // The LBQ owns the buffer now *packet = NULL; @@ -143,6 +143,9 @@ static void ReceiveThreadProc(void* context) { // Not audio 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); if (queueStatus == RTPQ_RET_HANDLE_IMMEDIATELY) { @@ -184,9 +187,6 @@ static void DecoderThreadProc(void* context) { } rtp = (PRTP_PACKET) &packet->data[0]; - - rtp->sequenceNumber = htons(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); diff --git a/limelight-common/VideoStream.c b/limelight-common/VideoStream.c index 76cf925..05296b6 100644 --- a/limelight-common/VideoStream.c +++ b/limelight-common/VideoStream.c @@ -82,6 +82,8 @@ static void ReceiveThreadProc(void* context) { buffer = NULL; while (!PltIsThreadInterrupted(&receiveThread)) { + PRTP_PACKET packet; + if (buffer == NULL) { buffer = (char*) malloc(bufferSize); if (buffer == NULL) { @@ -99,11 +101,15 @@ static void ReceiveThreadProc(void* context) { } 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) { // 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) { // The packet queue now has packets ready