Dela via


Skapa en kodare med Hjälp av CoCreateInstance

Om du vill konvertera mediefiler till ASF-format kan du använda Windows Media-kodare. Om du vill använda dessa kodare måste de vara registrerade i systemet. Kodare implementeras som Media Foundation transformerar (MFI) och måste exponera IMFTransform-gränssnittet. Det här avsnittet beskriver hur ett program kan få en pekare till MFT-kodarens IMFTransform-gränssnitt och instansiera det för användning.

Information om kodarregistrering finns i Instantiating an Encoder MFT.

Använda en kodares IMFTransform-gränssnitt

Vid lyckad registrering av Windows Media-kodare med systemet kan ett program räkna upp kodarna genom att anropa MFTEnum. Om du vill söka efter rätt kodare måste du ange följande:

  • GUID som representerar kategorin, vilken antingen är MFT_CATEGORY_AUDIO_ENCODER eller MFT_CATEGORY_VIDEO_ENCODER.

  • Formatet att matcha Detta anges i den MFT_REGISTER_TYPE_INFO struktur som anger huvudtypen och undertypen för medietypen som kodaren ska generera exempel i. Den här strukturen skickas i parametern pOutputType. Information om vilka typer som stöds finns i MEDIA Type GUIDs.

    Notera

    Indatatypsinformationen i parametern pInputType krävs inte. Det beror på att indatatypen är känd för programmet och kodaren förväntar sig att indataströmmen ska vara i ett okomprimerat format.

     

MFTEnum returnerar en matris med IMFTransform pekare för kodarens MFT som matchar sökvillkoren. Du kan instansiera en kodare genom att anropa COM-funktionen CoCreateInstance och skicka CLSID för kodaren som du vill använda. Den här funktionen returnerar en pekare till IMFTransform- gränssnitt som representerar kodaren. Mer information om det här funktionsanropet finns i Windows SDK-dokumentationen för komponentobjektmodellen (COM).

Exempel på att skapa kodare

I följande kodexempel visas hur du skapar en ljud- eller videokodare.

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

att instansiera en kodares MFT-

Windows Media-kodare