核心音频 - CARIngBuffer

时间:2010-04-05 11:40:59

标签: iphone

我正在考虑在iPhone SDK 3.1 Developer \ Extras \ CoreAudio \ PublicUtility中使用CARingBuffer,但是对它的某些方法有点疑惑。首先,这对任何使用过这门课程的人来说都是有意义的

例如,GetTimebounds,SetTimeBounds,ClipTimeBounds函数实际上在做什么?

同样在使用它时,我会在主要的Fetch方法中使用示例此方法导致崩溃

- > ZeroABL(abl,0,destStartOffset * mBytesPerFrame);

CARingBufferError CARingBuffer::Fetch(AudioBufferList *abl, UInt32 nFrames, SampleTime startRead)
{
 SampleTime endRead = startRead + nFrames;

 SampleTime startRead0 = startRead;
 SampleTime endRead0 = endRead;
 SampleTime size;

 CARingBufferError err = ClipTimeBounds(startRead, endRead);
 if (err) return err;
 size = endRead - startRead;

 SInt32 destStartOffset = startRead - startRead0; 
 if (destStartOffset > 0) {
  ZeroABL(abl, 0, destStartOffset * mBytesPerFrame);
 }

这里destStartOffset已经变得大于abl Bufferlist的大小,因此当memset完成时,它超出了导致崩溃的abl Bufferlist的边界。为什么这个班级没有办理入住手续以防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

您需要下载此类的更新(错误修复)版本,以摆脱越界崩溃。

https://developer.apple.com/library/content/qa/qa1665/_index.html