トランスポート

フィルタ グラフ内でメディア データを移動させるために、DirectShow フィルタはいくつかの使用可能なプロトコルのいずれかをサポートしている必要がある。これらのプロトコルを "トランスポート" と呼ぶ。2 つのフィルタを接続する場合、同じトランスポートをサポートしている必要がある。同じトランスポートをサポートしていない場合、フィルタはメディア データを交換できない。通常、トランスポートではいずれかのピンが特定のインターフェイスをサポートしている必要がある。フィルタを接続する場合、1 つのピンが別のピンにインターフェイスを照会する。

多くの DirectShow フィルタはメディア データをメイン メモリ内に保持し、ピン接続を介して他のフィルタにデータを送る。このタイプのトランスポートを、"ローカル メモリ" トランスポートと呼ぶ。ローカル メモリ トランスポートは DirectShow で最も一般的なトランスポートであるが、すべてのフィルタがこのトランスポートを使うわけではない。たとえば、一部のフィルタはハードウェア パスでメディア データを送信し、制御情報を送るためにのみピンを使う。たとえば、IOverlay インターフェイスを参照すること。

DirectShow では、ローカル メモリ トランスポートについて、"プッシュ" モデルと "プル" モデルの 2 つのメカニズムを定義している。プッシュ モデルでは、ソース フィルタがデータを生成し、ダウンストリームの次のフィルタにデータを送る。そのフィルタは受動的にデータを受信し、処理して、さらにダウンストリームに送信する。プル モデルでは、ソース フィルタはパーサー フィルタに接続される。パーサー フィルタがソース フィルタにデータを要求する。ソース フィルタはデータを送ることによって要求に応答する。プッシュ モデルでは IMemInputPin インターフェイスを使い、プル モデルでは IAsyncReader インターフェイスを使う。

プッシュ モデルはプル モデルよりも一般的である。したがって、これ以降の説明はプッシュ モデルを前提にしている。このセクションの最後にある「プル モデル」では、IAsyncReader インターフェイスが IMemInputPin とどのように異なるかを説明する。