Share via


Creación de un codificador mediante CoCreateInstance

Para convertir archivos multimedia en formato ASF, puedes usar codificadores de Windows Media. Para usar estos codificadores, deben estar registrados en el sistema. Los codificadores se implementan como transformaciones (MFT) de Media Foundation y deben exponer la interfaz IMFTransform. En este tema se describe cómo una aplicación puede obtener un puntero a la interfaz IMFTransform del codificador MFT necesario y crear una instancia de ella para su uso.

Para obtener información sobre el registro del codificador, consulte Creación de instancias de un codificador MFT.

Uso de la interfaz IMFTransform de un codificador

Tras el registro correcto de codificadores de Windows Media con el sistema, una aplicación puede enumerar los codificadores mediante una llamada a MFTEnum. Para buscar el codificador correcto, debe especificar lo siguiente:

  • GUID que representa la categoría, que es MFT_CATEGORY_AUDIO_ENCODER o MFT_CATEGORY_VIDEO_ENCODER.

  • Formato que se va a coincidir. Esto se establece en la estructura MFT_REGISTER_TYPE_INFO que especifica el tipo principal y el subtipo del tipo de medio en el que el codificador generará muestras. Esta estructura se pasa en el parámetro pOutputType . Para obtener información sobre los tipos admitidos, vea GUID de tipo multimedia.

    Nota

    La información del tipo de entrada en el parámetro pInputType no es necesaria. Esto se debe a que el tipo de entrada se conoce para la aplicación y el codificador espera que el flujo de entrada esté en un formato sin comprimir.

     

MFTEnum devuelve una matriz de punteros IMFTransform para los MFP del codificador que coinciden con los criterios de búsqueda. Puede crear una instancia de un codificador llamando a la función COM CoCreateInstance y pasando el CLSID del codificador que desea usar. Esta función devuelve un puntero a la interfaz IMFTransform que representa el codificador. Para obtener más información sobre esta llamada de función, consulte la documentación de Windows SDK para el modelo de objetos componentes (COM).

Ejemplo de creación de codificador

En el ejemplo de código siguiente se muestra cómo crear un codificador de audio o vídeo.

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;
}

Creación de instancias de un codificador MFT

Codificadores de Windows Media