Graph Manager のフィルター処理

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

フィルター グラフ マネージャーは、フィルター グラフを構築および制御します。 このオブジェクトは、DirectShow の中心的なコンポーネントです。 アプリケーションでは、これを使用してフィルター グラフを構築および制御します。 フィルター グラフ マネージャーは、同期、イベント通知、およびフィルター グラフを制御するその他の側面も処理します。 CoCreateInstance を呼び出して、このオブジェクトを作成します。

CLSID

フィルター グラフ マネージャーを作成するには、次の 2 つの CLSID があります。

CLSID 説明
CLSID_FilterGraph 共有ワーカー スレッドに Filter Graph Manager を作成します。
CLSID_FilterGraphNoThread アプリケーション スレッドに Filter Graph Manager を作成します。

 

一般に、アプリケーションでは CLSID_FilterGraph を使用する必要があります。 両方の CLSID は同じオブジェクトを作成しますが、異なるスレッド モデルを使用します。

  • CLSID_FilterGraph、ワーカー スレッドに Filter Graph Manager を作成します。これは、同じプロセス内のすべてのCLSID_FilterGraph インスタンスで共有されます。 スレッドは、フィルターによって送信されたメッセージをディスパッチし、フィルターによって作成されたウィンドウの有効期間を制御します。
  • CLSID_FilterGraphNoThread、アプリケーションのスレッドに Filter Graph Manager を作成します。 この CLSID を使用する場合、 CoCreateInstance を呼び出すスレッドには、メッセージをディスパッチするメッセージ ループが必要です。そうしないと、デッドロックが発生する可能性があります。 また、アプリケーション スレッドが終了する前に、フィルター グラフ マネージャーとすべてのグラフ オブジェクト (フィルター、ピン、参照クロックなど) を解放する必要があります。

インターフェイス

フィルター グラフ マネージャーは、次のインターフェイスを公開します。

DirectShow オブジェクト