プロジェクトのプレビュー
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
[この API はサポートされていないため、今後変更または使用できない可能性があります。]
プロジェクトをプレビューするには、まず 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 インターフェイスを 使用してグラフをシークすることもできます。
プロジェクトをもう一度プレビューするには、グラフをゼロ時間に戻し、 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();
プロジェクト ファイルを読み込んでプレビューする完全な例については、「プロジェクトの 読み込みとプレビュー」を参照してください。
関連トピック