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 tipos de saída com suporte chamando o 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 passagem única, defina o modo e enumere os tipos de saída para esse modo; o codificador altera os tipos de saída com suporte, dependendo do conjunto de modos. 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 com CBR.

Identificando tipos de VBR baseados em qualidade

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

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

Esse valor é armazenado no seguinte formato: 0x7FFFFFXX, em que 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 marcar o nível de qualidade de um formato quando o codificador está atuando 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 está atuando como um MFT e enumera um tipo de saída em uma chamada para GetAvailableOutputType, você pode consultar o MFT para a propriedade MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY . O valor retornado indica a qualidade da 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.

Configurando restrições de pico

Para VBR baseada em qualidade (uma passagem) e VBR de duas passões irrestrita, nenhuma configuração adicional é necessária após a recuperação do tipo de saída. Para usar a VBR com restrição de pico, recupere um tipo de saída com a VBR habilitada e duas passagens definidas. Esse tipo, sem alteração, descreve as configurações irrestrita da VBR. 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 do codificador de áudio

Usando a codificação Two-Pass

Usando a codificação VBR