VMR-9 フィルター グラフの構築
[DirectShow このページに関連付けられている機能は、従来の機能です。 これは、 MediaPlayer、 IMFMediaEngine、 メディア ファンデーションの Audio/Video Captureに置き換えられました。 これらの機能は、Windows 10 および Windows 11 用に最適化されています。 Microsoftは、新しいコードでは、可能であればDirectShowの代わりに、Media Foundation のMediaPlayer、IMFMediaEngine、そして Audio/Video Captureの使用を強くお勧めします。 従来の API を使用する既存のコードは、可能であれば新しい API を使用するように書き直すよう提案しています。
ビデオ ミキシング レンダラー 9 フィルター (VMR-9) は既定のビデオ レンダラーではないため、VMR-9 を使用するアプリケーションでは、それをグラフに明示的に追加して接続する必要があります。 このセクションでは、VMR-9 を使用してフィルター グラフを構築するための 2 つの異なる方法について説明します。
キャプチャ グラフ ビルダーの使用
Capture Graph Builder は、カスタム フィルター グラフを構築するためのヘルパー オブジェクトです。 これを使用して、次のように VMR-9 グラフを構築できます。
「Capture Graph Builderについて」の説明に従って、Capture Graph Builder を作成して初期化します。
CoCreateInstance を呼び出して VMR-9 を作成します。
IBaseFilter *pVmr = NULL; hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
フィルター グラフ マネージャー IFilterGraph::AddFilter を呼び出して、フィルター グラフに VMR-9 を追加します。
hr = pGraph->AddFilter(pVmr, L"VMR9");
IGraphBuilder::AddSourceFilter を呼び出して、ビデオ ファイルのソース フィルターを追加します。
IBaseFilter *pSource; hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
ICaptureGraphBuilder2::RenderStream メソッドを呼び出して、ビデオ ストリームを VMR にレンダリングします。
hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);
必要に応じて、RenderStream をもう一度呼び出してオーディオ ストリームをレンダリングします。
hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
ソース ファイルごとに AddSourceFilter と RenderStream を呼び出すことで、複数のビデオ ストリームを混在させることができます。
フィルター グラフ マネージャーの使用
Capture Graph Builder を使用しない場合は、次のようにフィルター グラフ マネージャーでメソッドを使用するだけで VMR-9 グラフを作成できます。
- 前の手順に示すように、VMR-9 を作成し、グラフに追加します。
- 前の手順に示すように、AddSourceFilter を使用してビデオ ファイルのソース フィルターを追加します。
- オーディオをレンダリングする場合は、DirectSound Renderer フィルターのインスタンスを作成し、フィルター グラフに追加します。
- IBaseFilter::EnumPins メソッドを使用して、ソース フィルターの出力ピンを検索します。 詳細については、「ピンの列挙」を参照してください。
- IFilterGraph2 インターフェイスのフィルター グラフ マネージャーに対してクエリを実行します。
- IFilterGraph2::RenderEx を、AM_RENDEREX_RENDERTOEXISTINGRENDERERS フラグを使用して呼び出します。 この呼び出しでは、グラフに既に含まれているレンダラー フィルター (この場合は VMR-9 と DirectSound レンダラー) のみを使用して、出力ピンがレンダリングされます。 これにより、Intelligent Connect ロジックが既定のビデオ レンダラーをグラフに追加できなくなります。これにより、VMR-9 は接続されません。
関連トピック
-
Capture Graph Builder を使用してグラフを作成する