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

IFilterMapper2

COM
IIDb79bb0b0-33c1-11d1-abe1-00a0c905f375継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

フィルターの登録と登録解除を行い、レジストリ内のフィルターを検索します。

メソッド 4

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

vtbl 3 HRESULT CreateCategory(GUID* clsidCategory, DWORD dwCategoryMerit, LPWSTR Description)

CreateCategory メソッドは、新しいフィルターカテゴリをレジストリに追加します。

clsidCategoryGUID*in新しいフィルターカテゴリのクラス識別子 (CLSID)。
dwCategoryMeritDWORDinカテゴリの Merit。Merit が高いカテゴリほど先に列挙されます。
DescriptionLPWSTRinカテゴリの説明的な名前。

戻り値

成功した場合は S_OK を返します。失敗した場合は、エラーの原因を示す HRESULT 値を返します。

解説(Remarks)

フィルターグラフマネージャーは、グラフ構築処理を高速化するため、Merit 値が MERIT_DO_NOT_USE 以下のすべてのカテゴリを最初にスキップします。再生の対象とすべきでないフィルターカテゴリには、MERIT_DO_NOT_USE 以下の Merit を設定してください。

フィルターは、検索空間を絞り込むために、1 つ以上のカテゴリ (たとえば Video Compressors) に属することができます。

vtbl 4 HRESULT UnregisterFilter(GUID* pclsidCategory, LPWSTR szInstance, GUID* Filter)

UnregisterFilter メソッドは、フィルター情報をレジストリから削除します。

pclsidCategoryGUID*inフィルターを削除する対象のフィルターカテゴリを指定する GUID のアドレス。カテゴリの一覧については、Filter Categories を参照してください。
szInstanceLPWSTRinデバイスモニカーの表示名の構築に使用されるインスタンスデータ。もともと RegisterFilter メソッドに渡した値を使用してください。
FilterGUID*inフィルターのクラス識別子 (CLSID)。

戻り値

成功した場合は S_OK を返します。失敗した場合は、エラーの原因を示す HRESULT 値を返します。

解説(Remarks)

フィルターが登録されていなかった場合、このメソッドはエラーを返すことがあります。

vtbl 5 HRESULT RegisterFilter(GUID* clsidFilter, LPWSTR Name, IMoniker** ppMoniker, GUID* pclsidCategory, LPWSTR szInstance, REGFILTER2* prf2)

RegisterFilter メソッドは、フィルター情報をレジストリに追加します。

clsidFilterGUID*inフィルターのクラス識別子 (CLSID)。
NameLPWSTRinフィルターの説明的な名前。
ppMonikerIMoniker**inoutoptionalこのフィルターのデータが書き込まれる場所を決定するデバイスモニカーへのポインターのアドレス。NULL を指定できます。
pclsidCategoryGUID*inフィルターのフィルターカテゴリへのポインター。NULL の場合、既定のカテゴリは CLSID_ActiveMovieFilters になります。(Filter Categories を参照してください。)
szInstanceLPWSTRinデバイスモニカーの表示名を構築するためのインスタンスデータ。フレンドリ名、またはフィルター CLSID の文字列表現を指定できます。NULL の場合、既定でフィルター CLSID が使用されます。
prf2REGFILTER2*inフィルター情報を格納する REGFILTER2 構造体へのポインター。

戻り値

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

リターンコード 説明
S_OK
成功しました。
VFW_E_BAD_KEY
レジストリキーを取得できませんでした。

解説(Remarks)

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

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

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

それ以外の場合、メソッドは新しいモニカーを作成します。ppMoniker が非 NULL の場合、メソッドは *ppMoniker が新しいモニカーを指すように設定します。アプリケーションはこのモニカーを使用して、プロパティバッグに追加のプライベートな値を書き込むことができます。インターフェイスは必ず解放してください。

モニカーの提供も受け取りも行わない場合は、ppMonikerNULL に設定してください。

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

