Microsoft DirectX 8.0

IFilterGraph インターフェイス

このインターフェイスはフィルタ グラフを構築するメソッドを提供する。アプリケーションからこのインターフェイスを使用して、グラフにフィルタを追加したり、フィルタを接続または切断したり、フィルタを削除したり、その他の基本的な操作を実行することができる。ただし、IGraphBuilder インターフェイスは、このインターフェイスを継承し、さらに高度なメソッドを提供する。したがって、アプリケーションでは、IFilterGraph を直接使用せずに、IGraphBuilder を使用すること。

フィルタ グラフ マネージャがこのインターフェイスを実装する。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを取得する。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IFilterGraph メソッド説明
AddFilter グラフにフィルタを追加し、そのフィルタに名前を付ける。
RemoveFilter グラフからフィルタを削除する。
EnumFilters グラフのフィルタすべてに対して列挙子を提供する。
FindFilterByName 特定の名前で追加されたフィルタを検索する。
ConnectDirect 2 つのピンを直接接続する (フィルタを通さない)。
Reconnect 既存のピン接続を切断し、同じピンに再接続する。
Disconnect 特定のピンを切断する。
SetDefaultSyncSource デフォルトの同期基準 (クロック) を設定する。

IFilterGraph::AddFilter

IFilterGraph インターフェイス

グラフにフィルタを追加し、そのフィルタに名前を付ける。

構文

HRESULT AddFilter(
    IBaseFilter *pFilter,
    LPCWSTR pName
);

パラメータ

pFilter
[in] グラフに追加するフィルタへのポインタ。
pName
[in] フィルタ名へのポインタ。

戻り値

HRESULT 値を返す。可能な値は次のとおりである。

S_OK成功。
VFW_S_DUPLICATE_NAME名前が重複したフィルタの追加に成功した。
E_FAIL失敗。
E_OUTOFMEMORYメモリ不足。
E_POINTERNull ポインタ引数。
VFW_E_CERTIFICATION_FAILUREこのフィルタの使用は、ソフトウェア キーによって制限される。
VFW_E_DUPLICATE_NAME名前が重複したフィルタの追加に失敗した。

注意

フィルタ名は NULL の場合がある。その場合、フィルタ グラフ マネージャが名前を生成する。フィルタ名が NULL 以外で一意でない場合、このメソッドは、フィルタ名を変更して一意な名前を生成しようとする。これに成功すると、VFW_S_DUPLICATE_NAME を返す。一意な名前を生成できない場合は、VFW_E_DUPLICATE_NAME を返す。

AddFilter は、フィルタの IBaseFilter::JoinFilterGraph メソッドを呼び出して、フィルタが追加されたことをそのフィルタに通知する。IGraphBuilder::Connect メソッド、IFilterGraph::ConnectDirect メソッド、または IGraphBuilder::Render メソッドを使用して、追加したフィルタに属するピンを接続またはレンダリングする場合には、その前に AddFilter を呼び出さなければならない。

IFilterGraph::ConnectDirect

IFilterGraph インターフェイス

2 つのピンを直接接続する (フィルタを通さない)。

構文

HRESULT ConnectDirect(
    IPin *ppinOut,
    IPin *ppinIn,
    const AM_MEDIA_TYPE *pmt
);

パラメータ

ppinOut
[in] 出力ピンへのポインタ。
ppinIn
[in] 入力ピンへのポインタ。
pmt
[in] 接続に使用するメディア タイプへのポインタ (省略、つまり NULL も可能)。

戻り値

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

S_OK成功。
E_POINTERNull ポインタ引数。
VFW_E_NOT_IN_GRAPH指定されたピンのいずれかがグラフに含まれていない。
VFW_E_CIRCULAR_GRAPH入力ピンが出力ピンのアップストリームにあるため、グラフが循環する。

IFilterGraph::Disconnect

IFilterGraph インターフェイス

このピンを切断する。

構文

HRESULT Disconnect(
    IPin *ppin
);

パラメータ

ppin
[in] 切断するピンへのポインタ。

戻り値

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

S_OK成功。
S_FALSEピンが接続されていない。エラーなし。
E_FAIL失敗。
E_POINTERNull ポインタ引数。
VFW_E_NOT_STOPPEDフィルタが停止していないが、実行状態での再接続がサポートされていない。

注意

このメソッドでは、接続が完全には切断されない。完全に切断するには、両端を切断しなければならない。

IFilterGraph::EnumFilters

IFilterGraph インターフェイス

グラフのフィルタすべてに対して列挙子を提供する。

構文

HRESULT EnumFilters(
    IEnumFilters **ppEnum
);

