2012-12-19 47 views
3

如果我排隊緩衝區以便記錄到緩衝區隊列中 - 是否有一種方法知道緩衝區何時被實際填充,所以我可以使用它?Android NDK,OpenSL ES - 知道什麼時候填充緩衝區

同樣,有沒有辦法知道何時播放緩衝區?

對於上下文: 我正在修補稱爲「native-audio」的NDK示例。 它使用SLAndroidSimpleBufferQueueItf進行播放,並且對於我想要做的流記錄,也應該使用這樣的隊列。 現在我想知道,因爲從我記得在某處讀到的內容來看,並不能保證在錄音回調的下一次呼叫時(或者在播放回放中播放),緩衝區已經填滿了 - 如何知道什麼時候緩衝區已被使用? 肯定有一些方法,因爲否則這一切都會有點無用? ^^

回答

4

對於錄製,如果您使用IBufferQueue_RegisterCallback註冊slBufferQueueCallback,則應在填充緩衝區時收到回調。

另見this discussion的Android的NDK名單:

如果我沒理解好,記錄每個隊列中的緩衝區填滿的時間將打回電話,和這些緩衝區的順序填寫他們入隊。但是回調看起來並沒有公開指向相應已填充緩衝區的指針。那麼如何回收呢? OpenSL ES規範中的示例代碼顯示了一個回放示例,其中包含一個作爲回調的上下文傳入的結構以跟蹤這些結構,是否需要執行此操作?
...
沒錯。這是OpenSL ES 1.0.1規範中的一個已知缺陷。 OpenSL ES 1.1添加了一個顯式參數來標識緩衝區,但Android目前基於1.0.1規範。解決方法是自己維護一個索引以指示正在完成哪個緩衝區。

+0

我會看看,謝謝! – user1847129