接続のピン留め
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
フィルターは 、IPin インターフェイスを介してピンで接続します。 出力ピンは入力ピンに接続します。 各ピン接続には、 AM_MEDIA_TYPE 構造で記述されたメディアの種類があります。
アプリケーションは、フィルターグラフ マネージャーでメソッドを呼び出すことによってフィルターを接続します。フィルター自体でメソッドを呼び出したりピン留めしたりすることはありません。 アプリケーションは、IFilterGraph::ConnectDirect メソッドまたは IGraphBuilder::Connect メソッドを呼び出すことによって、接続するフィルターを直接指定できます。または、IGraphBuilder::RenderFile などのグラフ構築メソッドを使用して、フィルターを間接的に接続できます。
接続を成功させるには、両方のフィルターがフィルター グラフに含まれている必要があります。 アプリケーションは、 IFilterGraph::AddFilter メソッドを呼び出すことによって、グラフにフィルターを追加できます。 フィルター グラフ マネージャーでは、グラフにフィルターを追加することもできます。 フィルターが追加されると、フィルター グラフ マネージャーはフィルターの IBaseFilter::JoinFilterGraph メソッドを呼び出してフィルターに通知します。
接続プロセスの一般的な概要は次のとおりです。
- Filter Graph Manager は、出力ピンで IPin::Connect を呼び出し、入力ピンへのポインターを渡します。
- 出力ピンが接続を受け入れると、入力ピンで IPin::ReceiveConnection が呼び出されます。
- 入力ピンも接続を受け入れると、接続試行が成功し、ピンが接続されます。
一部のピンは、フィルターがアクティブな間に切断および再接続できます。 この種類の再接続は、 動的 再接続と呼ばれます。 詳細については、「 動的グラフの作成」を参照してください。 ただし、ほとんどのフィルターでは動的再接続はサポートされていません。
フィルターは通常、ダウンストリームの順序で接続されます。つまり、フィルターの入力ピンは出力ピンの前に接続されます。 フィルターは常に、この接続順序をサポートする必要があります。 一部のフィルターでは、最初に出力ピン、その後に入力ピンが続く、逆の順序での接続もサポートされています。 たとえば、MUX フィルターの入力ピンを接続する前に、MUX フィルターの出力ピンをファイル ライター フィルターに接続できます。
ピンの Connect メソッドまたは ReceiveConnection メソッドが呼び出されると、ピンが接続をサポートできることを確認する必要があります。 詳細は、特定のフィルターによって異なります。 最も一般的なタスクは次のとおりです。
- メディアの種類が許容されることを確認する
- アロケーターをネゴシエートする
- 必要なインターフェイスについては、もう一方のピンに対してクエリを実行します。