MFTEnum 函数 (mfapi.h)
枚举注册表中 (MRT) 媒体基础转换。
从 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
);
parameters
[in] guidCategory
指定要枚举的 MCT 类别的 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
接收指向 CLSD 数组的指针。 若要从此列表创建 MFT,请使用 CLSED 之一调用 CoCreateInstance 。 若要从其 CLSID 获取有关特定 MFT 的信息,请调用 MFTGetInfo。 调用方必须通过调用 CoTaskMemFree 释放数组的内存。
[out] pcMFTs
接收 ppclsidMFT 数组中的元素数。 该值可以为零。
返回值
如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。
注解
此函数返回指定类别中与 pInputType、pOutputType 和 pAttributes 参数给定的搜索条件匹配的所有 MCT 的列表。 这些参数中的任何一个都可以为 NULL。
如果没有 MCT 与条件匹配,该方法成功,但在 pcMFT 中返回值零。
示例
若要查找解码器,请将 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 |