Microsoft DirectX 8.0

IFilterMapper2 インターフェイス

このインターフェイスは、フィルタを登録および登録解除し、レジストリ内のフィルタを検索する。フィルタ マッパー ヘルパー オブジェクトは、このインターフェイスを実装する。

フィルタでは、このインターフェイスを使用して、フィルタ自体を登録および登録解除する。フィルタ グラフ マネージャがフィルタ グラフを構築するとき、このインターフェイスを使用してフィルタを検索し、フィルタの特性を判断する。アプリケーションからも、このインターフェイスを使用してフィルタを検索できる。詳細については、「フィルタ マッパーの使用」および「DirectShow オブジェクトの登録方法」を参照すること。

注 :  このインターフェイスは IFilterMapper インターフェイスに取って代わるものである。IFilterMapper2 では、フィルタ カテゴリ、ピン メディア、およびピン カテゴリがサポートされている。更にフィルタの登録が 1 つのメソッド呼び出しにまとめられている。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterfaceサポートされているインターフェイスへのポインタを取得する。
AddRef参照カウントをインクリメントする。
Release参照カウントをデクリメントする。
IFilterMapper2 メソッド説明
CreateCategoryレジストリに新しいフィルタ カテゴリを追加する。
UnregisterFilterレジストリからフィルタ情報を削除する。
RegisterFilterレジストリにフィルタ情報を追加する。
EnumMatchingFilters指定された要件を満たす登録済みフィルタを列挙する。

IFilterMapper2::CreateCategory

IFilterMapper2 インターフェイス

レジストリに新しいフィルタ カテゴリを追加する。

構文

HRESULT CreateCategory(
    REFCLSID clsidCategory,
    DWORD dwCategoryMerit,
    LPCWSTR Description 
);

パラメータ

clsidCategory
[in] 新しいフィルタ カテゴリのクラス識別子 (CLSID)。
dwCategoryMerit
[in] カテゴリのメリット値。メリット値の高いカテゴリほど先に列挙される。
Description
[in] カテゴリの内容を表すわかりやすい名前。

戻り値

成功した場合は、S_OK を返す。それ以外の場合は、エラーの原因を示す HRESULT 値を返す。

注意

フィルタ グラフ マネージャは、まず MERIT_DO_NOT_USE 以下のメリット値を持つカテゴリをすべて除外することによって、グラフの構築処理をアクセラレーションする。再生の際に考慮すべきでないフィルタ カテゴリには、MERIT_DO_NOT_USE 以下のメリット値を設定すること。

検索範囲を絞るため、1 つのフィルタは 1 つ以上のカテゴリに含めることができる (たとえばビデオ コンプレッサ)。

IFilterMapper2::EnumMatchingFilters

IFilterMapper2 インターフェイス

指定された要件を満たす登録済みフィルタを列挙する。

構文

HRESULT EnumMatchingFilters(
    IEnumMoniker **ppEnum,
    DWORD dwFlags,
    BOOL bExactMatch,
    DWORD dwMerit,
    BOOL bInputNeeded,
    DWORD cInputTypes,
    const GUID *pInputTypes,
    const REGPINMEDIUM *pMedIn,
    const CLSID *pPinCategoryIn,
    BOOL bRender,
    BOOL bOutputNeeded,
    DWORD cOutputTypes,
    const GUID *pOutputTypes,
    const REGPINMEDIUM *pMedOut,
    const CLSID *pPinCategoryOut 
);

パラメータ

ppEnum
[out] IEnumMoniker インターフェイスを受け取るポインタのアドレス。メソッドが成功した場合は、このインターフェイス ポインタを使用して、列挙型からフィルタ モニカを取得する。インターフェイスは使い終わったら解放すること。
dwFlags
[in] 予約済み。0 でなければならない。
bExactMatch
[in] 完全に一致するものだけを列挙するかどうかを示すブール型の値。詳細については、「注意」を参照すること。
dwMerit
[in] 最小メリット値。
bInputNeeded
[in] フィルタに入力ピンが必要かどうかを示すブール型の値。TRUE の場合、フィルタには入力ピンが少なくとも 1 つ必要である。
cInputTypes
[in] pInputTypes で指定する入力メディア タイプの数。
pInputTypes
[in] メジャー タイプおよびサブタイプを指定する GUID ペアの配列へのポインタ。これらに一致する入力ピンを列挙する。配列のサイズは 2 * cInputTypes となる。配列は NULL の場合がある。配列の個々のメンバには、あらゆるタイプに一致する GUID_NULL を指定できる。
pMedIn
[in] 入力ピンのメディアを指定する REGPINMEDIUM 構造体へのポインタ。必要がない場合は、NULL を設定する。
pPinCategoryIn
[in] 入力ピン カテゴリを指定する GUID へのポインタ。必要がない場合は、NULL を設定する。
bRender
[in] フィルタがその入力をレンダリングする必要があるかどうかを指定するブール型の値。TRUE の場合には、指定されたフィルタが入力をレンダリングする必要がある。
bOutputNeeded
[in] フィルタに出力ピンが必要かどうかを指定するブール型の値。TRUE の場合、フィルタには出力ピンが少なくとも 1 つ必要である。
cOutputTypes
[in] pOutputTypes で指定する出力メディア タイプの数。
pOutputTypes
[in] メジャー タイプおよびサブタイプを指定する GUID ペアの配列へのポインタ。これらに一致する出力ピンを列挙する。配列のサイズは 2 * cOutputTypes となる。配列は NULL の場合がある。配列の個々のメンバには、あらゆるタイプに一致する GUID_NULL を指定できる。
pMedOut
[in] 出力ピンのメディアを指定する REGPINMEDIUM 構造体へのポインタ。必要がない場合は、NULL を設定する。
pPinCategoryOut
[in] 出力ピン カテゴリを指定する GUID へのポインタ。必要がない場合は、NULL を設定する。

