我正在開發一個Live DirectShow過濾器。Directshow Live Source Filter Design
我有一個H264流源,我可以通過SDK API獲取流。
在我的過濾器中,我有一個Queue,它使我從一個線程Enqueue(推送)傳入的流。 然後我消耗(出列,流行)的過濾器FillBuffer內這些流...
所以我讓一個線程安全的隊列......但是,這會導致一些問題....
在FillBuffer如果我檢查是否有任何進入的數據包,並且如果存在,過程 邏輯是這樣的:
...
bool hasElement = SynchronizedQueue.pop(element);
if(!hasElement)
{
return S_OK
}
...
...這消耗得多CPU ...用升壓LIB噸
Howewer Ø實現與條件變量
...
SynchronizedQueue.waitAndPop(element) ;// which wait until we have some
其中有一個情人CPU ......但有時當在隊列中沒有數據,此塊FillBuffer功能和過濾可能不會停止...鎖。
因此,任何設計思想的替代品的活源過濾器,從遠程機器獲取輸入流並傳遞給解碼器? 或者我怎樣才能使我的設計更好....降低CPU,可以停止?
如何檢測過濾器是否停止?在過濾器裏面...... – Novalis 2012-08-16 12:25:40
嗯,它是對你的對象調用的'IBaseFilter :: Stop',除了你和基類已經在做什麼之外,你一定可以處理它。 – 2012-08-16 12:37:19