プル モデル

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

IMemInputPin インターフェイスでは、アップストリーム フィルターによって送信するデータが決定され、ダウンストリーム フィルターにデータがプッシュされます。 一部のフィルターでは、 プル モデルの方が適しています。 ここで、ダウンストリーム フィルターはアップストリーム フィルターからデータを要求します。 サンプルは出力ピンから入力ピンまで下流に移動しますが、ダウンストリーム フィルターによってデータ フローが開始されます。 この種類の接続では、 IAsyncReader インターフェイスが使用されます。

プル モデルの一般的な用途は、ファイルの再生です。 たとえば、AVI 再生グラフでは、 Async File Source フィルターは汎用のファイル読み取り操作を実行し、データをバイト ストリームとして配信しますが、形式情報はありません。 AVI スプリッター フィルターは AVI ヘッダーを読み取り、ストリームをビデオとオーディオのサンプルに解析します。 AVI スプリッターは、非同期ファイル ソース フィルターよりも必要なデータを特定できるため、IMemInputPin の代わりに IAsyncReader を使用します。

出力ピンからデータを要求するために、入力ピンは次のいずれかのメソッドを呼び出します。

最初のメソッドは非同期で、複数の重複する読み取りをサポートします。 その他は同期です。

理論的には、どのフィルターでも IAsyncReader をサポートできますが、実際にはパーサー フィルターに接続するソース フィルター用に設計されています。 パーサーは、プッシュ モデルのソース フィルターと非常によく似ています。 一時停止すると、 IAsyncReader 接続からデータをプルし、ダウンストリームにプッシュするストリーミング スレッドが作成されます。 出力ピンでは IMemInputPin が使用され、グラフの残りの部分では標準のプッシュ モデルが使用されます。

フィルター グラフのData Flow