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

IMFPluginControl

COM
IID5c6c44bf-1db6-435b-9249-e8cd10fdec96継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Microsoft Media Foundation において、メディアソースおよびトランスフォームを列挙する方法を制御します。(IMFPluginControl)

解説(Remarks)

Media Foundation は、一連の組み込みメディアソースおよびデコーダーを提供します。アプリケーションは、次の方法でこれらを列挙できます。

アプリケーションは、これらのオブジェクトを間接的に列挙する場合もあります。たとえば、アプリケーションがトポロジローダーを使用して部分的なトポロジを解決する場合、トポロジローダーは必要なデコーダーを見つけるために MFTEnumEx を呼び出します。

サードパーティは、独自のカスタムメディアソースおよびデコーダーを実装し、他のアプリケーションが使用できるように列挙対象として登録できます。

列挙順序を制御するために、Media Foundation はプロセス全体で 2 つの CLSID リスト、すなわち優先リストとブロックリストを保持します。CLSID が優先リストに含まれるオブジェクトは、列挙順序の先頭に現れます。CLSID がブロックリストに含まれるオブジェクトは列挙されません。

これらのリストは、最初はレジストリから設定されます。アプリケーションは IMFPluginControl インターフェイスを使用して、現在のプロセスに対してリストを変更できます。

優先リストには一連のキー/値ペアが含まれ、キーは文字列、値は CLSID です。これらのキー/値ペアは次のように定義されます。

次の例は、さまざまな種類のキーを示しています。 優先リストをキー名で検索するには、IMFPluginControl::GetPreferredClsid メソッドを呼び出します。リスト全体を列挙するには、IMFPluginControl::GetPreferredClsidByIndex メソッドをループ内で呼び出します。

ブロックリストには一連の CLSID が含まれます。リスト全体を列挙するには、IMFPluginControl::GetDisabledByIndex メソッドをループ内で呼び出します。特定の CLSID がリストに含まれているかどうかを確認するには、IMFPluginControl::IsDisabled メソッドを呼び出します。

メソッド 6

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

vtbl 3 HRESULT GetPreferredClsid(DWORD pluginType, LPWSTR selector, GUID* clsid)

指定したキー名に一致するクラス識別子 (CLSID) を優先リストから検索します。

pluginTypeDWORDinオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。
selectorLPWSTRin一致させるキー名。キー名の形式の詳細については、IMFPluginControl の「解説」セクションを参照してください。
clsidGUID*out優先リストから取得した CLSID を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻りコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効です。
HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
このキーに一致する CLSID は見つかりませんでした。
vtbl 4 HRESULT GetPreferredClsidByIndex(DWORD pluginType, DWORD index, LPWSTR* selector, GUID* clsid)

IMFPluginControl::GetPreferredClsidByIndex (mfobjects.h) メソッドは、インデックス値で指定した優先リスト内のクラス識別子 (CLSID) を取得します。

pluginTypeDWORDin列挙するオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。
indexDWORDin取得する CLSID の 0 から始まるインデックス。
selectorLPWSTR*outCLSID に関連付けられたキー名を受け取ります。呼び出し側は、CoTaskMemFree 関数を呼び出して、返された文字列のメモリを解放する必要があります。キー名の形式の詳細については、IMFPluginControl の「解説」セクションを参照してください。
clsidGUID*out指定したインデックスの CLSID を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻りコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効です。
HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS)
index パラメーターが範囲外です。
vtbl 5 HRESULT SetPreferredClsid(DWORD pluginType, LPWSTR selector, GUID* clsid)

クラス識別子 (CLSID) を優先リストに追加するか、リストから削除します。(IMFPluginControl.SetPreferredClsid)

pluginTypeDWORDinオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。
selectorLPWSTRinCLSID のキー名。キー名の形式の詳細については、IMFPluginControl の「解説」セクションを参照してください。
clsidGUID*inoptionalリストに追加する CLSID。このパラメーターが NULL の場合、selector パラメーターで指定されたキー/値エントリがリストから削除されます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

優先リストは、呼び出し側のプロセスに対してグローバルです。このメソッドを呼び出しても、他のプロセスのリストには影響しません。

vtbl 6 HRESULT IsDisabled(DWORD pluginType, GUID* clsid)

クラス識別子 (CLSID) がブロックリストに含まれているかどうかを照会します。(IMFPluginControl.IsDisabled)

pluginTypeDWORDin照会対象のオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。
clsidGUID*in検索する CLSID。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻りコード 説明
S_OK
指定した CLSID はブロックリストに含まれています。
E_INVALIDARG
引数が無効です。
HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
指定した CLSID はブロックリストに含まれていません。
vtbl 7 HRESULT GetDisabledByIndex(DWORD pluginType, DWORD index, GUID* clsid)

IMFPluginControl::GetDisabledByIndex (mfobjects.h) は、ブロックリストからクラス識別子 (CLSID) を取得します。

pluginTypeDWORDin列挙するオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。
indexDWORDin取得する CLSID の 0 から始まるインデックス。
clsidGUID*out指定したインデックスの CLSID を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻りコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効です。
HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS)
index パラメーターが範囲外です。
vtbl 8 HRESULT SetDisabled(DWORD pluginType, GUID* clsid, BOOL disabled)

クラス識別子 (CLSID) をブロックリストに追加するか、リストから削除します。(IMFPluginControl.SetDisabled)

pluginTypeDWORDinオブジェクトの種類を指定する MF_Plugin_Type 列挙体のメンバー。
clsidGUID*in追加または削除する CLSID。
disabledBOOLinCLSID を追加するか削除するかを指定します。値が TRUE の場合、メソッドは CLSID をブロックリストに追加します。それ以外の場合、メソッドはリストから削除します。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻りコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効です。

解説(Remarks)

ブロックリストは、呼び出し側のプロセスに対してグローバルです。このメソッドを呼び出しても、他のプロセスのリストには影響しません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFPluginControl "{5C6C44BF-1DB6-435B-9249-E8CD10FDEC96}"
#usecom global IMFPluginControl IID_IMFPluginControl "{}"
#comfunc global IMFPluginControl_GetPreferredClsid         3 int,wstr,var
#comfunc global IMFPluginControl_GetPreferredClsidByIndex  4 int,int,var,var
#comfunc global IMFPluginControl_SetPreferredClsid         5 int,wstr,var
#comfunc global IMFPluginControl_IsDisabled                6 int,var
#comfunc global IMFPluginControl_GetDisabledByIndex        7 int,int,var
#comfunc global IMFPluginControl_SetDisabled               8 int,var,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。