Decodificador do AAC

O decodificador AAC do Microsoft Media Foundation é uma Transformação do Media Foundation que decodifica os seguintes perfis AAC (Advanced Audio Coding) e HE-AAC (High Efficiency AAC):

  • Perfil de Baixa Complexidade (LC) do AAC MPEG-2 (multicanal).
  • MPEG-4 HE-AAC v1 (multicanal) com núcleo AAC-LC.
  • MPEG-4 HE-AAC v2 (estéreo) com núcleo AAC-LC.

O decodificador do AAC dá suporte a fluxos brutos do AAC sem cabeçalhos e AAC em um ADTS (fluxo de transporte de dados de áudio).

A partir do Windows 8, o decodificador do AAC também dá suporte à decodificação de fluxos de transporte de áudio MPEG-4 com uma LATM (camada multiplex) e loas (camada de sincronização). Ele também pode converter um fluxo LATM/LOAS em ADTS.

Identificador de classe

O CLSID (identificador de classe) do codificador AAC é CLSID_CMSAACDecMFT, definido no arquivo de cabeçalho wmcodecdsp.h.

Tipos de mídia

O decodificador AAC dá suporte aos seguintes tipos de mídia.

Tipos de entrada

O decodificador AAC dá suporte aos seguintes subtipos de áudio:

Subtype Descrição Cabeçalho
MFAudioFormat_AAC AAC bruto ou ADTS AAC.
Para esse subtipo, o tipo de mídia fornece a taxa de amostragem e o número de canais antes da aplicação de ferramentas de SBR (replicação de banda espectral) e PS (estéreo paramétrico), se presente. O efeito da ferramenta SBR é dobrar a taxa de amostragem decodificada em relação à taxa de amostragem principal do AAC-LC. O efeito da ferramenta PS é decodificar estéreo de um fluxo AAC-LC principal de canal mono.
Esse subtipo é equivalente a MEDIASUBTYPE_MPEG_HEAAC, definido em wmcodecdsp.h. Consulte GUIDs de subtipo de áudio.
A origem do arquivo MPEG-4 e o analisador do ADTS geram esse subtipo.
mfapi.h
MEDIASUBTYPE_RAW_AAC1 AAC bruto.
Esse subtipo é usado para o AAC contido em um arquivo AVI com a marca de formato de áudio igual a WAVE_FORMAT_RAW_AAC1 (0x00FF).
Para esse subtipo, o tipo de mídia fornece a taxa de exemplo e o número de canais depois que as ferramentas SBR e PS são aplicadas, se estiverem presentes.
wmcodecdsp.h

Para configurar o decodificador AAC, defina os atributos a seguir no tipo de mídia de entrada.

Atributo Descrição Comentários
MF_MT_MAJOR_TYPE Tipo principal. Deve ser MFMediaType_Audio.
MF_MT_SUBTYPE Subtipo de áudio. Consulte a descrição anterior para obter detalhes.
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION Perfil e nível de áudio.
Opcional. Aplica-se somente a MFAudioFormat_AAC.
O valor desse atributo é o campo audioProfileLevelIndication , conforme definido por ISO/IEC 14496-3.
Se desconhecido, defina como zero ou 0xFE ("nenhum perfil de áudio especificado").
MF_MT_AAC_PAYLOAD_TYPE Tipo de conteúdo.
Aplica-se somente a MFAudioFormat_AAC. O decodificador dá suporte aos seguintes tipos de conteúdo:
  • 0: AAC bruto. O fluxo contém apenas elementos raw_data_block(), conforme definido por MPEG-2.
  • 1: ADTS. O fluxo contém um adts_sequence(), conforme definido por MPEG-2. Somente um raw_data_block() por adts_frame() é permitido.
  • 3: fluxo de transporte de áudio com uma LOAS (camada de sincronização) e uma LATM (camada multiplex). Dos três tipos de LOAS, há suporte apenas para AudioSyncStream . A camada multiplex é AudioMuxElement, restrita a um programa de áudio e uma camada.
