次の方法で共有


プロジェクトのプレビュー

プロジェクトをプレビューするには、最初に CoCreateInstance を呼び出して、基本レンダリング エンジンのインスタンスを作成する。クラス識別子は、CLSID_RenderEngine である。次に、IRenderEngine::SetTimelineObject メソッドを呼び出して、レンダリングするタイムラインを指定する。

初めてタイムラインをプレビューするときは、以下の呼び出しを並んでいる順序で実行する。

  1. IRenderEngine::SetRenderRange を呼び出して、タイムラインのうちプレビューする部分を指定する ("オプション")。
  2. IRenderEngine::ConnectFrontEnd を呼び出してグラフのフロント エンドを作成する。
  3. 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 を呼び出す。タイムラインの内容を変更する場合は、次の手順を実行する。

  1. SetRenderRange を呼び出す ("オプション")。
  2. ConnectFrontEnd を呼び出す。
  3. ConnectFrontEnd メソッドが S_WARN_OUTPUTRESET を返した場合は、RenderOutputPins を呼び出す。ConnectFrontEnd が S_OK を返した場合、この手順は省略する。
  4. グラフをシークしてタイム 0 に戻る。
  5. グラフを実行する。

次の例は、以上の手順を示したものである。

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();

プロジェクト ファイルを読み込んでプレビューする完全な例については、「プロジェクトのロードとプレビュー」を参照すること。

参照