1

別のワーカー スレッドで出力ピン (1 つ以上のピン) のサンプルのデータを生成する必要があるソース フィルターを作成しています (ワーカー スレッドは、単一のスレッドからのみ安全にアクセスできるライブラリを呼び出します)。

ストリーミング スレッドでの通常の使用と同時にワーカー スレッドから出力ピンのアロケータで GetBuffer を呼び出すことは安全ですか (たとえば、再生が停止したときにアロケータがデコミットされます)。

バッファーが残っていない場合の GetBuffer のブロックや、アロケーターがデコミットされた場合の失敗コードの返しなど、通常の考慮事項については承知しています。明らかに、これには SourceStream::GetDeliveryBuffer のオーバーライドも含まれます。

明らかな代替手段は、ワーカーが各ストリーミング スレッドによってメディア サンプルにコピーされる通常のメモリ バッファーのキューを生成することです。

4

1 に答える 1

1

これが問題になる可能性があると私が知っている唯一のケースは、かなりあいまいです。取得しているバッファーが (元の) ビデオ レンダラーからのプライマリ サーフェスである場合、割り当てと解放は同じスレッド上にある必要があります。

その特殊な状況以外では、ストック メモリ アロケータは完全にスレッド セーフです。

于 2013-10-27T22:10:22.730 に答える