- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过AV Foundation的导出功能从iPod库中的轨道读取LPCM样本。我的大部分代码都是从Chris Adamson's example here借用的。
我正在设置一个新的CMBlockBufferRef
,并使用CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
保留它。根据苹果的CFType reference,我需要在我明确保留的任何对象上使用CFRelease
。
问题是我似乎无法弄清楚在哪里释放CMBlockBufferRef
对象。如果我根本不释放它,则会出现大量内存泄漏。如果我尝试在循环内的任何地方释放它,则该应用程序崩溃,并且GrabAudioData方法中出现EXC_BAD_ACCESS错误。如果我尝试在循环外启动并释放它,则内存泄漏仍然存在。我试过测试,看看blockBuffer
是否是NULL
,然后再发布,但这不起作用。请帮忙!
while (assetReader.status != AVAssetReaderStatusCompleted)
{
if (assetReader.status == AVAssetReaderStatusReading)
{
CMSampleBufferRef nextBuffer = [readerOutput copyNextSampleBuffer];
if (nextBuffer)
{
AudioBufferList bufferList;
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(nextBuffer, NULL, &bufferList, sizeof(bufferList), NULL, NULL, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer);
// Using the AudioBufferList
bufferManager->GrabAudioData(&bufferList);
CMSampleBufferInvalidate(nextBuffer);
CFRelease(nextBuffer);
// Releasing here causes a crash
// CFRelease(blockBuffer);
}
else
{
break;
}
}
}
最佳答案
除了@ sinn246的答案,您还必须检查CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer的返回值:
OSStatus err = CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(nextBuffer, NULL, &bufferList, sizeof(bufferList), NULL, NULL, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer);
if (!err && blockBuffer && bufferList.mBuffers[0].mData && (bufferList.mBuffers[0].mDataByteSize > 0))
{
// Using the AudioBufferList
bufferManager->GrabAudioData(&bufferList);
}
if (blockBuffer) // Double check that what you are releasing actually exists!
{
CFRelease(blockBuffer);
}
CMSampleBufferInvalidate(nextBuffer);
CFRelease(nextBuffer);
关于objective-c - 何时释放CMBlockBufferRef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143359/
我正在努力(出现内存错误,或者显然没有正确释放内存)尝试创建一个 CMBlockBufferRef,其中填充了来自现有 NSData(或 NSMutableData)的数据。我会很高兴有一个复制数据的
我正在尝试使用 AVAssetReader 读取视频文件并将音频传递给 CoreAudio 进行处理(添加效果和内容),然后再使用 AVAssetWriter 将其保存回磁盘。我想指出的是,如果我将输
我是一名优秀的程序员,十分优秀!