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.

Nota Windows Vista y Windows Server 2008: este parámetro puede especificar un puntero a la interfaz IMFAttributes de un almacén de atributos. La función MFTEnum coincide con los atributos de este objeto con los atributos almacenados en el Registro. (Los atributos del Registro se especifican en el parámetro pAttributes de la función MFTRegister ). En los resultados de la enumeración, solo se devuelven MFP con atributos coincidentes.
 
Nota Windows 7 y versiones posteriores: este parámetro se omite.
 

[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

MFTEnumEx

MFTRegister

Funciones de Media Foundation

Transformaciones de Media Foundation

Registro y enumeración de MFP