Fix remaining RTP queue bugs

This commit is contained in:
Cameron Gutman 2015-05-28 09:23:28 -05:00
parent 0b6727e92d
commit da54ebf11f
2 changed files with 12 additions and 6 deletions

View File

@ -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);

View File

@ -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