IFilterMapper2
COM公式ドキュメント
フィルターの登録と登録解除を行い、レジストリ内のフィルターを検索します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
CreateCategory メソッドは、新しいフィルターカテゴリをレジストリに追加します。
| clsidCategory | GUID* | in | 新しいフィルターカテゴリのクラス識別子 (CLSID)。 |
| dwCategoryMerit | DWORD | in | カテゴリの Merit。Merit が高いカテゴリほど先に列挙されます。 |
| Description | LPWSTR | in | カテゴリの説明的な名前。 |
戻り値
成功した場合は S_OK を返します。失敗した場合は、エラーの原因を示す HRESULT 値を返します。
解説(Remarks)
フィルターグラフマネージャーは、グラフ構築処理を高速化するため、Merit 値が MERIT_DO_NOT_USE 以下のすべてのカテゴリを最初にスキップします。再生の対象とすべきでないフィルターカテゴリには、MERIT_DO_NOT_USE 以下の Merit を設定してください。
フィルターは、検索空間を絞り込むために、1 つ以上のカテゴリ (たとえば Video Compressors) に属することができます。
UnregisterFilter メソッドは、フィルター情報をレジストリから削除します。
| pclsidCategory | GUID* | in | フィルターを削除する対象のフィルターカテゴリを指定する GUID のアドレス。カテゴリの一覧については、Filter Categories を参照してください。 |
| szInstance | LPWSTR | in | デバイスモニカーの表示名の構築に使用されるインスタンスデータ。もともと RegisterFilter メソッドに渡した値を使用してください。 |
| Filter | GUID* | in | フィルターのクラス識別子 (CLSID)。 |
戻り値
成功した場合は S_OK を返します。失敗した場合は、エラーの原因を示す HRESULT 値を返します。
解説(Remarks)
フィルターが登録されていなかった場合、このメソッドはエラーを返すことがあります。
RegisterFilter メソッドは、フィルター情報をレジストリに追加します。
| clsidFilter | GUID* | in | フィルターのクラス識別子 (CLSID)。 |
| Name | LPWSTR | in | フィルターの説明的な名前。 |
| ppMoniker | IMoniker** | inoutoptional | このフィルターのデータが書き込まれる場所を決定するデバイスモニカーへのポインターのアドレス。NULL を指定できます。 |
| pclsidCategory | GUID* | in | フィルターのフィルターカテゴリへのポインター。NULL の場合、既定のカテゴリは CLSID_ActiveMovieFilters になります。(Filter Categories を参照してください。) |
| szInstance | LPWSTR | in | デバイスモニカーの表示名を構築するためのインスタンスデータ。フレンドリ名、またはフィルター CLSID の文字列表現を指定できます。NULL の場合、既定でフィルター CLSID が使用されます。 |
| prf2 | REGFILTER2* | in | フィルター情報を格納する REGFILTER2 構造体へのポインター。 |
戻り値
HRESULT 値を返します。取り得る値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| 成功しました。 | |
| レジストリキーを取得できませんでした。 |
解説(Remarks)
このメソッドは、指定されたフィルターカテゴリのレジストリエントリの下に、フィルターに関する情報をレジストリに追加します。フィルターを作成するインプロセスサーバー (通常は DLL) は登録しません。サーバーを登録するには、AMovieDllRegisterServer2 関数を呼び出します。
ppMoniker パラメーターには、次のいずれかを使用します。
- 既存のデバイスモニカーに対する IMoniker インターフェイスポインターのアドレス
- NULL の IMoniker インターフェイスポインターのアドレス
- NULL
それ以外の場合、メソッドは新しいモニカーを作成します。ppMoniker が非 NULL の場合、メソッドは *ppMoniker が新しいモニカーを指すように設定します。アプリケーションはこのモニカーを使用して、プロパティバッグに追加のプライベートな値を書き込むことができます。インターフェイスは必ず解放してください。
モニカーの提供も受け取りも行わない場合は、ppMoniker を NULL に設定してください。
EnumMatchingFilters メソッドは、指定された要件を満たす登録済みフィルターを列挙します。
| ppEnum | IEnumMoniker** | out | IEnumMoniker インターフェイスへのポインターを受け取ります。このインターフェイスポインターを使用して、列挙からフィルターモニカーを取得します。呼び出し側はインターフェイスを解放する必要があります。 |
| dwFlags | DWORD | in | 予約済みです。0 を指定する必要があります。 |
| bExactMatch | BOOL | in | 完全一致が必要かどうかを示すブール値。詳細については「解説」を参照してください。 |
| dwMerit | DWORD | in | 最小の Merit 値。列挙では、これより小さい Merit 値を持つフィルターは除外されます。Merit 値の一覧については、Merit を参照してください。dwMerit が MERIT_DO_NOT_USE より大きい場合、列挙では、カテゴリの Merit が MERIT_DO_NOT_USE 以下であるフィルターも除外されます。(Filter Categories を参照してください。) |
| bInputNeeded | BOOL | in | フィルターが入力ピンを持つ必要があるかどうかを示すブール値。値が TRUE の場合、フィルターは少なくとも 1 つの入力ピンを持つ必要があります。 |
| cInputTypes | DWORD | in | pInputTypes で指定される入力メディアタイプの数。 |
| pInputTypes | GUID* | inoptional | 一致させる入力ピンのメジャータイプとサブタイプを指定する GUID のペアの配列へのポインター。配列のサイズは 2 * cInputTypes です。この配列は NULL にできます。配列の各メンバーには、任意のタイプに一致する GUID_NULL を指定できます。(Media Types を参照してください。) |
| pMedIn | REGPINMEDIUM* | inoptional | 入力ピンのメディウムを指定する REGPINMEDIUM 構造体へのポインター。不要な場合は NULL を設定します。 |
| pPinCategoryIn | GUID* | inoptional | 入力ピンのカテゴリを指定する GUID へのポインター。(Pin Property Set を参照してください。) 不要な場合は NULL を設定します。 |
| bRender | BOOL | in | フィルターがその入力をレンダリングする必要があるかどうかを指定するブール値。TRUE の場合、指定されたフィルターはその入力をレンダリングする必要があります。(この値は、フィルターのピンに関する情報の登録に使用される REGFILTERPINS 構造体の bRendered フィールドに対応します。) |
| bOutputNeeded | BOOL | in | フィルターが出力ピンを持つ必要があるかどうかを指定するブール値。TRUE の場合、フィルターは少なくとも 1 つの出力ピンを持つ必要があります。 |
| cOutputTypes | DWORD | in | pOutputTypes で指定される出力メディアタイプの数。 |
| pOutputTypes | GUID* | inoptional | 一致させる出力ピンのメジャータイプとサブタイプを指定する GUID のペアの配列へのポインター。配列のサイズは 2 * cOutputTypes です。この配列は NULL にできます。配列の各メンバーには、任意のタイプに一致する GUID_NULL を指定できます。 |
| pMedOut | REGPINMEDIUM* | inoptional | 出力ピンのメディウムを指定する REGPINMEDIUM 構造体へのポインター。不要な場合は NULL を設定します。 |
| pPinCategoryOut | GUID* | inoptional | 出力ピンのカテゴリを指定する GUID へのポインター。(Pin Property Set を参照してください。) 不要な場合は NULL を設定します。 |
戻り値
HRESULT 値を返します。取り得る値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| 成功 | |
| 失敗 | |
| メモリ不足 | |
| NULL ポインター引数 |
解説(Remarks)
入力ピンが指定された一連のメディアタイプに一致するフィルターを見つけるには、メジャータイプの GUID とサブタイプの GUID をペアで並べた配列を宣言します。配列のアドレスを pInputTypes パラメーターに渡し、cInputTypes パラメーターにはペアの数 (つまり配列サイズの半分) を設定します。
| C++ |
|---|
GUID arrayInTypes[2]; arrayInTypes[0] = MEDIATYPE_Video; arrayInTypes[1] = GUID_NULL; |
bExactMatch パラメーターの値が TRUE の場合、このメソッドは、メディアタイプ、ピンカテゴリ、ピンメディウムに指定した値と完全に一致するフィルターを検索します。値が FALSE の場合、これらの項目のいずれかに NULL 値を登録しているフィルターも一致とみなされます。(実質的に、レジストリ内の NULL 値はワイルドカードとして機能します。)
メディアタイプ、ピンカテゴリ、ピンメディウムに NULL を指定した場合、そのパラメーターについてはすべてのフィルターが一致とみなされます。
ピンがメディアタイプをまったく登録していなかった場合、このメソッドはそのピンをメディアタイプの一致とはみなしません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFilterMapper2 "{B79BB0B0-33C1-11D1-ABE1-00A0C905F375}" #usecom global IFilterMapper2 IID_IFilterMapper2 "{}" #comfunc global IFilterMapper2_CreateCategory 3 var,int,wstr #comfunc global IFilterMapper2_UnregisterFilter 4 var,wstr,var #comfunc global IFilterMapper2_RegisterFilter 5 var,wstr,sptr,var,wstr,var #comfunc global IFilterMapper2_EnumMatchingFilters 6 sptr,int,int,int,int,int,var,var,var,int,int,int,var,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IFilterMapper2 "{B79BB0B0-33C1-11D1-ABE1-00A0C905F375}" #usecom global IFilterMapper2 IID_IFilterMapper2 "{}" #comfunc global IFilterMapper2_CreateCategory 3 sptr,int,wstr #comfunc global IFilterMapper2_UnregisterFilter 4 sptr,wstr,sptr #comfunc global IFilterMapper2_RegisterFilter 5 sptr,wstr,sptr,sptr,wstr,sptr #comfunc global IFilterMapper2_EnumMatchingFilters 6 sptr,int,int,int,int,int,sptr,sptr,sptr,int,int,int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。