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

ICaptureGraphBuilder

COM
IIDbf87b6e0-8c27-11d0-b3f0-00aa003761c5継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

注意 このインターフェイスは非推奨です。(ICaptureGraphBuilder)

メソッド 8

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

vtbl 3 HRESULT SetFiltergraph(IGraphBuilder* pfg)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。グラフビルダーオブジェクトに、使用するフィルターグラフを指定します。

pfgIGraphBuilder*in以降の IFilterGraph::AddFilter メソッドの呼び出しで使用するフィルターグラフを指定する IGraphBuilder インターフェイスへのポインター。

戻り値

HRESULT 値を返します。

解説(Remarks)

このメソッドを呼び出さない場合、グラフビルダーは自動的にフィルターグラフを作成します。グラフビルダーが独自のフィルターグラフを作成した後にこのメソッドを呼び出すと、呼び出しは失敗します。

vtbl 4 HRESULT GetFiltergraph(IGraphBuilder** ppfg)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。ビルダーが使用しているフィルターグラフを取得します。

ppfgIGraphBuilder**outIGraphBuilder インターフェイスへのポインターのアドレス。

戻り値

HRESULT 値を返します。

解説(Remarks)

このメソッドは IGraphBuilder インターフェイスの参照カウントをインクリメントします。Release メソッドを呼び出して IGraphBuilder の参照カウントを必ずデクリメントしてください。

vtbl 5 HRESULT SetOutputFileName(GUID* pType, LPWSTR lpstrFile, IBaseFilter** ppf, IFileSinkFilter** ppSink)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。指定したファイル名でビットをディスクに保存する、フィルターグラフのレンダリング部分を作成します。

pTypeGUID*inメディアサブタイプを表す GUID へのポインター。&MEDIASUBTYPE_Avi でなければなりません。
lpstrFileLPWSTRin出力ファイル名を格納するワイド文字列へのポインター。
ppfIBaseFilter**outマルチプレクサーフィルターを表す IBaseFilter インターフェイスへのポインターのアドレス。このメソッドは IBaseFilter インターフェイスの参照カウントをインクリメントするため、フィルターの使用が終わったら、このパラメーターに対して Release メソッドを使用して参照カウントをデクリメントする必要があります。
ppSinkIFileSinkFilter**outファイルライターを表す IFileSinkFilter インターフェイスへのポインターのアドレス。このメソッドは IFileSinkFilter インターフェイスの参照カウントをインクリメントするため、フィルターの使用が終わったら Release を使用して参照カウントをデクリメントする必要があります。

戻り値

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

リターンコード 説明
E_FAIL
失敗しました。
E_INVALIDARG
引数が無効です。サポートされる出力形式は Audio-Video Interleaved (AVI) のみです。
E_OUTOFMEMORY
メモリが不足しています。
E_POINTER
NULL ポインター引数です。
E_UNEXPECTED
予期しないエラーが発生しました。
NOERROR
成功しました。
S_OK
AVI マルチプレクサーフィルターのインスタンスが正常に作成されました。

解説(Remarks)

このメソッドは、マルチプレクサーとファイルライターをフィルターグラフに挿入し、IFileSinkFilter::SetFileName を呼び出して出力ファイル名を設定します。

このメソッドが返す ppf パラメーターは、RenderStream の呼び出しで pfRenderer パラメーターとして使用できます。

このメソッドの pSink パラメーターは、SetFileName の呼び出しで使用して、ICaptureGraphBuilder::SetOutputFileName が設定したファイル名を変更できます。

vtbl 6 HRESULT FindInterface(GUID* pCategory, IBaseFilter* pf, GUID* riid, void** ppint)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。指定したインターフェイスを、フィルター上、およびフィルターの上流と下流で検索します。また、必要に応じて、指定したカテゴリの出力ピンのみで検索します。