MF_MT_AAC_PAYLOAD_TYPE é opcional. Se esse atributo não for especificado, o valor padrão 0 será usado, o que especifica que o fluxo contém apenas elementos raw_data_block.
MF_MT_AUDIO_BITS_PER_SAMPLE Profundidade de bit desejada do áudio PCM decodificado.
MF_MT_AUDIO_CHANNEL_MASK Especifica a atribuição de canais de áudio para posições de locutor. Opcional. Para obter mais informações, consulte Restrições de formato.
MF_MT_AUDIO_NUM_CHANNELS Número de canais, incluindo o canal LFE (baixa frequência), se presente.
A interpretação desse valor depende do subtipo de mídia, conforme descrito anteriormente.
MF_MT_AUDIO_SAMPLES_PER_SECOND Taxa de amostragem, em amostras por segundo.
A interpretação desse valor depende do subtipo de mídia, conforme descrito anteriormente.
MF_MT_USER_DATA Informações de formato adicionais. O valor desse atributo depende do subtipo.
  • MFAudioFormat_AAC: contém a parte da estrutura HEAACWAVEINFO que aparece após a estrutura WAVEFORMATEX (ou seja, após o membro wfx ). Isso é seguido pelos dados AudioSpecificConfig(), conforme definido por ISO/IEC 14496-3.
  • MEDIASUBTYPE_RAW_AAC1: contém os dados AudioSpecificConfig(). Esses dados devem aparecer; caso contrário, o decodificador rejeitará o tipo de mídia.
O comprimento dos dados AudioSpecificConfig() é de 2 bytes para AAC-LC ou HE-AAC com sinalização implícita de SBR/PS. São mais de 2 bytes para HE-AAC com sinalização explícita de SBR/PS.
O valor de audioObjectType conforme definido em AudioSpecificConfig() deve ser 2, indicando AAC-LC. O valor de extensionAudioObjectType deve ser 5 para SBR ou 29 para PS.

Tipos de saída

O decodificador dá suporte aos seguintes tipos de saída:

Subtype Descrição
MFAudioFormat_Float Áudio de ponto flutuante IEEE.
MFAudioFormat_PCM Áudio PCM de 16 bits.
MFAudioFormat_AAC Requer o Windows 8.
Esse tipo de saída pode ser usado para converter um fluxo AAC no formato LOAS/LATM no formato ADTS.
Para converter um fluxo LOAS/LATM em um fluxo do ADTS, defina o tipo de entrada como MFAudioFormat_AAC com o tipo de conteúdo 3 (LOAS). Em seguida, defina o tipo de saída como MFAudioFormat_AAC com o tipo de conteúdo 1 (ADTS). O decodificador reformatará o conainter sem decodificar o bitstream.
Nota: O decodificador não registra MFAudioFormat_AAC como um tipo de saída. No entanto, se o aplicativo definir o tipo de entrada conforme descrito, o método IMFTransform::GetOutputAvailableType retornará MFAudioFormat_AAC na lista de tipos de saída disponíveis.

Se o fluxo de entrada contiver mais de dois canais, o decodificador do AAC fornecerá duas opções para o formato de saída:

  • A mesma configuração de canal que o tipo de entrada.
  • Dobra estéreo para baixo.

Restrições de formato

A taxa de amostragem de áudio decodificada deve ser uma das seguintes, após a aplicação do SBR (se presente):

  • 8 kHz
  • 11,025 kHz
  • 12 kHz
  • 16 kHz
  • 22,05 kHz
  • 24 kHz
  • 32 kHz
  • 44,1 kHz
  • 48 kHz

Não há suporte para taxas de amostragem acima de 48 kHz.

O decodificador dá suporte a até 6 canais de áudio. Para cada configuração de alto-falante, o decodificador espera que os elementos sintacticos do AAC apareçam em uma determinada ordem. A tabela a seguir lista as configurações de alto-falante com suporte. A terceira coluna da tabela lista os elementos sintacticos esperados e sua ordem, usando a seguinte notação:

  • <SCE1>: o single_channel_element (SCE) associado ao alto-falante do centro frontal.
  • <SCE2>: o SCE associado ao alto-falante do back-center.
  • <CPE1>: O CPE (channel_pair_element) associado aos alto-falantes frontais.
  • <CPE2>: O CPE associado aos alto-falantes traseiros (ou laterais)
  • <LFE>: O lfe_channel_element (LFE).

Para obter mais informações sobre esses elementos sintacticos, consulte ISO/IEC 13818-7.

Configuração Máscara de Canal Elementos sintacticos do AAC
Mono SPEAKER_FRONT_CENTER <SCE1>
Estéreo ou mono duplo | SPEAKER_FRONT_LEFTSPEAKER_FRONT_RIGHT <CPE1>
2/1 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHTSPEAKER_BACK_CENTER <CPE1><SCE1>
2/2 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <CPE1><CPE2>
3/0 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHTSPEAKER_FRONT_CENTER <SCE1><CPE1>
3/1 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTERSPEAKER_BACK_CENTER <SCE1><CPE1><SCE2>
3/2 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <SCE1><CPE1><CPE2>
3/2 + LFE | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <SCE1><CPE1><CPE2><LFE>

