Microsoft DirectX 8.0 |
IDvdGraphBuilder インターフェイスは、DVD グラフ ビルダ オブジェクトで実装される。RenderDvdVideoVolume メソッドは、システム上の利用可能なソフトウェアとハードウェアから、DVD ビデオを再生するためのフィルタ グラフを自動的に作成する。DVD フィルタ グラフを作成する方法と、必要なすべてのインターフェイスへのポインタを入手する方法については、「DVD フィルタ グラフの作成」を参照すること。DVDSample アプリケーションの DvdCore.cpp にも、この過程が示されている。
注 : DVD フィルタ グラフは、ハードウェアまたはソフトウェアの MPEG-2 デコーダを必要とする。これは DirectShow には含まれていない。そこで、DVD フィルタ グラフの作成に先立ち、DirectShow 互換のサードパーティ製のデコーダをコンピュータにインストールする必要がある。
一般に、RenderDvdVideoVolume で作成されたグラフ内の個別のフィルタを追加、削除、接続、切断、またはアクセスしてはならない。これらの操作を行うと、クリーンアップ コードに混乱をきたす場合がある。DvdGraphBuilder オブジェクトの目的は、DVD ビデオ アプリケーションの開発を簡略化することである。特別な目的を持つ特殊なグラフが必要な場合は、フィルタ グラフ全体を手動で作成する必要がある。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IDvdGraphBuilder メソッド 説明 GetFiltergraph DVD ビデオ グラフ ビルダ オブジェクトが使用するフィルタ グラフの IGraphBuilder インターフェイスを取得する。 GetDvdInterface DVD ビデオ再生グラフ内の特定のインターフェイス ポインタを取得する。これによって、DVD ビデオ再生の開発が簡略化される。 RenderDvdVideoVolume DVD ビデオのボリューム再生に関するユーザー指定に従って、フィルタ グラフの作成を完了する。
DVD ビデオ再生グラフ内の特定のインターフェイス ポインタを取得する。これによって、DVD ビデオ再生の開発が簡略化される。
構文
HRESULT GetDvdInterface( REFIID riid, void **ppvIF );
パラメータ
- riid
- [in] 目的のインターフェイスの IID。
- ppvIF
- [out] 取得されたインターフェイスへのポインタのアドレス。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
DirectShow の実装が返す値には、次の値が含まれる。
E_INVALIDARG ppvIF パラメータが無効である。 E_NOINTERFACE riid パラメータ値がサポートされていない。 VFW_E_DVD_GRAPHNOTREADY このインターフェイスを取得する以前に、IDvdGraphBuilder::RenderDvdVideoVolume メソッドを介してグラフが作成されていない。
注意
このメソッドを使用して、IDvdControl2 と IDvdInfo2 インターフェイスを取得して DVD ビデオ ボリュームの再生を制御したり、IAMLine21Decoder インターフェイスを取得してクローズド キャプション表示のオンとオフを切り替えること。このメソッドを使用して、IBasicVideo、IVideoWindow、および IBasicAudio の各インターフェイスを取得することもできる。オーディオ レンダラがオーディオをレンダリングする場合のみ、IBasicAudio へのポインタが必要である。
インターフェイスの使用が終了したら、次のコードを使用してこれを解放する必要がある。
*ppvIF->Release();このインターフェイスを使用すると、DVD ビデオ再生グラフ内のオーバーレイ ミキサーの先頭の入力ピン (プライマリ ビデオ ストリーム) から、IMixerPinConfig2 インターフェイスを取得できる。DVD ビデオ グラフ内のオーバーレイ ミキサーから、IDDrawExclModeVideo インターフェイスも取得できる。このインターフェイスは、ゲームによっては、DirectDraw の排他モードでビデオを再生するときに必要である。ほかのインターフェイスとは異なり、GetDvdInterface を呼び出す前に、RenderDvdVideoVolume メソッドを使用してグラフを作成する必要はない。このインターフェイスは、RenderDvdVideoVolume メソッドを使用してグラフを作成する前に取得する必要がある。
DVD ビデオ グラフ ビルダ オブジェクトが使用するフィルタ グラフの IGraphBuilder インターフェイスを取得する。
構文
HRESULT GetFiltergraph( IGraphBuilder **ppGB );
パラメータ
- ppGB
- [out] DVD ビデオ グラフ ビルダ オブジェクトが使用している IGraphBuilder インターフェイスへのポインタ。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。現在の DirectShow の実装では、ppGB が無効の場合、E_INVALIDARG を返す。
注意
IGraphBuilder インターフェイスの使用が終了したら、次のコードを使用してこれを解放する必要がある。
*ppGB->Release();
DVD ビデオのボリューム再生に関するユーザー指定に従って、フィルタ グラフの作成を完了する。
構文
HRESULT RenderDvdVideoVolume( LPCWSTR lpcwszPathName, DWORD dwFlags, AM_DVD_RENDERSTATUS *pStatus );
パラメータ
- lpcwszPathName
- [in] 再生する DVD ビデオ ボリュームのパスへのポインタ。NULL の場合がある。
- dwFlags
- [in] デコーダのタイプを示す AM_DVD_GRAPH_FLAGS 列挙型のメンバ。デコーダのタイプには、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの混合があり、指定されたデコーダがフィルタ グラフに含まれる。デフォルト値は、最大ハードウェア デコード (AM_DVD_HWDEC_PREFER) である。
- pStatus
- [out] 取得された AM_DVD_RENDERSTATUS 構造体へのポインタ。障害があった場合は、その障害が構造体に示される。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。DirectShow の実装の戻り値には、次の値が含まれる。
E_INVALIDARG dwFlags パラメータが指定するオプションが競合している。または、pStatus のポインタが不良である。 S_FALSE グラフは作成されたが、完全ではない。pStatus パラメータに、問題の詳細が返される。 S_OK 成功。再生グラフが正しく作成され、すべてのストリームがレンダリングされ、DVD ビデオ ボリュームが指定された、または見つかった。 VFW_E_DVD_DECNOTENOUGH AM_DVD_HWDEC_ONLY または AM_DVD_SWDEC_ONLY が指定されたが、ハードウェアまたはソフトウェアのデコーダが足りないために、すべてのストリームをデコードできない。 VFW_E_DVD_RENDERFAIL グラフの作成中に、何らかの基本的なエラーが発生した。DVD ナビゲータ フィルタ、ビデオ レンダラ、またはオーディオ レンダラがインスタンス化されていない、接続やピン列挙が単に失敗した、またはストリームがレンダリングされない、などが原因として考えられる。
注意
AM_DVD_RENDERSTATUS 構造体は、このメソッドの失敗コードを表す。このメソッドが S_FALSE を返す原因には、次のものが含まれる。
- グラフは完全に作成されたが、次のいずれかの条件が該当する。
- オーバーレイ ミキシングが動作しない。アプリケーションは AM_DVD_NOVPE フラグを使用していないので、ビデオ ストリームをオーバーレイ ミキサーに設定できない。このケースでは、ビデオがソフトウェアでデコードされていれば、アプリケーションはユーザーに対して、ビデオが表示されないことを伝える情報を持つことができる。ハードウェア デコード ビデオは、ハードウェア ビデオ デコーダの NTSC 出力ポートに接続している TV 上でのみ表示される。
- ビデオ デコーダが Line 21 データを生成しない。アプリケーションでは、デコーダが原因でクローズド キャプションが利用できないことを伝える警告やメッセージを表示できる。
- ボリューム パスが指定されていないので、再生する DVD ビデオ ボリュームを DVD ナビゲータが検索できない。再生が開始するときに、ドライブに DVD ビデオ ディスクがセットされていない場合、アプリケーションはユーザーにディスクを挿入するように求めることができる。
- 一部のストリームがレンダリングされなかった、またはストリームがまったくレンダリングされなかった。アプリケーションでは、ユーザーに対して、一部のストリームを再生できないことを伝えることができる。
このメソッドを使用すると、DVD ビデオ フィルタや再生するボリュームを理解していなくても、グラフを作成できる。DVD ビデオ グラフ ビルダは、lpcwszPathName が NULL であったり、DVD ナビゲータ フィルタがデフォルトで再生する DVD ビデオ ボリュームを見つけることができなかった場合でも、グラフを作成することができる。アプリケーションでは、IDvdControl::SetRoot メソッドを使用することで、後でボリュームを指定できる。