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

IFilterGraph

COM
IID56a8689f-0ad4-11ce-b03a-0020af0ba770継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IFilterGraph インターフェイスは、フィルターグラフを構築するためのメソッドを提供します。

メソッド 8

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

vtbl 3 HRESULT AddFilter(IBaseFilter* pFilter, LPWSTR pName)

AddFilter メソッドは、グラフにフィルターを追加します。

pFilterIBaseFilter*in追加するフィルターの IBaseFilter インターフェイスへのポインター。
pNameLPWSTRinフィルターの名前を含むワイド文字列へのポインター。

戻り値

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

戻り値 説明
S_OK
成功。
VFW_S_DUPLICATE_NAME
重複した名前のフィルターを正常に追加しました。
E_FAIL
失敗。
E_OUTOFMEMORY
メモリが不足しています。
E_POINTER
NULL ポインター引数。
VFW_E_CERTIFICATION_FAILURE
このフィルターの使用はソフトウェアキーによって制限されています。
VFW_E_DUPLICATE_NAME
重複した名前のフィルターの追加に失敗しました。

解説(Remarks)

フィルターの名前は NULL にすることができ、その場合は Filter Graph Manager が名前を生成します。名前が NULL でなく、かつ一意でない場合、このメソッドは新しい一意の名前を生成しようとして名前を変更します。これが成功すると、このメソッドは VFW_S_DUPLICATE_NAME を返します。一意の名前を生成できない場合は、VFW_E_DUPLICATE_NAME を返します。

AddFilter は、フィルターが追加されたことを通知するために、フィルターの IBaseFilter::JoinFilterGraph メソッドを呼び出します。追加したフィルターに属するピンを接続またはレンダリングするために IGraphBuilder::ConnectIFilterGraph::ConnectDirect、または IGraphBuilder::Render メソッドを使用する前に、AddFilter を呼び出す必要があります。

Filter Graph Manager は、フィルターがグラフから削除されるか Filter Graph Manager が解放されるまで、フィルターへの参照カウントを保持します。

vtbl 4 HRESULT RemoveFilter(IBaseFilter* pFilter)

RemoveFilter メソッドは、グラフからフィルターを削除します。

pFilterIBaseFilter*inグラフから削除するフィルターへのポインター。

戻り値

次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_FAIL
失敗。
E_POINTER
NULL ポインター引数。

解説(Remarks)

Filter Graph Manager は、フィルターの IBaseFilter::JoinFilterGraph メソッドを NULL 引数で呼び出すことにより、フィルターが削除されることを通知します。RemoveFilter を呼び出す前にフィルターのピンを切断する必要はありませんが、フィルターグラフは停止状態にしておく必要があります。フィルターが停止していない場合、RemoveFilter はピンの切断に失敗し、その結果グラフからのフィルターの削除に失敗することがあります。IGraphConfig::RemoveFilterEx を使用すると、アプリケーションはピンを自動的に切断せずにフィルターを削除できます。これにより、接続された複数のフィルターを新しいグラフへまとめて移動したい場合のパフォーマンスが向上します。

vtbl 5 HRESULT EnumFilters(IEnumFilters** ppEnum)

EnumFilters メソッドは、グラフ内のすべてのフィルターの列挙子を提供します。

ppEnumIEnumFilters**outIEnumFilters インターフェイスへのポインターを受け取ります。このインターフェイスを使用してフィルターを列挙します。呼び出し側はインターフェイスを解放する必要があります。

戻り値

次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_OUTOFMEMORY
列挙子を作成するためのメモリが不足しています。
E_POINTER
NULL ポインター引数。
vtbl 6 HRESULT FindFilterByName(LPWSTR pName, IBaseFilter** ppFilter)

FindFilterByName メソッドは、特定の名前でフィルターグラフに追加されたフィルターを検索します。

pNameLPWSTRin[in, string] 検索する名前へのポインター。
ppFilterIBaseFilter**outフィルターの IBaseFilter インターフェイスへのポインターを受け取ります。呼び出し側はインターフェイスを解放する必要があります。

戻り値

次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_POINTER
NULL ポインター引数。
VFW_E_NOT_FOUND
指定された名前のフィルターが見つかりませんでした。

解説(Remarks)

フィルターが見つからない場合、このメソッドは ppFilter パラメーターに NULL ポインターを返します。

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