Para o AAC bruto, cada exemplo de entrada deve conter exatamente um quadro compactado do AAC completo.

Para o ADTS, cada exemplo de entrada pode conter vários quadros de áudio, bem como quadros parciais, ou seja, quadros podem abranger limites de exemplo. Cada cabeçalho do ADTS deve ser seguido por um quadro do AAC.

O decodificador do AAC não dá suporte a nenhum dos seguintes:

  • Perfil principal, Sample-Rate perfil srs (escalonável) ou perfil ltp (previsão de longo prazo).
  • ADIF (formato de intercâmbio de dados de áudio).
  • Fluxos de transporte LATM/LAOS.
  • Elementos de canal de acoplamento (CCEs). O decodificador ignorará quadros de áudio com CCEs.
  • AAC-LC com um tamanho de quadro de 960 amostras. Há suporte apenas para quadros de 1.024 exemplos.

Transformar atributos

O decodificador AAC implementa o método IMFTransform::GetAttributes . Os aplicativos podem usar esse método para obter ou definir os atributos a seguir.

Atributo Descrição
CODECAPI_AVDecAudioDualMono Especifica se o áudio de dois canais é codificado como estéreo ou mono duplo. Trate como somente leitura.
CODECAPI_AVDecAudioDualMonoReproMode Especifica como o decodificador reproduz áudio mono duplo. O valor padrão é eAVDecAudioDualMonoReproMode_LEFT_MONO: Saída Ch1 para os alto-falantes esquerdo e direito.
Os aplicativos podem definir essa propriedade para alterar o comportamento padrão.
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE O decodificador do AAC não lida com alterações de formato dinâmico e deve ser liberado ou esvaziado antes que um novo tipo de mídia de entrada seja definido. Trate esse atributo como somente leitura.
Nota: O decodificador AAC relata incorretamente um valor TRUE para esse atributo.
No Windows 7, o decodificador relata incorretamente um valor TRUE para esse atributo. No Windows 8, o decodificador relata FALSE, que é o valor correto

Tipos de mídia de exemplo

Aqui está um exemplo do tipo de mídia de entrada necessário para um fluxo AAC-LC de 6 canais e 48 kHz, usando uma carga bruta do AAC:

Atributo Valor
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_AAC
MF_MT_AUDIO_SAMPLES_PER_SECOND 48000
MF_MT_AUDIO_NUM_CHANNELS 6
MF_MT_AAC_PAYLOAD_TYPE 0
MF_MT_USER_DATA {0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb0}
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 0x2a (opcional)

Os primeiros 12 bytes de MF_MT_USER_DATA correspondem aos seguintes membros da estrutura HEAACWAVEINFO :

  • wPayloadType = 0 (AAC bruto)
  • wAudioProfileLevelIndication = 0x2a (Perfil do AAC, Nível 4)
  • wStructType = 0

Os dois últimos bytes de MF_MT_USER_DATA contêm o valor de AudioSpecificConfig(), conforme definido por MPEG-4.

  • AudioSpecificConfig.audioObjectType = 2 (AAC LC) (5 bits)
  • AudioSpecificConfig.samplingFrequencyIndex = 3 (4 bits)
  • AudioSpecificConfig.channelConfiguration = 6 (4 bits)
  • GASpecificConfig.frameLengthFlag = 0 (1 bit)
  • GASpecificConfig.dependsOnCoreCoder = 0 (1 bit)
  • GASpecificConfig.extensionFlag = 0 (1 bit)

Dado esse tipo de entrada, use o seguinte tipo de mídia de saída para obter áudio PCM de ponto flutuante de 6 canais e 32 bits do decodificador:

Atributo Valor
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_Float
MF_MT_AUDIO_BITS_PER_SAMPLE 32
MF_MT_AUDIO_SAMPLES_PER_SECOND 48000
MF_MT_AUDIO_NUM_CHANNELS 6
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 1152000 (opcional)
MF_MT_AUDIO_BLOCK_ALIGNMENT 24 (opcional)
MF_MT_AUDIO_CHANNEL_MASK 0x3f (opcional)

Se o Suplemento de Atualização de Plataforma para Windows Vista estiver instalado, o decodificador de áudio AAC estará disponível no Windows Vista, mas só poderá ser acessado no Windows Vista usando o Leitor de Origem.

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]
DLL
Msmpeg2adec.dll no Windows 7;
MSAudDecMFT.dll no Windows 8

Confira também

Objetos Codec

Tipos de mídia do AAC

Tipos de mídia de áudio

Microsoft MPEG-1/DD/AAC Audio Decoder

Suporte do MPEG-4 na Media Foundation

Formatos de mídia compatíveis com o Media Foundation