我正在研究在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的大小,因此完成内存集后,它超出了abl Bufferlist的边界,从而导致崩溃。为什么这个班没有上课以防止这种情况发生?

最佳答案

您需要下载此类的更新(错误修复)版本才能摆脱崩溃的限制。

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

10-08 05:23