Partilhar via


Enumerando tipos de áudio para modos de codificação específicos (Microsoft Media Foundation)

Os tipos de mídia de entrada e saída aceitos pelo codificador de áudio são muito estruturados. Você deve obter os tipos de saída suportados chamando método IMediaObject::GetOutputType ou IMFTransform::GetOutputType. Depois de obter um tipo de saída, você não deve alterá-lo.

Se você quiser usar um modo de codificação diferente de CBR de uma passagem, você deve definir o modo e, em seguida, enumerar os tipos de saída para esse modo; O codificador altera os tipos de saída suportados dependendo do modo definido. As propriedades que controlam o modo de codificação são MFPKEY_VBRENABLED e MFPKEY_PASSESUSED. Quando o modo é definido no codificador, você deve enumerar e selecionar um tipo de saída, usando-o sem alteração, assim como no CBR.

Identificando tipos de VBR com base na qualidade

O procedimento para identificar tipos VBR baseados em qualidade depende se o codificador está agindo como um DirectX Media Object (DMO) ou agindo como um Media Foundation Transform (MFT). Para obter informações sobre quando um codificador atua como DMO ou MFT, consulte as páginas de referência de codec individuais em Codec Objects.

Quando um codificador de áudio está agindo como um DMO e você configura o codificador para usar VBR de uma passagem, ele enumera todos os tipos de saída suportados. No entanto, você normalmente desejará selecionar um tipo VBR de passagem única com base no parâmetro de qualidade. O codificador coloca o valor de qualidade para tipos de output VBR de uma passagem no membro nAvgBytesPerSec da estrutura WAVEFORMATEX apontada por DMO_MEDIA_TYPE.pbFormat.

Este valor é armazenado no seguinte formato: 0x7FFFFFXX, onde XX é o valor de qualidade (de 0 a 100). Por exemplo, o valor nAvgBytesPerSec de 0x7FFFFF62 especifica o nível de qualidade 98 (0x62 = 98).

O exemplo a seguir mostra como verificar o nível de qualidade de um formato quando o codificador está agindo como um DMO.

void ShowQuality(WAVEFORMATEX* pWave)
{
    // Store the average bytes per second in a local variable
    // with a more manageable name.
    DWORD dwBps = pWave->nAvgBytesPerSec;

    // Verify that the value is a VBR quality level by using 
    // a bitmask to check for the bit pattern 0x7FFFFFXX. 
    if(dwBps & 0x7FFFFF00 == 0x7FFFFF00)
        printf("VBR Quality: %d%%\n",(dwBps & 0x000000FF));
    else // Not a valid VBR quality value.
        printf("Not a valid one-pass VBR audio format.\n");
}

Quando o codificador atua como um MFT e enumera um tipo de saída numa chamada para GetAvailableOutputType, pode consultar o MFT sobre a propriedade MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY. O valor retornado indica a qualidade VBR do tipo de mídia de saída retornado mais recentemente. Em seguida, você pode usar esse valor para definir a propriedade MFPKEY_DESIRED_VBRQUALITY do codificador.

Definindo restrições de pico

Para VBR de qualidade (uma passagem) e VBR de duas passagens sem restrições, nenhuma configuração adicional é necessária após a recuperação do tipo de saída. Para usar VBR com restrição de pico, recupere um tipo de saída com VBR habilitado e duas passagens definidas. Este tipo, sem alteração, descreve configurações VBR sem restrições. Para definir restrições de pico, defina as propriedades MFPKEY_RMAX e MFPKEY_BMAX.

Configurando a codificação de áudio

Localizando tipos de saída de codificador de áudio

Usando codificação Two-Pass

Usando a codificação VBR