pCategoryGUID*inoptional出力ピンのカテゴリを指定する GUID へのポインター。すべてのピンカテゴリの一覧については、Pin Property Set を参照してください。NULL は、カテゴリに関係なくすべての出力ピンを検索することを示します。
pfIBaseFilter*inフィルターの IBaseFilter インターフェイスへのポインター。
riidGUID*in目的のインターフェイスの参照 ID。
ppintvoid**outvoid ポインターのアドレス。インターフェイスが見つかった場合、このメソッドは、見つかったインターフェイスへのポインターのアドレスを格納するように ppint を初期化します。インターフェイスの使用が終わったら、Release メソッドを呼び出して参照カウントをデクリメントしてください。

戻り値

HRESULT 値を返します。

解説(Remarks)

カテゴリが指定されていない場合、このメソッドは、フィルター上、およびフィルターの上流と下流でインターフェイスを検索します。カテゴリが指定されている場合は、そのカテゴリの出力ピンの下流のみを検索します。レンダラー、マルチプレクサー、TV チューナー、クロスバーなどのインターフェイスを見つけるために使用できます。

pCategory が &LOOK_UPSTREAM_ONLY と等しい場合、グラフビルダーはパラメーター pf で指定されたフィルターの上流を検索しますが、フィルター自体やフィルターの下流は検索しません。

pCategory が &LOOK_DOWNSTREAM_ONLY と等しい場合、グラフビルダーはパラメーター pf で指定されたフィルターの下流を検索しますが、フィルター自体やフィルターの上流は検索しません。

vtbl 7 HRESULT RenderStream(GUID* pCategory, IUnknown* pSource, IBaseFilter* pfCompressor, IBaseFilter* pfRenderer)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。ソースフィルターのピン(必要に応じてカテゴリを指定)をレンダリングフィルターに接続します。必要に応じて、別のフィルターを経由して接続します。

pCategoryGUID*inoptionalソースフィルターのどの出力ピンを接続するかを指定する GUID へのポインター。すべてのピンカテゴリの一覧については、Pin Property Set を参照してください。NULL は、カテゴリに関係なく唯一の出力ピンをレンダリングすることを示します。
pSourceIUnknown*inソースフィルターまたは出力ピンを表す IBaseFilter または IPin インターフェイスへのポインター。ソースフィルターは通常、AVI ファイルソースフィルターやキャプチャフィルターなどのファイルソースフィルターです。
pfCompressorIBaseFilter*inオプションの圧縮フィルターを表す IBaseFilter インターフェイスへのポインター。
pfRendererIBaseFilter*inレンダラーを表す IBaseFilter インターフェイスへのポインター。この値には、ICaptureGraphBuilder::SetOutputFileNameppf(マルチプレクサー)パラメーターを使用できます。

戻り値

キャプチャフィルターにキャプチャピンはあるがプレビューピンがなく、そのキャプチャピンに対して &PIN_CATEGORY_PREVIEW カテゴリを指定して RenderStream を呼び出した場合、VFW_S_NOPREVIEWPIN を返します。この場合、RenderStreamSmart Tee フィルターのプレビューピンをレンダリングします。詳細については、「解説」を参照してください。

解説(Remarks)

pCategoryNULL 以外の Pin Property Set GUID を指定し、pSource にキャプチャフィルターを指定した場合、このメソッドは、TV チューナーやクロスバーなど、必要な追加の上流フィルターをインスタンス化して接続します。その後、pSource のキャプチャピンをレンダリングします。

pSource がピンの場合は、pCategoryNULL を指定します。このメソッドはそのピンからストリームをレンダリングします。

ソースフィルターに出力ピンが 1 つしかない場合は、pCategoryNULL を指定します。

パラメーターとして指定する pSourcepfCompressorpfRenderer の各フィルターは、このメソッドを呼び出す前にグラフ内に存在している必要があります。

WDM キャプチャフィルターを使用するキャプチャグラフを構築する場合、このメソッドは、下流フィルターだけでなく、必要なすべての上流フィルターも構築します。

