2013-12-19 6 views
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; 
} 

답변

0

정상적으로 작동합니다.

if (framesToFetch == 0) 
{ 
    *ioNumberDataPackets = 0; 
    return 100; // Keep asking for data 
} 

데이터를 반환하지 않은 경우 분명히 '100'을 반환해야 더 많은 정보를 사용할 수 있습니다.