0
다음 AudioConverterComplexInputDataProc가 있습니다. 문제는 NSLog() 호출을 제거하면 콜백이 4th 정도 반복되어 멈추고 계속되지 않는다는 것입니다.AudioConverterComplexInputDataProc은 NSLog에서만 작동합니다.
OSStatus MyAudioConverterComplexInputDataProc (
AudioConverterRef inAudioConverter,
UInt32 *ioNumberDataPackets,
AudioBufferList *ioData,
AudioStreamPacketDescription **outDataPacketDescription,
void *inUserData
)
{
NSLog(@"Callback");
BSAACEncoder *This = (__bridge BSAACEncoder*)inUserData;
UInt32 framesAvailable = TPCircularBufferPeek(This->inputBuffer, NULL, This.audioFormat);
int numBytes = MIN(*ioNumberDataPackets * This.audioFormat->mBytesPerPacket, framesAvailable * This.audioFormat->mBytesPerFrame);
UInt32 framesToFetch = numBytes/This.audioFormat->mBytesPerFrame;
AudioBufferList *sourceBuffer;
if (framesToFetch > 0)
{
sourceBuffer = AllocateABL(This.audioFormat->mChannelsPerFrame, This.audioFormat->mBytesPerFrame, NO, framesToFetch);
TPCircularBufferDequeueBufferListFrames(This->inputBuffer, &framesToFetch, sourceBuffer, NULL, This.audioFormat);
}
for (int i = 0; i < This.audioFormat->mChannelsPerFrame; i++)
{
ioData->mBuffers[i].mNumberChannels = 1;
ioData->mBuffers[i].mData = (numBytes > 0) ? sourceBuffer->mBuffers[i].mData : NULL;
ioData->mBuffers[i].mDataByteSize = numBytes;
}
*ioNumberDataPackets = numBytes/This.audioFormat->mBytesPerPacket;
return noErr;
}