Compartir a través de


Función MFTranscodeGetAudioOutputAvailableTypes (mfidl.h)

Obtiene una lista de formatos de salida de un codificador de audio.

Sintaxis

HRESULT MFTranscodeGetAudioOutputAvailableTypes(
  [in]  REFGUID       guidSubType,
  [in]  DWORD         dwMFTFlags,
  [in]  IMFAttributes *pCodecConfig,
  [out] IMFCollection **ppAvailableTypes
);

Parámetros

[in] guidSubType

Especifica el subtipo del medio de salida. El codificador usa este valor como filtro cuando enumera los tipos de salida disponibles. Para obtener información sobre los subtipos de audio, vea GUID de subtipo de audio.

[in] dwMFTFlags

OR bit a bit de cero o más marcas de la enumeración _MFT_ENUM_FLAG.

[in] pCodecConfig

Puntero a la interfaz IMFAttributes de un almacén de atributos. El almacén de atributos especifica los valores de configuración del codificador. Este parámetro puede ser NULL. El almacén de atributos puede contener cualquiera de los siguientes atributos.

Valor Significado
MFT_FIELDOFUSE_UNLOCK_Attribute
Establezca este atributo para desbloquear un codificador que tenga descripciones de campo de uso.
MF_TRANSCODE_ENCODINGPROFILE
Especifica un perfil de conformidad de dispositivo para un codificador de Windows Media.
MF_TRANSCODE_QUALITYVSSPEED
Establece el equilibrio entre la calidad de codificación y la velocidad de codificación.

[out] ppAvailableTypes

Recibe un puntero a la interfaz IMFCollection de un objeto de colección que contiene una lista de tipos de medios de audio preferidos. La colección contiene punteros IMFMediaType . El autor de la llamada debe liberar el puntero de interfaz.

Valor devuelto

La función devuelve un HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código devuelto Descripción
S_OK
La llamada de función se realizó correctamente.
MF_E_TRANSCODE_NO_MATCHING_ENCODER
No se pudo encontrar un codificador que coincida con los valores de configuración especificados.

Comentarios

Esta función supone que el codificador se usará en su modo de codificación predeterminado, que suele ser una codificación constante de velocidad de bits (CBR). Por lo tanto, es posible que los tipos devueltos por la función no funcionen con otros modos, como la codificación de velocidad de bits variable (VBR).

Internamente, esta función funciona llamando a MFTEnumEx para buscar un codificador coincidente y, a continuación, llamar a IMFTransform::GetOutputAvailableType para obtener los tipos de salida del codificador.

Ejemplos

En el ejemplo siguiente se crea un perfil de transcodificación para Audio de Windows Media (WMA).

template <class Q>
HRESULT GetCollectionObject(IMFCollection *pCollection, DWORD index, Q **ppObj)
{
    IUnknown *pUnk;
    HRESULT hr = pCollection->GetElement(index, &pUnk);
    if (SUCCEEDED(hr))
    {
        hr = pUnk->QueryInterface(IID_PPV_ARGS(ppObj));
        pUnk->Release();
    }
    return hr;
}

HRESULT CreateTranscodeProfile(IMFTranscodeProfile **ppProfile)
{
    IMFTranscodeProfile *pProfile = NULL;     // Transcode profile.
    IMFCollection   *pAvailableTypes = NULL;  // List of audio media types.
    IMFMediaType    *pAudioType = NULL;       // Audio media type.
    IMFAttributes   *pAudioAttrs = NULL;      // Copy of the audio media type.
    IMFAttributes   *pContainer = NULL;       // Container attributes.

    DWORD dwMTCount = 0;
    
    // Create an empty transcode profile.
    HRESULT hr = MFCreateTranscodeProfile(&pProfile);
    if (FAILED(hr))
    {
        goto done;
    }

    // Get output media types for the Windows Media audio encoder.

    // Enumerate all codecs except for codecs with field-of-use restrictions.
    // Sort the results.

    DWORD dwFlags = 
        (MFT_ENUM_FLAG_ALL & (~MFT_ENUM_FLAG_FIELDOFUSE)) | 
        MFT_ENUM_FLAG_SORTANDFILTER;

    hr = MFTranscodeGetAudioOutputAvailableTypes(MFAudioFormat_WMAudioV9, 
        dwFlags, NULL, &pAvailableTypes);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pAvailableTypes->GetElementCount(&dwMTCount);
    if (FAILED(hr))
    {
        goto done;
    }
    if (dwMTCount == 0)
    {
        hr = E_FAIL;
        goto done;
    }

    // Get the first audio type in the collection and make a copy.
    hr = GetCollectionObject(pAvailableTypes, 0, &pAudioType);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = MFCreateAttributes(&pAudioAttrs, 0);       
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pAudioType->CopyAllItems(pAudioAttrs);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the audio attributes on the profile.
    hr = pProfile->SetAudioAttributes(pAudioAttrs);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the container attributes.
    hr = MFCreateAttributes(&pContainer, 1);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pContainer->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_ASF);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pProfile->SetContainerAttributes(pContainer);
    if (FAILED(hr))
    {
        goto done;
    }

    *ppProfile = pProfile;
    (*ppProfile)->AddRef();

done:
    SafeRelease(&pProfile);
    SafeRelease(&pAvailableTypes);
    SafeRelease(&pAudioType);
    SafeRelease(&pAudioAttrs);
    SafeRelease(&pContainer);
    return hr;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado mfidl.h
Library Mf.lib
Archivo DLL Mf.dll

Consulte también

IMFCollection::GetElement

MFCreateTranscodeProfile

Funciones de Media Foundation

Tutorial: Codificación de un archivo WMA