Compartilhar via


Função MFTranscodeGetAudioOutputAvailableTypes (mfidl.h)

Obtém uma lista de formatos de saída de um codificador de áudio.

Sintaxe

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

Parâmetros

[in] guidSubType

Especifica o subtipo da mídia de saída. O codificador usa esse valor como um filtro quando está enumerando os tipos de saída disponíveis. Para obter informações sobre os subtipos de áudio, consulte GUIDs de subtipo de áudio.

[in] dwMFTFlags

OR bit a bit de zero ou mais sinalizadores da enumeração _MFT_ENUM_FLAG.

[in] pCodecConfig

Um ponteiro para a interface IMFAttributes de um repositório de atributos. O repositório de atributos especifica as definições de configuração do codificador. Este parâmetro pode ser NULL. O repositório de atributos pode conter qualquer um dos atributos a seguir.

Valor Significado
MFT_FIELDOFUSE_UNLOCK_Attribute
Defina esse atributo para desbloquear um codificador que tenha descrições de campo de uso.
MF_TRANSCODE_ENCODINGPROFILE
Especifica um perfil de conformidade do dispositivo para um codificador do Windows Media.
MF_TRANSCODE_QUALITYVSSPEED
Define a compensação entre a qualidade da codificação e a velocidade de codificação.

[out] ppAvailableTypes

Recebe um ponteiro para a interface IMFCollection de um objeto de coleção que contém uma lista de tipos de mídia de áudio preferenciais. A coleção contém ponteiros IMFMediaType . O chamador deve liberar o ponteiro da interface.

Retornar valor

A função retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Código de retorno Descrição
S_OK
A chamada de função foi bem-sucedida.
MF_E_TRANSCODE_NO_MATCHING_ENCODER
Falha ao localizar um codificador que corresponda às definições de configuração especificadas.

Comentários

Essa função pressupõe que o codificador será usado em seu modo de codificação padrão, que normalmente é a codificação CBR (taxa de bits constante). Portanto, os tipos retornados pela função podem não funcionar com outros modos, como a codificação de VBR (taxa de bits variável).

Internamente, essa função funciona chamando MFTEnumEx para localizar um codificador correspondente e, em seguida, chamando IMFTransform::GetOutputAvailableType para obter os tipos de saída do codificador.

Exemplos

O exemplo a seguir cria um perfil de transcodificação para o Windows Media Audio (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 Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho mfidl.h
Biblioteca Mf.lib
DLL Mf.dll

Confira também

IMFCollection::GetElement

MFCreateTranscodeProfile

Funções do Media Foundation

Tutorial: Codificando um arquivo WMA