Delen via


Een encoder maken met CoCreateInstance

Voor het converteren van mediabestanden naar ASF-indeling kunt u Windows Media-coderingsprogramma's gebruiken. Als u deze encoders wilt gebruiken, moeten ze worden geregistreerd bij het systeem. Encoders worden geïmplementeerd als Media Foundation transformeert (MMFT's) en moet de IMFTransform-interface beschikbaar maken. In dit onderwerp wordt beschreven hoe een toepassing een aanwijzer kan krijgen naar de IMFTransform-interface van de vereiste MFT-encoder en deze kan instantiëren voor gebruik.

Zie Instantiëren van een Encoder MFT-voor meer informatie over encoderregistratie.

De IMFTransform-interface van een encoder gebruiken

Wanneer de registratie van Windows Media-encoders met het systeem is geslaagd, kan een toepassing de encoders opsommen door MFTEnum-aan te roepen. Als u naar de juiste encoder wilt zoeken, moet u het volgende opgeven:

  • De GUID die de categorie vertegenwoordigt, is ofwel MFT_CATEGORY_AUDIO_ENCODER of MFT_CATEGORY_VIDEO_ENCODER.

  • Het formaat dat overeenkomt. Dit is ingesteld in de MFT_REGISTER_TYPE_INFO structuur waarmee het primaire type en subtype van het mediatype worden opgegeven waarin de encoder voorbeelden genereert. Deze structuur wordt doorgegeven in de parameter pOutputType. Zie mediatype-GUID'svoor meer informatie over de ondersteunde typen.

    Notitie

    De invoertypegegevens in de parameter pInputType zijn niet vereist. Dit komt doordat het invoertype bekend is bij de toepassing en de encoder verwacht dat de invoerstroom een niet-gecomprimeerde indeling heeft.

     

MFTEnum- retourneert een matrix van IMFTransform pointers voor de encoder-MMFT's die voldoen aan de zoekcriteria. U kunt een encoder instantiëren door de COM-functie aan te roepen CoCreateInstance en de CLSID door te geven van de encoder die u wilt gebruiken. Deze functie retourneert een aanwijzer naar de IMFTransform interface die de encoder vertegenwoordigt. Zie de Windows SDK-documentatie voor het Component Object Model (COM) voor meer informatie over deze functieoproep.

Voorbeeld van het maken van encoders

In het volgende codevoorbeeld ziet u hoe u een audio- of videocoderingsprogramma maakt.

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

Een Encoder MFT- instantiëren

Windows Media Encoders