2013-10-27 19 views
1

我在寫一個源過濾器,需要在單獨的工作器的輸出引腳(1個或多個引腳)上爲樣本生成數據線程(工作線程調用只能從單線程訪問的庫)。IMemAllocator :: GetBuffer可以安全地從工作者線程以及其流式處理線程調用

在流線程上正常使用的同時,如何在工作線程上調用輸出引腳分配器上的GetBuffer是否安全(例如,分配器在停止播放時將被解除)?

我知道正常的考慮事項,例如GetBuffer阻塞,當沒有緩衝區留下或返回失敗代碼時,分配器被取消。顯然,這也涉及重寫SourceStream :: GetDeliveryBuffer。

顯而易見的選擇是工作人員生成一個正常的內存緩衝區隊列,每個流線程將其複製到媒體樣本中。

回答

1

我唯一知道這可能會有問題的情況是非常模糊的。如果您獲得的緩衝區是(原始)視頻渲染器的主要表面,則分配和空閒需要位於同一個線程中。

除了這種特殊情況之外,庫存分配器完全是線程安全的。

+0

感謝您的特殊情況的答案和警告。 – persiflage

相關問題