vtbl 7 HRESULT ConnectDirect(IPin* ppinOut, IPin* ppinIn, AM_MEDIA_TYPE* pmt)

ConnectDirect メソッドは、2 つのピンを(間にフィルターを介さずに)直接接続します。

ppinOutIPin*in出力ピンへのポインター。
ppinInIPin*in入力ピンへのポインター。
pmtAM_MEDIA_TYPE*inoptional接続に使用するメディアタイプへのポインター(省略可能。NULL にできます)。

戻り値

次のいずれかの値、または IPin::Connect が返すエラー値を返します。

戻り値 説明
S_OK
成功。
E_POINTER
NULL ポインター引数。
VFW_E_NOT_IN_GRAPH
指定されたピンの一方がグラフ内にありません。
VFW_E_CIRCULAR_GRAPH
入力ピンが出力ピンの上流にあり、循環したグラフになってしまいます。
vtbl 8 HRESULT Reconnect(IPin* ppin)

Reconnect メソッドは、ピンを切断してから同じピンに再接続します。

ppinIPin*in再接続するピンの IPin インターフェイスへのポインター。

戻り値

次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_FAIL
失敗。
E_POINTER
NULL ポインター引数。
VFW_E_NOT_CONNECTED
ピンが接続されていません。
VFW_E_WRONG_STATE
フィルターが停止していません。

解説(Remarks)

このメソッドは廃止されています。代わりに IFilterGraph2::ReconnectEx メソッドを使用してください。

フィルターは、ピン接続を再ネゴシエートするためにこのメソッドを呼び出すことができます。このメソッドは別のスレッドで実行されます。このメソッドを呼び出す前に、もう一方のピンに対して IPin::QueryAccept を呼び出し、再接続の試行が成功することを確認してください。QueryAcceptS_OK を返さない限り、このメソッドを呼び出さないでください。そうしないと、再接続は非同期に実行されるため、Reconnect メソッド自体は成功しても再接続が失敗し、フィルターグラフが不整合な状態のまま残ることがあります。

vtbl 9 HRESULT Disconnect(IPin* ppin)

Disconnect メソッドは、このピンを切断します。

ppinIPin*in切断するピンへのポインター。

戻り値

次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
S_FALSE
ピンは接続されていませんでした。エラーではありません。
E_FAIL
失敗。
E_POINTER
NULL ポインター引数。
VFW_E_NOT_STOPPED
フィルターが停止しておらず、実行状態での再接続をサポートしていません。

解説(Remarks)

このメソッドは接続を完全には切断しません。接続を完全に切断するには、両端を切断する必要があります。

フィルターをフィルターグラフから完全に削除するには、IFilterGraph::RemoveFilter メソッドを呼び出してください。

vtbl 10 HRESULT SetDefaultSyncSource()

SetDefaultSyncSource メソッドは、参照クロックを既定のクロックに設定します。

戻り値

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

戻り値 説明
S_OK
成功。
VFW_E_NOT_STOPPED
フィルターグラフが停止していません。

解説(Remarks)

このメソッドは、既定のアルゴリズムを使用して参照クロックを選択するよう Filter Graph Manager に指示します。使用されるアルゴリズムの詳細については、Reference Clocks を参照してください。

通常、Filter Graph Manager が自動的にクロックを選択するため、このメソッドを呼び出す必要はありません。ただし、IMediaFilter::SetSyncSource を呼び出してクロックを上書きした場合は、SetDefaultSyncSource を使用して既定のクロックに戻すことができます。

フィルターグラフが実行中または一時停止中の場合、このメソッドは失敗します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IFilterGraph "{56A8689F-0AD4-11CE-B03A-0020AF0BA770}"
#usecom global IFilterGraph IID_IFilterGraph "{}"
#comfunc global IFilterGraph_AddFilter             3 sptr,wstr
#comfunc global IFilterGraph_RemoveFilter          4 sptr
#comfunc global IFilterGraph_EnumFilters           5 sptr
#comfunc global IFilterGraph_FindFilterByName      6 wstr,sptr
#comfunc global IFilterGraph_ConnectDirect         7 sptr,sptr,var
#comfunc global IFilterGraph_Reconnect             8 sptr
#comfunc global IFilterGraph_Disconnect            9 sptr
#comfunc global IFilterGraph_SetDefaultSyncSource  10
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。