2010-04-05 97 views
3

我正在使用iPhone SDK 3.1 Developer \ Extras \ CoreAudio \ PublicUtility中的CARingBuffer,但对其某些方法有点困惑。首先,这对所有使用这个类的人都是有意义的核心音频 - CARIngBuffer

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

而且使用时,我得到引起例如该方法在主要取方法崩溃

- > 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的边界导致崩溃较大。为什么这个班没有接受检查以防止这种情况发生?

+0

我最近有同样的问题,我正在使用QA1665更新。 – sbooth 2011-05-30 13:55:28

回答