次の方法で共有


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 グラフを作成できる。

  1. Capture Graph Builder について」の説明に従って、Capture Graph Builder を作成し、初期化する。

  2. CoCreateInstance を呼び出し、VMR-9 を作成する。

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. フィルタ グラフ マネージャで IFilterGraph::AddFilter を呼び出し、VMR-9 をフィルタ グラフに追加する。

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. IGraphBuilder::AddSourceFilter を呼び出し、ビデオ ファイル用のソース フィルタを追加する。

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. ICaptureGraphBuilder2::RenderStream メソッドを呼び出し、ビデオ ストリームを VMR にレンダリングする。

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. オプションとして、再度 RenderStream を呼び出し、オーディオ ストリームをレンダリングする。

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

各ソース ファイル用の AddSourceFilterRenderStream を呼び出して、複数のビデオ ストリームをミキシングできる。

フィルタ グラフ マネージャの使い方

Capture Graph Builder を使いたくない場合は、次の手順に従って、フィルタ グラフ マネージャでメソッドを使い、VMR-9 グラフを作成できる。

  1. 前の手順で説明したように、VMR-9 を作成してグラフに追加する。
  2. 前の手順で説明したように、AddSourceFilter を使ってビデオ ファイル用のソース フィルタを追加する。
  3. オーディオをレンダリングする場合は、DirectSound レンダラ フィルタのインスタンスを作成し、フィルタ グラフに追加する。
  4. IBaseFilter::EnumPins メソッドを使い、ソース フィルタで出力ピンを検索する。詳細については、「ピンの列挙」を参照すること。
  5. フィルタ グラフ マネージャで IFilterGraph2 インターフェイスを問い合わせる。
  6. AM_RENDEREX_RENDERTOEXISTINGRENDERERS フラグを使って IFilterGraph2::RenderEx を呼び出す。このメソッドを呼び出すと、既にグラフにあるレンダリング フィルタ (ここでは VMR-9 および DirectSound レンダラ) のみを使い、出力ファイルがレンダリングされる。そのため、インテリジェント接続ロジックがデフォルト ビデオ レンダラをグラフに追加して VMR-9 を未接続にすることはない。

参照