Added more stable duration calculations

This commit is contained in:
Thong Nguyen 2014-01-26 23:57:00 +00:00
parent ba8b29d106
commit 313a55a5ca
1 changed files with 14 additions and 9 deletions

View File

@ -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, &currentlyReadingEntry->processedPacketsSizeTotal);
OSAtomicIncrement32(&currentlyReadingEntry->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;