Função MFTEnum (mfapi.h)
Enumera MFTs (transformações do Media Foundation) no registro.
A partir do Windows 7, os aplicativos devem usar a função MFTEnumEx .
Sintaxe
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
);
Parâmetros
[in] guidCategory
GUID que especifica a categoria de MFTs a enumerar. Para obter uma lista de categorias de MFT, consulte MFT_CATEGORY.
[in] Flags
Reservado. Deve ser zero.
[in] pInputType
Ponteiro para uma estrutura MFT_REGISTER_TYPE_INFO que especifica um tipo de mídia de entrada a ser correspondido.
Este parâmetro pode ser NULL. Se FOR NULL, todos os tipos de entrada serão correspondidos.
[in] pOutputType
Ponteiro para uma estrutura MFT_REGISTER_TYPE_INFO que especifica um tipo de mídia de saída a ser correspondido.
Este parâmetro pode ser NULL. Se FOR NULL, todos os tipos de saída serão correspondidos.
[in] pAttributes
Reservado. Defina como NULL.
[out] ppclsidMFT
Recebe um ponteiro para uma matriz de CLSIDs. Para criar um MFT nessa lista, chame CoCreateInstance com um dos CLSIDs. Para obter informações sobre um determinado MFT de seu CLSID, chame MFTGetInfo. O chamador deve liberar a memória para a matriz chamando CoTaskMemFree.
[out] pcMFTs
Recebe o número de elementos na matriz ppclsidMFT . O valor pode ser zero.
Valor retornado
Se essa função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.
Comentários
Essa função retorna uma lista de todos os MFTs na categoria especificada que correspondem aos critérios de pesquisa dados pelos parâmetros pInputType, pOutputType e pAttributes . Qualquer um desses parâmetros pode ser NULL.
Se nenhum MFTs corresponder aos critérios, o método terá êxito, mas retornará o valor zero em pcMFTs.
Exemplos
Para localizar um decodificador, defina guidCategory como MFT_CATEGORY_AUDIO_DECODER ou MFT_CATEGORY_VIDEO_DECODER e especifique o formato de codificação em pInputType. Normalmente, você definiria pOutputType como NULL nesse caso.
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;
}
Para localizar um codificador, defina guidCategory como MFT_CATEGORY_AUDIO_ENCODER ou MFT_CATEGORY_VIDEO_ENCODER e especifique o formato de codificação em pOutputType. Normalmente, você definiria pInputType como NULL nesse caso.
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;
}
Requisitos
Cliente mínimo com suporte | Windows Vista [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | mfapi.h |
Biblioteca | Mfplat.lib |
DLL | Mfplat.dll |
Confira também
Adicionando um decodificador a uma topologia