パラメータ

ppEnum
[out] 列挙子へのポインタのアドレス。

戻り値

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

S_OK成功。
E_OUTOFMEMORYメモリ不足のため、列挙子を作成できない。
E_POINTERNull ポインタ引数。

注意

このメソッドによって返されるインターフェイスは、インクリメントされている参照カウントを持っている。インターフェイスを使い終わった場合は、インターフェイス上で必ず IUnknown::Release を使用して、参照カウントをデクリメントすること。

IFilterGraph::FindFilterByName

IFilterGraph インターフェイス

特定の名前でフィルタ グラフに追加されたフィルタを検索する。

構文

HRESULT FindFilterByName(
    LPCWSTR pName,
    IBaseFilter **ppFilter
);

パラメータ

pName
[in, string] 検索する名前へのポインタ。
ppFilter
[out] 見つかったフィルタの IBaseFilter インターフェイスへのポインタのアドレス。

戻り値

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

S_OK成功。
E_POINTERNull ポインタ引数。
VFW_E_NOT_FOUND指定された名前のフィルタが見つからない。

注意

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

IFilterGraph::Reconnect

IFilterGraph インターフェイス

このフィルタ グラフとピンの接続を切断し、同じピンに再接続する。これによって、接続の詳細 (メディア タイプやアロケータなど) をネゴシエートし直すことができる。

構文

HRESULT Reconnect(
    IPin *ppin
);

パラメータ

ppin
[in] 切断および再接続するピンへのポインタ。

戻り値

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

S_OK成功。
E_FAIL失敗。
E_POINTERNull ポインタ引数。
VFW_E_NOT_CONNECTEDピンが接続されていない。
VFW_E_WRONG_STATEフィルタが停止していない。

注意

このメソッドは、関連するロックを保持しない独立したスレッドで操作を実行する。ピンまたはフィルタからこのメソッドを呼び出して、接続のネゴシエーションをやり直すことができる。変換フィルタは、その入力と接続するときにメディア タイプを決めなければならない。その後、出力を接続する時点で、アップストリームとダウンストリームの接続を共に満足させるには、アップストリームの接続に別のメディア タイプを選択した方がよかったことがわかる場合がある。その解決策が入力ピンの再接続である。再接続は非同期に実行され、エラーを報告または訂正する手段がないため、このメソッドの呼び出し元では、ネゴシエーションのやり直しが成功することを (たとえば IPin::QueryAccept を呼び出して) 確認しなければならない。

IFilterGraph::RemoveFilter

IFilterGraph インターフェイス

グラフからフィルタを削除する。

構文

HRESULT RemoveFilter(
    IBaseFilter *pFilter
);

パラメータ

pFilter
[in] グラフから削除するフィルタへのポインタ。

戻り値

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

S_OK成功。
E_FAIL失敗。
E_POINTERNull ポインタ引数。

注意

フィルタ グラフの実装は、引数 NULL で IBaseFilter::JoinFilterGraph メソッドを呼び出して、フィルタが削除されることをそのフィルタに通知する。RemoveFilter を呼び出す前にフィルタのピンを切り離す必要がないが、フィルタ グラフは停止状態にすべきだ。フィルタが停止していないと、RemoveFilter はピンとの切り離しに失敗し、グラフからのフィルタの削除に失敗するかもしれない。IGraphConfig::RemoveFilterEx を使うと、アプリケーションはピンとの切り離しなしにフィルタを自動的に削除できる、これは接続されているフィルタを新しいグラフに移動したいときパフォーマンスを改善する。

IFilterGraph::SetDefaultSyncSource

IFilterGraph インターフェイス

デフォルトの同期基準を設定する。

構文

HRESULT SetDefaultSyncSource(void);

戻り値

成功した場合は、S_OK を返す。それ以外の場合、VFW_E_NOT_STOPPED (グラフが停止状態にないことを示す) またはその他のエラー値を返す。

注意

このメソッドは、フィルタ グラフにクロックが供給されていないとき、フィルタ グラフ マネージャが同期基準として使用するクロックを探すために使用する。フィルタ グラフ マネージャは、レンダラから順に、IReferenceClock インターフェイスを提供する最初のフィルタを選択しながら、接続されているフィルタをすべて試していく。接続されているフィルタがない場合、フィルタ グラフ マネージャは、クロックをエクスポートする接続されていないフィルタを選択する。通常、このとき選択されるのはオーディオ レンダリング フィルタである。クロックをエクスポートする接続されていないフィルタがない場合、フィルタ グラフ マネージャはシステム クロックを作成する。