このインターフェイスは、Directshowを利用する場合に手助けとなるメソッドを提供する。
ピン接続関係
メソッド 説明 Connect 2つのフィルタを繋ぐ。 ConnectDirect 2つのフィルタを直接繋ぐ。 Disconnect 2つのフィルタの接続を解除する。
ピン関係
メソッド 説明 GetPinCount フィルタのピンの数を取得する。 GetPin フィルタのピンを取得する。
フィルター関係
メソッド 説明 AddFilter フィルタを登録する。 AddSourceFilter ソースフィルタを登録する。 AddWriteFilter ライトフィルタを登録する。
pFilter1の出力ピンとpFilter2の入力ピンを繋ぎます。
構文
HRESULT Connect( IGraphBuilder *pGraphBuilder, IBaseFilter *pFilter1, IBaseFilter *pFilter2 );
パラメータ
- pGraphBuilder
- [in] フィルタの所属しているグラフビルダのポインタ。
- pFilter1
- [in] 接続するフィルタのポインタ。
- pFilter2
- [in] 接続するフィルタのポインタ。
戻り値
HRESULT を返す。設定される値は次のとおりである。
S_OK 成功。 E_POINTER 引数がNULLポインタです。 E_FAIL ピンの取得に失敗した。 VFW_S_PARTIAL_RENDER このムービーにサポートされないフォーマットのストリームが含まれている。 E_ABORT 操作が中止された。 VFW_E_CANNOT_CONNECT 接続を確立する中間フィルタの組み合わせが見つからなかった。 VFW_E_NOT_IN_GRAPH フィルタ グラフに存在しないオブジェクトに要求された関数を実行できない。
注意
出力ピン、入力ピンが複数存在する場合は総当りで接続を試します。
VFW_S_PARTIAL_RENDERはエラーコードではありません。
例えば映像ファイルで映像デコードフィルタが無いけど音声デコードフィルタがある場合に
ソースフィルタと音声レンダリングフィルタを繋いだ場合になる。(Connect自体は成功)
pFilter1の出力ピンとpFilter2の入力ピンをpAmMediaTypeのメディアタイプで直接繋ぎます。
構文
HRESULT ConnectDirect( IGraphBuilder *pGraphBuilder, IBaseFilter *pFilter1, IBaseFilter *pFilter2, AM_MEDIA_TYPE *pAmMediaType );
パラメータ
- pGraphBuilder
- [in] フィルタの所属しているグラフビルダのポインタ。
- pFilter1
- [in] 接続するフィルタのポインタ。
- pFilter2
- [in] 接続するフィルタのポインタ。
- pAmMediaType
- [in] 接続に使用するメディア タイプへのポインタ (省略、つまり NULL も可能)。
戻り値
HRESULT を返す。設定される値は次のとおりである。
S_OK 成功。 E_POINTER 引数が不正です。 VFW_E_ALREADY_CONNECTED ピンは既に接続されている。 VFW_E_NO_ACCEPTABLE_TYPES 許可されたメディア タイプを見つけることができなかった。 VFW_E_NOT_STOPPED フィルタがアクティブで、ピンが動的再接続をサポートしていない。 VFW_E_TYPE_NOT_ACCEPTED 指定したメディア タイプは許可されない。
注意
出力ピン、入力ピンが複数存在する場合は総当りで接続を試します。
pFilter1の出力ピンとpFilter2の入力ピンの接続を解除します。
構文
HRESULT Disconnect( IGraphBuilder *pGraphBuilder, IBaseFilter *pFilter1, IBaseFilter *pFilter2 );
パラメータ
- pGraphBuilder
- [in] フィルタの所属しているグラフビルダのポインタ。
- pFilter1
- [in] 接続を解除したいフィルタのポインタ。
- pFilter2
- [in] 接続を解除したいフィルタのポインタ。
戻り値
HRESULT を返す。設定される値は次のとおりである。
S_OK 成功。 E_POINTER 引数がNULLポインタです。 S_FALSE ピンが接続されていません。 VFW_E_NOT_STOPPED フィルタがアクティブで、ピンは動的再接続をサポートしていません。
注意
グラフが実行中の場合には、ピン接続を解除しないで下さい。
pFilterのpinDirectionの向きのピンの数を返します。
構文
int GetPinCount( IBaseFilter *pFilter, PIN_DIRECTION pinDirection );
パラメータ
- pFilter
- [in] ピンの数を取得したいフィルタのポインタ。
- pinDirection
- [in] PINDIR_INPUTもしくはPINDIR_OUTPUTを指定可。
戻り値
ピンの数を返す。
pFilterのpinDirectionの向きのnPinNumber番目のピンのポインタを返します。
構文
IPin * GetPin( IBaseFilter *pFilter, PIN_DIRECTION pinDirection int nPinNumber );
パラメータ
- pFilter
- [in] ピンを取得したいフィルタのポインタ。
- pinDirection
- [in] PINDIR_INPUTもしくはPINDIR_OUTPUTを指定可。
- nPinNumber
- [in] ピンの番号。
戻り値
ピンの数を返す。ピンの取得に失敗したらNULLを返します。
注意
nPinNumberは0から始まります。最初のピンを取得したい場合は0を指定して下さい。
clsidのオブジェクトを作成し、pGraphBuilderに登録します。
IBaseFilter * AddFilter( IGraphBuilder *pGraphBuilder, CLSID clsid );
パラメータ
- pGraphBuilder
- [in] フィルタを登録したいグラフビルダのポインタ。
- claid
- [in] 新規オブジェクトのクラスID。
戻り値
IBaseFilterのポインタを返します。フィルタの登録に失敗した場合はNULLを返します。
clsidのソースフィルタを作成し、pGraphBuilderに登録します。
IBaseFilter * AddSourceFilter( IGraphBuilder *pGraphBuilder, CLSID clsid, WCHAR *wpFileName );
パラメータ
- pGraphBuilder
- [in] フィルタを登録したいグラフビルダのポインタ。
- claid
- [in] 新規オブジェクトのクラスID。
- wpFileName
- [in] ソースフィルタで使用する入力ファイル名。
戻り値
登録したフィルタのポインタを返します。フィルタの登録に失敗した場合はNULLを返します。
注意
フィルタがIFileSourceFilterのインターフェースを持たない場合は失敗します。
clsidのライトフィルタを作成し、pGraphBuilderに登録します。
IBaseFilter * AddWriteFilter( IGraphBuilder *pGraphBuilder, CLSID clsid, WCHAR *wpFileName );
パラメータ
- pGraphBuilder
- [in] フィルタを登録したいグラフビルダのポインタ。
- claid
- [in] 新規オブジェクトのクラスID。
- wpFileName
- [in] ライトフィルタで使用する入力ファイル名。
戻り値
登録したフィルタのポインタを返します。フィルタの登録に失敗した場合はNULLを返します。
注意
フィルタがIFileSinkFilterのインターフェースを持たない場合は失敗します。