簡體   English   中英

是什么導致ExtAudioFileRead使ioData-> mBuffers [0] .mDataByteSize變為負數?

[英]What causes ExtAudioFileRead to make ioData->mBuffers[0].mDataByteSize negative?

當我經常停止並開始音頻播放,並通過ExtAudioFileRef對象在AAC音頻文件中來回查找很多內容時,就會出現問題。 在少數情況下, ExtAudioFileRead會顯示這種奇怪的行為:

有時,它們將這些數字分配給mDataByteSize的唯一AudioBufferAudioBufferList

-51604480
-51227648
-51350528
-51440640
-51240960

以十六進制表示,這些數字的格式為0xFC....00

編碼:

status = ExtAudioFileRead(_file, &numberFramesRead, ioData);

printf("s=%li d=%p d.nb=%li, d.b.d=%p, d.b.dbs=%li, d.b.nc=%li\n", status, ioData, ioData->mNumberBuffers, ioData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize, ioData->mBuffers[0].mNumberChannels);

輸出:

s=0 d=0x16668bd0 d.nb=1, d.b.d=0x30de000, d.b.dbs=1024, d.b.nc=2 // good (usual)
s=0 d=0x16668bd0 d.nb=1, d.b.d=0x30de000, d.b.dbs=-51240960, d.b.nc=2 // misbehaving

該問題發生在iOS 7的iPhone 4S上。我無法在模擬器中重現該問題。

當從兩個不同的線程/隊列中為同一個ExtAudioFileRef同時調用ExtAudioFileRead()ExtAudioFileSeek()時,會發生此問題。

read函數直接從AURenderCallback ,因此它是在AudioUnit的實時線程上執行的,而查找是在我自己的串行隊列上完成的。

我已經修改了渲染回調的代碼,也將dispatch_sync()分配到與查找相關的序列隊列。 那解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM