ICaptureGraphBuilder
COM公式ドキュメント
注意 このインターフェイスは非推奨です。(ICaptureGraphBuilder)
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。グラフビルダーオブジェクトに、使用するフィルターグラフを指定します。
| pfg | IGraphBuilder* | in | 以降の IFilterGraph::AddFilter メソッドの呼び出しで使用するフィルターグラフを指定する IGraphBuilder インターフェイスへのポインター。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
このメソッドを呼び出さない場合、グラフビルダーは自動的にフィルターグラフを作成します。グラフビルダーが独自のフィルターグラフを作成した後にこのメソッドを呼び出すと、呼び出しは失敗します。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。ビルダーが使用しているフィルターグラフを取得します。
| ppfg | IGraphBuilder** | out | IGraphBuilder インターフェイスへのポインターのアドレス。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
このメソッドは IGraphBuilder インターフェイスの参照カウントをインクリメントします。Release メソッドを呼び出して IGraphBuilder の参照カウントを必ずデクリメントしてください。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。指定したファイル名でビットをディスクに保存する、フィルターグラフのレンダリング部分を作成します。
| pType | GUID* | in | メディアサブタイプを表す GUID へのポインター。&MEDIASUBTYPE_Avi でなければなりません。 |
| lpstrFile | LPWSTR | in | 出力ファイル名を格納するワイド文字列へのポインター。 |
| ppf | IBaseFilter** | out | マルチプレクサーフィルターを表す IBaseFilter インターフェイスへのポインターのアドレス。このメソッドは IBaseFilter インターフェイスの参照カウントをインクリメントするため、フィルターの使用が終わったら、このパラメーターに対して Release メソッドを使用して参照カウントをデクリメントする必要があります。 |
| ppSink | IFileSinkFilter** | out | ファイルライターを表す IFileSinkFilter インターフェイスへのポインターのアドレス。このメソッドは IFileSinkFilter インターフェイスの参照カウントをインクリメントするため、フィルターの使用が終わったら Release を使用して参照カウントをデクリメントする必要があります。 |
戻り値
HRESULT 値を返します。取り得る値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 失敗しました。 | |
| 引数が無効です。サポートされる出力形式は Audio-Video Interleaved (AVI) のみです。 | |
| メモリが不足しています。 | |
| NULL ポインター引数です。 | |
| 予期しないエラーが発生しました。 | |
|
成功しました。 |
| AVI マルチプレクサーフィルターのインスタンスが正常に作成されました。 |
解説(Remarks)
このメソッドは、マルチプレクサーとファイルライターをフィルターグラフに挿入し、IFileSinkFilter::SetFileName を呼び出して出力ファイル名を設定します。
このメソッドが返す ppf パラメーターは、RenderStream の呼び出しで pfRenderer パラメーターとして使用できます。
このメソッドの pSink パラメーターは、SetFileName の呼び出しで使用して、ICaptureGraphBuilder::SetOutputFileName が設定したファイル名を変更できます。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。指定したインターフェイスを、フィルター上、およびフィルターの上流と下流で検索します。また、必要に応じて、指定したカテゴリの出力ピンのみで検索します。
| pCategory | GUID* | inoptional | 出力ピンのカテゴリを指定する GUID へのポインター。すべてのピンカテゴリの一覧については、Pin Property Set を参照してください。NULL は、カテゴリに関係なくすべての出力ピンを検索することを示します。 |
| pf | IBaseFilter* | in | フィルターの IBaseFilter インターフェイスへのポインター。 |
| riid | GUID* | in | 目的のインターフェイスの参照 ID。 |
| ppint | void** | out | void ポインターのアドレス。インターフェイスが見つかった場合、このメソッドは、見つかったインターフェイスへのポインターのアドレスを格納するように ppint を初期化します。インターフェイスの使用が終わったら、Release メソッドを呼び出して参照カウントをデクリメントしてください。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
カテゴリが指定されていない場合、このメソッドは、フィルター上、およびフィルターの上流と下流でインターフェイスを検索します。カテゴリが指定されている場合は、そのカテゴリの出力ピンの下流のみを検索します。レンダラー、マルチプレクサー、TV チューナー、クロスバーなどのインターフェイスを見つけるために使用できます。
pCategory が &LOOK_UPSTREAM_ONLY と等しい場合、グラフビルダーはパラメーター pf で指定されたフィルターの上流を検索しますが、フィルター自体やフィルターの下流は検索しません。
pCategory が &LOOK_DOWNSTREAM_ONLY と等しい場合、グラフビルダーはパラメーター pf で指定されたフィルターの下流を検索しますが、フィルター自体やフィルターの上流は検索しません。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。ソースフィルターのピン(必要に応じてカテゴリを指定)をレンダリングフィルターに接続します。必要に応じて、別のフィルターを経由して接続します。
| pCategory | GUID* | inoptional | ソースフィルターのどの出力ピンを接続するかを指定する GUID へのポインター。すべてのピンカテゴリの一覧については、Pin Property Set を参照してください。NULL は、カテゴリに関係なく唯一の出力ピンをレンダリングすることを示します。 |
| pSource | IUnknown* | in | ソースフィルターまたは出力ピンを表す IBaseFilter または IPin インターフェイスへのポインター。ソースフィルターは通常、AVI ファイルソースフィルターやキャプチャフィルターなどのファイルソースフィルターです。 |
| pfCompressor | IBaseFilter* | in | オプションの圧縮フィルターを表す IBaseFilter インターフェイスへのポインター。 |
| pfRenderer | IBaseFilter* | in | レンダラーを表す IBaseFilter インターフェイスへのポインター。この値には、ICaptureGraphBuilder::SetOutputFileName の ppf(マルチプレクサー)パラメーターを使用できます。 |
戻り値
キャプチャフィルターにキャプチャピンはあるがプレビューピンがなく、そのキャプチャピンに対して &PIN_CATEGORY_PREVIEW カテゴリを指定して RenderStream を呼び出した場合、VFW_S_NOPREVIEWPIN を返します。この場合、RenderStream は Smart Tee フィルターのプレビューピンをレンダリングします。詳細については、「解説」を参照してください。
解説(Remarks)
pCategory に NULL 以外の Pin Property Set GUID を指定し、pSource にキャプチャフィルターを指定した場合、このメソッドは、TV チューナーやクロスバーなど、必要な追加の上流フィルターをインスタンス化して接続します。その後、pSource のキャプチャピンをレンダリングします。
pSource がピンの場合は、pCategory に NULL を指定します。このメソッドはそのピンからストリームをレンダリングします。
ソースフィルターに出力ピンが 1 つしかない場合は、pCategory に NULL を指定します。
パラメーターとして指定する pSource、pfCompressor、pfRenderer の各フィルターは、このメソッドを呼び出す前にグラフ内に存在している必要があります。
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 を呼び出す必要がある場合があります。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。グラフ内の 1 つ以上のキャプチャフィルターにおける、指定したカテゴリのピンにストリーム制御メッセージを送信します。
| pCategory | GUID* | inoptional | 出力ピンのカテゴリを指定する GUID へのポインター。すべてのピンカテゴリの一覧については、Pin Property Set を参照してください。この値を NULL にすることはできません。 |
| pFilter | IBaseFilter* | in | 制御するフィルターの IBaseFilter インターフェイスへのポインター。NULL を指定すると、グラフ内のすべてのキャプチャフィルターを制御します。キャプチャフィルターごとに 1 つの通知を受け取ります。 |
| pstart | LONGLONG* | in | キャプチャの開始時刻へのポインター。NULL は今すぐ開始することを意味します。MAX_TIME は前回の要求を取り消すこと、または前回の要求がない場合は何もしないことを意味します。 |
| pstop | LONGLONG* | in | キャプチャの停止時刻へのポインター。NULL は今すぐ停止することを意味します。MAX_TIME は前回の要求を取り消すこと、または前回の要求がない場合は何もしないことを意味します。 |
| wStartCookie | WORD | in | 開始時に送信される特定の値を指定します。 |
| wStopCookie | WORD | in | 停止時に送信される特定の値を指定します。 |
戻り値
キャプチャフィルターが送信した最後のサンプルがレンダリングされる前に停止通知が送信された場合は S_FALSE を返し、それ以外の場合は S_OK を返します。
このメソッドが S_FALSE を返した場合、アプリケーションは、すべてのサンプルがグラフを通過してレンダリングされるように、フィルターグラフを停止する前に待機した方がよい場合があります。そうしないと、サンプルが失われる可能性があります。
指定した記述に一致するピンがない場合、または指定したすべてのピンでストリーム制御をサポートできない場合、この関数は失敗コードを返します。
解説(Remarks)
フレーム単位で正確なキャプチャを行う場合や、キャプチャとプレビューを個別に制御する場合に、このメソッドを使用します。たとえば、キャプチャした画像をプレビューするだけの場合は、キャプチャした画像のディスクへの書き込みをオフにできます。
このメソッドは、ピン上の IAMStreamControl インターフェイスを使用します。
このメソッドは、指定したカテゴリのピンを持つフィルターが見つかるたびに 1 つの通知を送信します。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。キャプチャファイルを指定したサイズで事前に割り当てます。
| lpstr | LPWSTR | in | 作成またはサイズ変更するファイルの名前を格納するワイド文字列へのポインター。 |
| dwlSize | ULONGLONG | in | 割り当てるファイルのサイズ(バイト単位)。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
ファイルが読み取り専用の場合、呼び出しは失敗します。最良のキャプチャ結果を得るには、常に、断片化が解消された、キャプチャデータのサイズよりも大きい、事前に割り当てられたキャプチャファイルにキャプチャしてください。
注意 ICaptureGraphBuilder インターフェイスは非推奨です。代わりに ICaptureGraphBuilder2 を使用してください。事前に割り当てられたキャプチャファイルから有効なメディアデータをコピーします。
| lpwstrOld | LPWSTR | in | コピー元のファイル名を格納する Unicode™ 文字列へのポインター。 |
| lpwstrNew | LPWSTR | in | コピー先のファイル名を格納する Unicode 文字列へのポインター。有効なデータがこのファイルにコピーされます。 |
| fAllowEscAbort | INT | in | ESC キーを押すとコピー操作をキャンセルするかどうかを示す値。TRUE はキャンセルすることを示し、FALSE はこのメソッドがそのキー入力を無視することを示します。 |
| pCallback | IAMCopyCaptureFileProgress* | in | コピー操作の進行状況(完了率)を表示する IAMCopyCaptureFileProgress へのオプションのポインター。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
新しいファイルには有効なデータのみが含まれるため、コピー元のファイルよりもはるかに小さくできます。通常は、常に同じ巨大な事前割り当て済みファイルにキャプチャし、このメソッドを使用して、各キャプチャから保存したいデータを新しいファイルにコピーします。
pCallback を指定した場合、IAMCopyCaptureFileProgress インターフェイスの Progress メソッドが、完了率を表す 0 から 100 の整数を伴って定期的に呼び出されます。
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 指定が可能。#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 sptr,wstr,sptr,sptr #comfunc global ICaptureGraphBuilder_FindInterface 6 sptr,sptr,sptr,sptr #comfunc global ICaptureGraphBuilder_RenderStream 7 sptr,sptr,sptr,sptr #comfunc global ICaptureGraphBuilder_ControlStream 8 sptr,sptr,sptr,sptr,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が無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。