我们有一个读取缓冲区的音频单元,并且我在回调函数中有内存增长。它工作得很好,但我花了很多时间来解决这个泄漏。
消除问题后,我发现苹果编写的基本配置代码导致内存增长(每秒 100k)
这是我的回调,在拿完所有其他东西之后,有问题:
AudioComponentInstance audioUnit;
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2;
buffer.mData = malloc( inNumberFrames * 2 );
// Put buffer in a AudioBufferList
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
// problematic block ******
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
//end of problem block ******
free(buffer.mData);
}
删除该块可以解决问题。
audioUnit 需要一个属性吗?我的基本问题可能是什么?谢谢。