プロジェクトのプレビュー
プロジェクトをプレビューするには、最初に CoCreateInstance を呼び出して、基本レンダリング エンジンのインスタンスを作成する。クラス識別子は、CLSID_RenderEngine である。次に、IRenderEngine::SetTimelineObject メソッドを呼び出して、レンダリングするタイムラインを指定する。
初めてタイムラインをプレビューするときは、以下の呼び出しを並んでいる順序で実行する。
- IRenderEngine::SetRenderRange を呼び出して、タイムラインのうちプレビューする部分を指定する ("オプション")。
- IRenderEngine::ConnectFrontEnd を呼び出してグラフのフロント エンドを作成する。
- IRenderEngine::RenderOutputPins を呼び出す。このメソッドは、各出力ピンをビデオ レンダラまたはオーディオ レンダラに接続して、グラフ作成を完了する。
以下のコードにこれらの手順を示す。
IRenderEngine *pRender = NULL;
hr = CoCreateInstance(CLSID_RenderEngine, NULL,
CLSCTX_INPROC_SERVER, IID_IRenderEngine, (void**)&pRender);
hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd();
hr = pRender->RenderOutputPins();
この状態で、フィルタ グラフを実行する。まず、IRenderEngine::GetFilterGraph メソッドを呼び出して、フィルタ グラフ マネージャの IGraphBuilder インターフェイスへのポインタを取得する。次に、以下のコードに示すように、フィルタ グラフ マネージャに、IMediaControl インターフェイスについて問い合わせ、IMediaControl::Run を呼び出す。
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();
フィルタ グラフ マネージャの IMediaEventEx インターフェイスを使って、プレビューが完了するまで待機する。また、フィルタ グラフ マネージャの IMediaSeeking インターフェイスを使って、ファイル再生グラフの場合と同じように、グラフをシークすることも可能である。
再度プロジェクトをプレビューするには、グラフをシークしてタイム 0 に戻って再度 Run を呼び出す。タイムラインの内容を変更する場合は、次の手順を実行する。
- SetRenderRange を呼び出す ("オプション")。
- ConnectFrontEnd を呼び出す。
- ConnectFrontEnd メソッドが S_WARN_OUTPUTRESET を返した場合は、RenderOutputPins を呼び出す。ConnectFrontEnd が S_OK を返した場合、この手順は省略する。
- グラフをシークしてタイム 0 に戻る。
- グラフを実行する。
次の例は、以上の手順を示したものである。
hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0;
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0);
hr = pControl->Run();
プロジェクト ファイルを読み込んでプレビューする完全な例については、「プロジェクトのロードとプレビュー」を参照すること。
参照