2010-04-05 116 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

回答