MFTEnum 関数 (mfapi.h)
レジストリ内の Media Foundation 変換 (MFT) を列挙します。
Windows 7 以降では、アプリケーションでは代わりに MFTEnumEx 関数を使用する必要があります。
構文
HRESULT MFTEnum(
[in] GUID guidCategory,
[in] UINT32 Flags,
[in] MFT_REGISTER_TYPE_INFO *pInputType,
[in] MFT_REGISTER_TYPE_INFO *pOutputType,
[in] IMFAttributes *pAttributes,
[out] CLSID **ppclsidMFT,
[out] UINT32 *pcMFTs
);
パラメーター
[in] guidCategory
列挙する MFT のカテゴリを指定する GUID。 MFT カテゴリの一覧については、「 MFT_CATEGORY」を参照してください。
[in] Flags
予約済み。 ゼロを指定してください。
[in] pInputType
一致する入力メディアの種類を指定する MFT_REGISTER_TYPE_INFO 構造体へのポインター。
このパラメーターは、NULL でもかまいません。 NULL の場合、すべての入力型が一致します。
[in] pOutputType
一致する出力メディアの種類を指定する MFT_REGISTER_TYPE_INFO 構造体へのポインター。
このパラメーターは、NULL でもかまいません。 NULL の場合、すべての出力型が一致します。
[in] pAttributes
予約済み。 NULL に設定します。
[out] ppclsidMFT
CLSID の配列へのポインターを受け取ります。 この一覧から MFT を作成するには、CLSID のいずれかを使用して CoCreateInstance を呼び出します。 CLSID から特定の MFT に関する情報を取得するには、 MFTGetInfo を呼び出します。 呼び出し元は 、CoTaskMemFree を呼び出して、配列のメモリを解放する必要があります。
[out] pcMFTs
ppclsidMFT 配列内の要素の数を受け取ります。 値には 0 を指定できます。
戻り値
この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。
解説
この関数は、pInputType、pOutputType、および pAttributes パラメーターによって指定された検索条件に一致する、指定されたカテゴリ内のすべての MFT の一覧を返します。 これらのパラメーターは、 いずれも NULL にすることができます。
条件に一致する MFT がない場合、メソッドは成功しますが、 pcMFT では値 0 を返します。
例
デコーダーを検索するには、 guidCategory を MFT_CATEGORY_AUDIO_DECODER または MFT_CATEGORY_VIDEO_DECODER に設定し、 pInputType でエンコード形式を指定します。 この場合、通常 、pOutputType を NULL に設定します。
HRESULT FindDecoder(
const GUID& subtype, // Subtype
BOOL bAudio, // TRUE for audio, FALSE for video
IMFTransform **ppDecoder // Receives a pointer to the decoder.
)
{
HRESULT hr = S_OK;
UINT32 count = 0;
CLSID *ppCLSIDs = NULL;
MFT_REGISTER_TYPE_INFO info = { 0 };
info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
info.guidSubtype = subtype;
hr = MFTEnum(
bAudio ? MFT_CATEGORY_AUDIO_DECODER : MFT_CATEGORY_VIDEO_DECODER,
0, // Reserved
&info, // Input type
NULL, // Output type
NULL, // Reserved
&ppCLSIDs,
&count
);
if (SUCCEEDED(hr) && count == 0)
{
hr = MF_E_TOPO_CODEC_NOT_FOUND;
}
// Create the first decoder in the list.
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(ppCLSIDs[0], NULL,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppDecoder));
}
CoTaskMemFree(ppCLSIDs);
return hr;
}
エンコーダーを検索するには、 guidCategory を MFT_CATEGORY_AUDIO_ENCODER または MFT_CATEGORY_VIDEO_ENCODER に設定し、エンコード形式を pOutputType で指定します。 この場合、通常 、pInputType を NULL に設定します。
HRESULT FindEncoder(
const GUID& subtype,
BOOL bAudio,
IMFTransform **ppEncoder
)
{
HRESULT hr = S_OK;
UINT32 count = 0;
CLSID *ppCLSIDs = NULL;
MFT_REGISTER_TYPE_INFO info = { 0 };
info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
info.guidSubtype = subtype;
hr = MFTEnum(
bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
0, // Reserved
NULL, // Input type
&info, // Output type
NULL, // Reserved
&ppCLSIDs,
&count
);
if (SUCCEEDED(hr) && count == 0)
{
hr = MF_E_TOPO_CODEC_NOT_FOUND;
}
// Create the first encoder in the list.
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(ppCLSIDs[0], NULL,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
}
CoTaskMemFree(ppCLSIDs);
return hr;
}
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | mfapi.h |
Library | Mfplat.lib |
[DLL] | Mfplat.dll |