戻り値

HRESULT 値を返す。以下の表に示されるいずれかの値。

S_OK成功
E_FAIL失敗
E_OUTOFMEMORYメモリ不足
E_POINTERNULL ポインタ引数

注意

入力ピンが与えられた一連のメディア タイプと一致するフィルタを検索するには、メジャー タイプ GUID とサブタイプ GUID のペアを順に並べた配列を宣言する。pInputTypes パラメータに配列のアドレスを渡し、cInputTypes パラメータにペアの数 (つまり配列サイズの半分) を設定する。

GUID arrayInTypes[2];
arrayInTypes[0] = MEDIATYPE_Video;
arrayInTypes[1] = GUID_NULL;

DWORD cInTypes = 1;

出力ピンの場合は、pOutputTypes パラメータに同様の配列を渡し、cOutputTypes パラメータで GUID ペアの数を指定する。

bExactMatch パラメータの値が TRUE の場合、このメソッドは、メディア タイプ、ピン カテゴリ、およびピン メディアで指定された値と完全に一致するフィルタを検索する。この値が FALSE の場合、これらの項目のいずれかに値 NULL が登録されているフィルタも、一致するものと見なされる (レジストリ内の値 NULL はワイルドカードの役目を果たす)。

メディア タイプ、ピン カテゴリ、またはピン メディアに NULL を指定すると、あらゆるフィルタがそのパラメータに一致するものと見なされる。

メディア タイプが登録されていないピンは、そのメディア タイプに一致しないものと見なされる。

IFilterMapper2::RegisterFilter

IFilterMapper2 インターフェイス

レジストリにフィルタ情報を追加する。

構文

HRESULT RegisterFilter(
    REFCLSID clsidFilter,
    LPCWSTR Name,
    IMoniker **ppMoniker,
    const CLSID *pclsidCategory,
    const OLECHAR *szInstance,
    const REGFILTER2 *prf2 
);

パラメータ

clsidFilter
[in] フィルタのクラス識別子 (CLSID)。
Name
[in] フィルタの内容を表すわかりやすい名前。
ppMoniker
[in, out] このフィルタのデータ出力先を決めるデバイス モニカへのポインタのアドレス。NULL の場合がある。
pclsidCategory
[in] フィルタのフィルタ カテゴリへのポインタ。NULL なら、デフォルト カテゴリは CLSID_ActiveMovieFilters である。
szInstance
[in] デバイス モニカの表示名を構築するために使用するインスタンス データ。フレンドリ名でも、フィルタの CLSID の文字列表現でもよい。NULL の場合は、フィルタの CLSID が使用される。
prf2
[in] フィルタ情報が格納された REGFILTER2 構造体へのポインタ。

戻り値

HRESULT 値を返す。以下の表に示されるいずれかの値。

S_OK成功。
VFW_E_BAD_KEYレジストリ キーを取得できない。

注意

このメソッドは、レジストリ内の指定されたフィルタ カテゴリに対応するレジストリ エントリ下に、フィルタに関する情報を追加する。フィルタを作成するインプロセス サーバー (通常は DLL) を登録するのではない。サーバーを登録するには、AMovieDllRegisterServer2 関数を呼び出せばよい。

ppMoniker パラメータには、次のいずれかを使用する。

WDM (Windows Driver Model) デバイスまたはプラグ アンド プレイ デバイス用のフィルタを登録する場合は、既存のデバイス モニカのアドレスを渡す。こうすると、このモニカを使用してフィルタが登録される。メソッドから戻るとき、*ppMoniker には NULL が設定される。

それ以外の場合は、新しいモニカが作成される。ppMoniker が NULL でない場合、*ppMoniker に新しいモニカへのポインタが設定される。そのアプリケーションでは、このモニカを使用してプロパティ バッグにプライベートな値を追加できる。インターフェイスの解放を忘れないこと。

モニカを提供または取得する必要がない場合は、ppMoniker に NULL を設定する。

IFilterMapper2::UnregisterFilter

IFilterMapper2 インターフェイス

レジストリからフィルタ情報を削除する。

構文

HRESULT UnregisterFilter(
    const CLSID *pclsidCategory,
    const OLECHAR *szInstance,
    REFCLSID Filter 
);

パラメータ

pclsidCategory
[in] フィルタを削除するフィルタ カテゴリへのポインタ。
szInstance
[in] デバイス モニカの表示名の構築に使用したインスタンス データ。RegisterFilter メソッドに渡した値を使用する。
Filter
[in] フィルタのクラス識別子 (CLSID)。

戻り値

成功した場合は、S_OK を返す。それ以外の場合は、エラーの原因を示す HRESULT 値を返す。

注意

フィルタが登録されていない場合、メソッドはエラーを返す。