私はLiveDirectShowフィルターを開発しています。
SDKAPIを介してストリームを取得できるH264ストリームソースがあります。
私のフィルターには、スレッドからの着信ストリームをエンキュー(プッシュ)するキューがあります。次に、これらのストリームをフィルターFillBuffer内で消費(Dequeue、pop)します。
だから私はスレッドセーフなキューを作ります...しかしこれはいくつかの問題を引き起こします...
FillBufferで、着信パケットがあるかどうかを確認し、ある場合、プロセスロジックは次のようになります。
...
bool hasElement = SynchronizedQueue.pop(element);
if(!hasElement)
{
return S_OK
}
...
...これは多くのCPUを消費します...
しかし、ブーストライブラリを使用して条件変数でロックを実装する
...
SynchronizedQueue.waitAndPop(element) ;// which wait until we have some
恋人のCPUを持っている...しかし、キューにデータがないときは、このブロックのFillBuffer関数とフィルターが停止しないことがあります。
では、リモートマシンから入力ストリームを取得してデコーダーに渡すライブソースフィルターの代替設計案はありますか?または、どうすればデザインを改善できますか?CPUを下げて、停止することができますか?