Win32 API 日本語リファレンス
ホームMedia.DirectShow › IDvdGraphBuilder

IDvdGraphBuilder

COM
IIDfcc152b6-f372-11d0-8e00-00c04fd7c08b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IDvdGraphBuilder インターフェースは、DVD-Video 再生用のフィルターグラフを構築します。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetFiltergraph(IGraphBuilder** ppGB)

GetFiltergraph メソッドは、DVD-Video グラフビルダーオブジェクトが使用するフィルターグラフの IGraphBuilder インターフェースを取得します。

ppGBIGraphBuilder**outDVD-Video グラフビルダーオブジェクトが使用している IGraphBuilder インターフェースへのポインターのアドレスです。

戻り値

インターフェースの実装に依存する HRESULT 値を返します。現在の DirectShow の実装では、ppGB が無効な場合に E_INVALIDARG を返します。

解説(Remarks)

返される IGraphBuilder インターフェースポインターには、未解放の参照カウントがあります。呼び出し側でインターフェースを解放する必要があります。

vtbl 4 HRESULT GetDvdInterface(GUID* riid, void** ppvIF)

GetDvdInterface メソッドは、DVD-Video 再生グラフからインターフェースを取得し、DVD-Video 再生の開発を容易にします。

riidGUID*in要求するインターフェースの IID です。
ppvIFvoid**outインターフェースへのポインターを受け取ります。アプリケーションはこのインターフェースを解放する必要があります。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

戻り値コード 説明
E_INVALIDARG
ppvIF パラメーターが無効です。このパラメーターは NULL であってはなりません。
E_NOINTERFACE
要求されたインターフェースを返せませんでした。
VFW_E_DVD_GRAPHNOTREADY
グラフがまだ構築されていません。「解説」を参照してください。

解説(Remarks)

このメソッドを使用すると、DVD 再生用のフィルターグラフを構築する前に、ビデオレンダラーフィルターを選択して構成できます。次のインターフェースが利用可能です。

フィルターグラフを構築する前に GetDvdInterface を呼び出してこれらのいずれかのインターフェースを取得すると、DVD Graph Builder は適切なビデオレンダラーを作成します。その後グラフを構築する際に、このレンダラーが使用されます。ビデオレンダラーが選択された後は、他のビデオレンダラーのインターフェースを取得できなくなります。(その場合、GetDvdInterface メソッドは E_NOINTERFACE を返します。)

DVD 再生グラフを構築する前に、上記のリストにないインターフェースを要求すると、このメソッドは VFW_E_DVD_GRAPHNOTREADY を返します。DVD グラフを構築するには、IDvdGraphBuilder::RenderDvdVideoVolume を呼び出します。グラフを構築した後は、GetDvdInterface を使用して、さらにいくつかのインターフェースを取得できます。

その他のインターフェースを取得するには、IDvdGraphBuilder::GetFiltergraph を呼び出します。返された IGraphBuilder インターフェースをクエリするか、EnumFilters を使用してフィルターを列挙します。
vtbl 5 HRESULT RenderDvdVideoVolume(LPWSTR lpcwszPathName, DWORD dwFlags, AM_DVD_RENDERSTATUS* pStatus)

RenderDvdVideoVolume メソッドは、DVD-Video ボリュームを再生するためのユーザー指定に従って、フィルターグラフの構築を完了します。

lpcwszPathNameLPWSTRin再生する DVD-Video ボリュームのパスへのポインターです。NULL にすることもできます。
dwFlagsDWORDinAM_DVD_GRAPH_FLAGS 列挙体のフラグをビット単位の OR で結合したもので、DVD 再生グラフの構築方法を指定します。
pStatusAM_DVD_RENDERSTATUS*outAM_DVD_RENDERSTATUS 構造体へのポインターです。メソッドが戻ると、この構造体はレンダリングの失敗を示します。

戻り値

インターフェースの実装に依存する HRESULT 値を返します。DirectShow の実装の戻り値には次のものがあります。

戻り値コード 説明
E_INVALIDARG
dwFlags パラメーターが競合するオプションを指定しています。
S_FALSE
メソッドは部分的に成功しました。どのエラーが発生したかを調べるには、pStatus パラメーターを確認してください。
S_OK
メソッドは成功し、すべてのストリームがレンダリングされました。
VFW_E_DVD_DECNOTENOUGH
1 つ以上のストリームをレンダリングできませんでした。

dwFlags パラメーターに AM_DVD_HWDEC_ONLY または AM_DVD_SWDEC_ONLY フラグを指定した場合は、AM_DVD_HWDEC_PREFER または AM_DVD_SWDEC_PREFER フラグを指定してメソッドを再度呼び出してみてください。

VFW_E_DVD_NON_EVR_RENDERER_IN_FILTER_GRAPH
フィルターグラフには既にビデオレンダラーが含まれています。dwFlags パラメーターに AM_DVD_EVR_ONLY フラグを指定したにもかかわらず、グラフに Enhanced Video Renderer (VMR) フィルター以外のビデオレンダラーが既に含まれている場合、メソッドはこのエラーコードを返します。
VFW_E_DVD_RENDERFAIL
グラフの構築中にエラーが発生しました。たとえば、DVD Graph Builder が必要なフィルターを作成できなかった、またはいずれのストリームもレンダリングできなかった場合です。
VFW_E_DVD_TOO_MANY_RENDERERS_IN_FILTER_GRAPH
フィルターグラフに複数のビデオレンダラーが含まれています。

解説(Remarks)

AM_DVD_RENDERSTATUS 構造体は、このメソッドの失敗コードを反映します。このメソッドが S_FALSE を返す理由には次のものがあります。

このメソッドは、再生する DVD-Video ファイルまたはボリュームに関する情報を持たずにグラフを構築します。DVD-Video グラフビルダーは、lpcwszPathNameNULL の場合や、DVD Navigator フィルターが既定の再生対象 DVD-Video ボリュームを見つけられない場合でも、グラフを構築します。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDvdGraphBuilder "{FCC152B6-F372-11D0-8E00-00C04FD7C08B}"
#usecom global IDvdGraphBuilder IID_IDvdGraphBuilder "{}"
#comfunc global IDvdGraphBuilder_GetFiltergraph        3 sptr
#comfunc global IDvdGraphBuilder_GetDvdInterface       4 var,sptr
#comfunc global IDvdGraphBuilder_RenderDvdVideoVolume  5 wstr,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。