Graph Manager のフィルター処理
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 を呼び出すスレッドには、メッセージをディスパッチするメッセージ ループが必要です。そうしないと、デッドロックが発生する可能性があります。 また、アプリケーション スレッドが終了する前に、フィルター グラフ マネージャーとすべてのグラフ オブジェクト (フィルター、ピン、参照クロックなど) を解放する必要があります。
インターフェイス
フィルター グラフ マネージャーは、次のインターフェイスを公開します。
- IAMGraphStreams
- IAMStats
- IBasicAudio
- IBasicVideo
- IBasicVideo2
- IFilterChain
- IFilterGraph
- IFilterGraph2
- IFilterGraph3
- IFilterMapper2
- IGraphBuilder
- IGraphConfig
- IGraphVersion
- IMediaControl
- IMediaEvent
- IMediaEventEx
- IMediaEventSink
- IMediaFilter
- IMediaPosition
- IMediaSeeking
- IQueueCommand
- IRegisterServiceProvider
- IResourceManager
- IServiceProvider
- IVideoFrameStep
- IVideoWindow
関連トピック