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