Condividi tramite


Creazione di un codificatore tramite CoCreateInstance

Per convertire i file multimediali in formato ASF, è possibile usare codificatori Windows Media. Per usare questi codificatori, è necessario registrarli nel sistema. I codificatori vengono implementati come trasformazioni di Media Foundation e devono esporre l'interfaccia IMFTransform. Questo argomento descrive come un'applicazione può ottenere un puntatore all'interfaccia IMFTransform del codificatore MFT richiesto e crearne un'istanza per l'uso.

Per informazioni sulla registrazione del codificatore, vedere Creazione di un'istanza di un codificatore MFT.

Uso dell'interfaccia IMFTransform di un codificatore

Al termine della registrazione dei codificatori Windows Media con il sistema, un'applicazione può enumerare i codificatori chiamando MFTEnum. Per cercare il codificatore corretto, è necessario specificare quanto segue:

  • GUID che rappresenta la categoria, ovvero MFT_CATEGORY_AUDIO_ENCODER o MFT_CATEGORY_VIDEO_ENCODER.

  • Formato da trovare. Questa impostazione viene impostata nella struttura MFT_REGISTER_TYPE_INFO che specifica il tipo principale e il sottotipo del tipo di supporto in cui verrà generato il codificatore. Questa struttura viene passata nel parametro pOutputType . Per informazioni sui tipi supportati, vedere GUID dei tipi multimediali.

    Nota

    Le informazioni sul tipo di input nel parametro pInputType non sono obbligatorie. Ciò è dovuto al fatto che il tipo di input è noto all'applicazione e il codificatore prevede che il flusso di input sia in un formato non compresso.

     

MFTEnum restituisce una matrice di puntatori IMFTransform per i MFC del codificatore che corrispondono ai criteri di ricerca. È possibile creare un'istanza di un codificatore chiamando la funzione COM CoCreateInstance e passando il CLSID del codificatore che si vuole usare. Questa funzione restituisce un puntatore all'interfaccia IMFTransform che rappresenta il codificatore. Per altre informazioni su questa chiamata di funzione, vedere la documentazione di Windows SDK per il modello COM (Component Object Model).

Esempio di creazione del codificatore

L'esempio di codice seguente illustra come creare un codificatore audio o video.

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

Creazione di un'istanza di un codificatore MFT

Codificatori Windows Media