Функция 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
GUID, указывающий категорию перечисляемых MFT. Список категорий 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 из этого списка, вызовите CoCreateInstance с одним из идентификаторов CLSID. Чтобы получить сведения о конкретном MFT из clSID, вызовите MFTGetInfo. Вызывающий объект должен освободить память для массива, вызвав CoTaskMemFree.
[out] pcMFTs
Получает количество элементов в массиве ppclsidMFT . Значение может быть равно нулю.
Возвращаемое значение
Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Комментарии
Эта функция возвращает список всех MFT в указанной категории, которые соответствуют условиям поиска, заданным параметрами pInputType, pOutputType и pAttributes . Любой из этих параметров может иметь значение NULL.
Если никакие MFT не соответствуют критериям, метод выполняется успешно, но возвращает нулевое значение в 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 |
Header | mfapi.h |
Библиотека | Mfplat.lib |
DLL | Mfplat.dll |
См. также раздел
Добавление декодера в топологию