Función MFTEnum (mfapi.h)
Enumera las transformaciones de Media Foundation (MFT) en el Registro.
A partir de Windows 7, las aplicaciones deben usar la función MFTEnumEx en su lugar.
Sintaxis
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 la categoría de MFP que se va a enumerar. Para obtener una lista de las categorías de MFT, consulte MFT_CATEGORY.
[in] Flags
Reservado. Debe ser cero.
[in] pInputType
Puntero a una estructura de MFT_REGISTER_TYPE_INFO que especifica un tipo de medio de entrada que debe coincidir.
Este parámetro puede ser NULL. Si es NULL, se buscarán coincidencias con todos los tipos de entrada.
[in] pOutputType
Puntero a una estructura de MFT_REGISTER_TYPE_INFO que especifica un tipo de medio de salida que debe coincidir.
Este parámetro puede ser NULL. Si es NULL, se buscarán coincidencias con todos los tipos de salida.
[in] pAttributes
Reservado. Se establece en NULL.
[out] ppclsidMFT
Recibe un puntero a una matriz de CLSID. Para crear un MFT a partir de esta lista, llame a CoCreateInstance con uno de los CLSID. Para obtener información sobre un MFT determinado desde su CLSID, llame a MFTGetInfo. El llamador debe liberar la memoria de la matriz llamando a CoTaskMemFree.
[out] pcMFTs
Recibe el número de elementos de la matriz ppclsidMFT . El valor puede ser cero.
Valor devuelto
Si esta función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.
Comentarios
Esta función devuelve una lista de todas las MFP de la categoría especificada que coinciden con los criterios de búsqueda proporcionados por los parámetros pInputType, pOutputType y pAttributes . Cualquiera de esos parámetros puede ser NULL.
Si no hay MFP que coincidan con los criterios, el método se realiza correctamente, pero devuelve el valor cero en pcMFT.
Ejemplos
Para buscar un descodificador, establezca guidCategory en MFT_CATEGORY_AUDIO_DECODER o MFT_CATEGORY_VIDEO_DECODER y especifique el formato de codificación en pInputType. Normalmente, establecería pOutputType en NULL en este 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 buscar un codificador, establezca guidCategory en MFT_CATEGORY_AUDIO_ENCODER o MFT_CATEGORY_VIDEO_ENCODER y especifique el formato de codificación en pOutputType. Normalmente, establecería pInputType en NULL en este 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 compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | mfapi.h |
Library | Mfplat.lib |
Archivo DLL | Mfplat.dll |
Consulte también
Adición de un descodificador a una topología