VMR-9 フィルタ グラフの作成
Video Mixing Renderer 9 フィルタ (VMR-9) はデフォルト ビデオ レンダラではないため、VMR-9 を使うアプリケーションは明示的に VMR-9 をグラフに追加し、接続する必要がある。ここでは、VMR-9 を使うフィルタ グラフを作成する 2 つの異なる方法を示す。
Capture Graph Builder の使い方
Capture Graph Builder は、カスタム フィルタ グラフを作成するためのヘルパー オブジェクトである。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 レンダラ フィルタのインスタンスを作成し、フィルタ グラフに追加する。
- IBaseFilter::EnumPins メソッドを使い、ソース フィルタで出力ピンを検索する。詳細については、「ピンの列挙」を参照すること。
- フィルタ グラフ マネージャで IFilterGraph2 インターフェイスを問い合わせる。
- AM_RENDEREX_RENDERTOEXISTINGRENDERERS フラグを使って IFilterGraph2::RenderEx を呼び出す。このメソッドを呼び出すと、既にグラフにあるレンダリング フィルタ (ここでは VMR-9 および DirectSound レンダラ) のみを使い、出力ファイルがレンダリングされる。そのため、インテリジェント接続ロジックがデフォルト ビデオ レンダラをグラフに追加して VMR-9 を未接続にすることはない。
参照