EnumMatchingFilters メソッドは、指定された要件を満たす登録済みフィルターを列挙します。

ppEnumIEnumMoniker**outIEnumMoniker インターフェイスへのポインターを受け取ります。このインターフェイスポインターを使用して、列挙からフィルターモニカーを取得します。呼び出し側はインターフェイスを解放する必要があります。
dwFlagsDWORDin予約済みです。0 を指定する必要があります。
bExactMatchBOOLin完全一致が必要かどうかを示すブール値。詳細については「解説」を参照してください。
dwMeritDWORDin最小の Merit 値。列挙では、これより小さい Merit 値を持つフィルターは除外されます。Merit 値の一覧については、Merit を参照してください。dwMeritMERIT_DO_NOT_USE より大きい場合、列挙では、カテゴリの Merit が MERIT_DO_NOT_USE 以下であるフィルターも除外されます。(Filter Categories を参照してください。)
bInputNeededBOOLinフィルターが入力ピンを持つ必要があるかどうかを示すブール値。値が TRUE の場合、フィルターは少なくとも 1 つの入力ピンを持つ必要があります。
cInputTypesDWORDinpInputTypes で指定される入力メディアタイプの数。
pInputTypesGUID*inoptional一致させる入力ピンのメジャータイプとサブタイプを指定する GUID のペアの配列へのポインター。配列のサイズは 2 * cInputTypes です。この配列は NULL にできます。配列の各メンバーには、任意のタイプに一致する GUID_NULL を指定できます。(Media Types を参照してください。)
pMedInREGPINMEDIUM*inoptional入力ピンのメディウムを指定する REGPINMEDIUM 構造体へのポインター。不要な場合は NULL を設定します。
pPinCategoryInGUID*inoptional入力ピンのカテゴリを指定する GUID へのポインター。(Pin Property Set を参照してください。) 不要な場合は NULL を設定します。
bRenderBOOLinフィルターがその入力をレンダリングする必要があるかどうかを指定するブール値。TRUE の場合、指定されたフィルターはその入力をレンダリングする必要があります。(この値は、フィルターのピンに関する情報の登録に使用される REGFILTERPINS 構造体の bRendered フィールドに対応します。)
bOutputNeededBOOLinフィルターが出力ピンを持つ必要があるかどうかを指定するブール値。TRUE の場合、フィルターは少なくとも 1 つの出力ピンを持つ必要があります。
cOutputTypesDWORDinpOutputTypes で指定される出力メディアタイプの数。
pOutputTypesGUID*inoptional一致させる出力ピンのメジャータイプとサブタイプを指定する GUID のペアの配列へのポインター。配列のサイズは 2 * cOutputTypes です。この配列は NULL にできます。配列の各メンバーには、任意のタイプに一致する GUID_NULL を指定できます。
pMedOutREGPINMEDIUM*inoptional出力ピンのメディウムを指定する REGPINMEDIUM 構造体へのポインター。不要な場合は NULL を設定します。
pPinCategoryOutGUID*inoptional出力ピンのカテゴリを指定する GUID へのポインター。(Pin Property Set を参照してください。) 不要な場合は NULL を設定します。

戻り値

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

リターンコード 説明
S_OK
成功
E_FAIL
失敗
E_OUTOFMEMORY
メモリ不足
E_POINTER
NULL ポインター引数

解説(Remarks)

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

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

DWORD cInTypes = 1;

出力ピンについては、同様の配列を pOutputTypes パラメーターに渡し、GUID ペアの数を cOutputTypes パラメーターに指定します。

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

メディアタイプ、ピンカテゴリ、ピンメディウムに NULL を指定した場合、そのパラメーターについてはすべてのフィルターが一致とみなされます。

ピンがメディアタイプをまったく登録していなかった場合、このメソッドはそのピンをメディアタイプの一致とはみなしません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。