From 313a55a5cabee45378e5570b7b0af934052e30e4 Mon Sep 17 00:00:00 2001 From: Thong Nguyen Date: Sun, 26 Jan 2014 23:57:00 +0000 Subject: [PATCH] Added more stable duration calculations --- StreamingKit/StreamingKit/STKAudioPlayer.m | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/StreamingKit/StreamingKit/STKAudioPlayer.m b/StreamingKit/StreamingKit/STKAudioPlayer.m index e049de2..1334e51 100644 --- a/StreamingKit/StreamingKit/STKAudioPlayer.m +++ b/StreamingKit/StreamingKit/STKAudioPlayer.m @@ -1003,7 +1003,18 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ SInt64 packetSize = packetDescriptionsIn[i].mDataByteSize; int bufSpaceRemaining; - if (currentlyReadingEntry->processedPacketsSizeTotal < 0xfffff) + int framesPerPacket; + + if (packetDescriptionsIn[i].mVariableFramesInPacket > 0) + { + framesPerPacket = packetDescriptionsIn[i].mVariableFramesInPacket; + } + else + { + framesPerPacket = currentlyReadingEntry->audioStreamBasicDescription.mFramesPerPacket; + } + + if (currentlyReadingEntry->processedPacketsCount * framesPerPacket < currentlyReadingEntry->audioStreamBasicDescription.mSampleRate * 5 * currentlyReadingEntry->audioStreamBasicDescription.mChannelsPerFrame) { OSAtomicAdd32((int32_t)packetSize, ¤tlyReadingEntry->processedPacketsSizeTotal); OSAtomicIncrement32(¤tlyReadingEntry->processedPacketsCount); @@ -1034,14 +1045,8 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ AudioQueueBufferRef bufferToFill = audioQueueBuffer[fillBufferIndex]; memcpy((char*)bufferToFill->mAudioData + bytesFilled, (const char*)inputData + packetOffset, (unsigned long)packetSize); - if (packetDescriptionsIn[i].mVariableFramesInPacket > 0) - { - framesFilled += packetDescriptionsIn[i].mVariableFramesInPacket; - } - else - { - framesFilled += currentlyReadingEntry->audioStreamBasicDescription.mFramesPerPacket; - } + + framesFilled += framesPerPacket; packetDescs[packetsFilled] = packetDescriptionsIn[i]; packetDescs[packetsFilled].mStartOffset = bytesFilled;