新しい WDM VPE(Video Port Extension)ビデオキャプチャハードウェアで動作する一部のキャプチャフィルターは、プレビュー用のプレビューピンではなく、ビデオポートピンを備えています。ビデオポートピンはビデオレンダラーに直接接続されず、代わりに Overlay Mixer と呼ばれる特殊なフィルターに接続されます。アプリケーションでこれを気にする必要はありません。PIN_CATEGORY_PREVIEW を指定して RenderStream を呼び出すだけで、必要であればキャプチャグラフビルダーがオーバーレイミキサーを経由して VIDEO PORT ピンを正しくレンダリングします。

ビデオキャプチャフィルターのキャプチャピンまたはプレビューピンをレンダリングする際に(PIN_CATEGORY_CAPTURE または PIN_CATEGORY_PREVIEW カテゴリを指定して RenderStream を使用)、キャプチャフィルターにキャプチャピンはあるがプレビューピンがない場合、キャプチャとプレビューを同時に行えるように Smart Tee フィルターが自動的に使用されます。たとえば、PIN_CATEGORY_CAPTURE カテゴリを指定して RenderStream を呼び出すと、実際にはフィルターのキャプチャピンに Smart Tee フィルターが接続され、その Smart Tee のキャプチャピンがレンダリングされます。その後、そのキャプチャピンに対して PIN_CATEGORY_PREVIEW カテゴリを指定して RenderStream を呼び出すと、実際には Smart Tee のプレビューピンがレンダリングされます。PIN_CATEGORY_PREVIEW を指定した RenderStream の呼び出しでキャプチャピンと Smart Tee フィルターが使用された場合、RenderStream はそれを示すために VFW_S_NOPREVIEWPIN を返します。したがって、FindInterface がプレビューインターフェイスを見つけられない場合は、プレビューインターフェイスがキャプチャフィルターのキャプチャピンの下流を調べることで見つかる可能性があるため、PIN_CATEGORY_PREVIEW カテゴリと PIN_CATEGORY_CAPTURE カテゴリの両方で FindInterface を呼び出す必要がある場合があります。

vtbl 8 HRESULT ControlStream(GUID* pCategory, IBaseFilter* pFilter, LONGLONG* pstart, LONGLONG* pstop, WORD wStartCookie, WORD wStopCookie)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。グラフ内の 1 つ以上のキャプチャフィルターにおける、指定したカテゴリのピンにストリーム制御メッセージを送信します。

pCategoryGUID*inoptional出力ピンのカテゴリを指定する GUID へのポインター。すべてのピンカテゴリの一覧については、Pin Property Set を参照してください。この値を NULL にすることはできません。
pFilterIBaseFilter*in制御するフィルターの IBaseFilter インターフェイスへのポインター。NULL を指定すると、グラフ内のすべてのキャプチャフィルターを制御します。キャプチャフィルターごとに 1 つの通知を受け取ります。
pstartLONGLONG*inキャプチャの開始時刻へのポインター。NULL は今すぐ開始することを意味します。MAX_TIME は前回の要求を取り消すこと、または前回の要求がない場合は何もしないことを意味します。
pstopLONGLONG*inキャプチャの停止時刻へのポインター。NULL は今すぐ停止することを意味します。MAX_TIME は前回の要求を取り消すこと、または前回の要求がない場合は何もしないことを意味します。
wStartCookieWORDin開始時に送信される特定の値を指定します。
wStopCookieWORDin停止時に送信される特定の値を指定します。

戻り値

キャプチャフィルターが送信した最後のサンプルがレンダリングされる前に停止通知が送信された場合は S_FALSE を返し、それ以外の場合は S_OK を返します。

このメソッドが S_FALSE を返した場合、アプリケーションは、すべてのサンプルがグラフを通過してレンダリングされるように、フィルターグラフを停止する前に待機した方がよい場合があります。そうしないと、サンプルが失われる可能性があります。

指定した記述に一致するピンがない場合、または指定したすべてのピンでストリーム制御をサポートできない場合、この関数は失敗コードを返します。

解説(Remarks)

フレーム単位で正確なキャプチャを行う場合や、キャプチャとプレビューを個別に制御する場合に、このメソッドを使用します。たとえば、キャプチャした画像をプレビューするだけの場合は、キャプチャした画像のディスクへの書き込みをオフにできます。

このメソッドは、ピン上の IAMStreamControl インターフェイスを使用します。

このメソッドは、指定したカテゴリのピンを持つフィルターが見つかるたびに 1 つの通知を送信します。

vtbl 9 HRESULT AllocCapFile(LPWSTR lpstr, ULONGLONG dwlSize)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。キャプチャファイルを指定したサイズで事前に割り当てます。

lpstrLPWSTRin作成またはサイズ変更するファイルの名前を格納するワイド文字列へのポインター。
dwlSizeULONGLONGin割り当てるファイルのサイズ(バイト単位)。

戻り値

HRESULT 値を返します。

解説(Remarks)

ファイルが読み取り専用の場合、呼び出しは失敗します。最良のキャプチャ結果を得るには、常に、断片化が解消された、キャプチャデータのサイズよりも大きい、事前に割り当てられたキャプチャファイルにキャプチャしてください。

vtbl 10 HRESULT CopyCaptureFile(LPWSTR lpwstrOld, LPWSTR lpwstrNew, INT fAllowEscAbort, IAMCopyCaptureFileProgress* pCallback)

注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。事前に割り当てられたキャプチャファイルから有効なメディアデータをコピーします。

lpwstrOldLPWSTRinコピー元のファイル名を格納する Unicode™ 文字列へのポインター。
lpwstrNewLPWSTRinコピー先のファイル名を格納する Unicode 文字列へのポインター。有効なデータがこのファイルにコピーされます。
fAllowEscAbortINTinESC キーを押すとコピー操作をキャンセルするかどうかを示す値。TRUE はキャンセルすることを示し、FALSE はこのメソッドがそのキー入力を無視することを示します。
pCallbackIAMCopyCaptureFileProgress*inコピー操作の進行状況(完了率)を表示する IAMCopyCaptureFileProgress へのオプションのポインター。

戻り値

HRESULT 値を返します。

解説(Remarks)

新しいファイルには有効なデータのみが含まれるため、コピー元のファイルよりもはるかに小さくできます。通常は、常に同じ巨大な事前割り当て済みファイルにキャプチャし、このメソッドを使用して、各キャプチャから保存したいデータを新しいファイルにコピーします。

pCallback を指定した場合、IAMCopyCaptureFileProgress インターフェイスの Progress メソッドが、完了率を表す 0 から 100 の整数を伴って定期的に呼び出されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ICaptureGraphBuilder "{BF87B6E0-8C27-11D0-B3F0-00AA003761C5}"
#usecom global ICaptureGraphBuilder IID_ICaptureGraphBuilder "{}"
#comfunc global ICaptureGraphBuilder_SetFiltergraph     3 sptr
#comfunc global ICaptureGraphBuilder_GetFiltergraph     4 sptr
#comfunc global ICaptureGraphBuilder_SetOutputFileName  5 var,wstr,sptr,sptr
#comfunc global ICaptureGraphBuilder_FindInterface      6 var,sptr,var,sptr
#comfunc global ICaptureGraphBuilder_RenderStream       7 var,sptr,sptr,sptr
#comfunc global ICaptureGraphBuilder_ControlStream      8 var,sptr,var,var,int,int
#comfunc global ICaptureGraphBuilder_AllocCapFile       9 wstr,int64
#comfunc global ICaptureGraphBuilder_CopyCaptureFile    10 wstr,wstr,int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。