Representando formatos para transmissões IEC 61937

Com o aumento de dispositivos de armazenamento de mídia que exigem formatos de áudio compactados, os aplicativos devem identificar, descrever e usar uma variedade de novos conteúdos de áudio codificados para transmitir conteúdo de PCs para dispositivos como receptor HDMI ou DisplayPort.

Para representar um fluxo de áudio codificado a ser transmitido por uma interface compatível com IEC 61937, um aplicativo deve fornecer:

  • As características de um fluxo de áudio codificado a ser transmitido.

  • As características de um fluxo de áudio decodificado no dispositivo de destino.

No Windows Vista e em sistemas operacionais Windows anteriores, um aplicativo pode inferir o nível de qualidade de um formato de áudio a partir do número de canais, do tamanho da amostra e da taxa de dados de um fluxo de áudio que usa o formato. Para um formato PCM, essas informações estão disponíveis nos membros nChannels, nSamplesPerSec e nAvgBytesPerSec da estrutura WAVEFORMATEX que especifica o formato. Para um formato não-PCM, esses três membros foram comandados para armazenar informações sobre os dados compactados no fluxo de áudio. Assim, a estrutura WAVEFORMATEX carece de informações sobre o número efetivo de canais, o tamanho da amostra e a taxa de dados do fluxo de áudio não-PCM depois que o fluxo é descompactado e reproduzido. Com base nas informações dessa estrutura, um usuário ou um aplicativo pode ter dificuldade em inferir o nível de qualidade do fluxo não-PCM.

O WAVEFORMATEX foi estendido para a estrutura extensível WAVEFORMAT para fornecer as características de fluxo extra. No entanto, essa estrutura também não é adequada para descrever o fluxo para transmissões IEC 61937 porque foi projetada para representar um único conjunto de características e usada para dados PCM multicanal não compactados.

No Windows 7, o sistema operacional resolve esse problema fornecendo suporte para uma nova estrutura, WAVEFORMATEXTENSIBLE_IEC61937 que estende a estrutura WAVEFORMATEXTENSIBLE para armazenar dois conjuntos de características de fluxo de áudio: o formato de áudio codificado antes da transmissão e as características do fluxo de áudio depois de ter sido decodificado. A nova estrutura especifica explicitamente o número efetivo de canais, o tamanho da amostra e a taxa de dados de um formato não PCM. Com essas informações, um aplicativo pode inferir o nível de qualidade do fluxo não-PCM depois que ele é descompactado e reproduzido.

A estrutura WAVEFORMATEXTENSIBLE_IEC61937 é declarada no cabeçalho KsMedia.h incluído com o SDK do Windows 7. O membro FormatExt é a estrutura WAVEFORMATEXTENSIBLE que armazena as características do fluxo a ser transmitido. O membro Format da estrutura WAVEFORMATEXTENSIBLE é a estrutura WAVEFORMATEX . O conteúdo deste WAVEFORMATEX e WAVEFORMATEXTENSIBLE indicam a um aplicativo se a estrutura pode ser interpretada como uma estrutura WAVEFORMATEXTENSIBLE_IEC61937 . Para uma estrutura WAVEFORMATEXTENSIBLE_IEC61937:

  • O membro wFormatTag de WAVEFORMATEX deve conter WAVE_FORMAT_EXTENSIBLE (FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE).

  • O membro SubFormat da estrutura WAVEFORMATEXTENSIBLE especifica o GUID do formato codificado a ser transmitido. Por exemplo, FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL indica o formato Dolby Digital Plus. Para obter os GUIDs suportados, consulte GUIDs de subformato.

  • O tamanho indicado pelo membro cbSize do WAVEFORMATEX é de 34 bytes. (FormatExt.Format.cbSize = 34). O tamanho total do WAVEFORMATEXTENSIBLE_IEC61937 é de 52 bytes.

Os membros dwEncodedSamplesPerSec, dwEncodedChannelCount e dwAverageBytesPerSec do WAVEFORMATEXTENSIBLE_IEC61937 descrevem a taxa de amostragem, o número de canais e a taxa de bits em bytes do fluxo do fluxo de áudio depois que ele foi decodificado.

GUIDs de subformato

No Windows 7, o cabeçalho KsMedia.h contém definições para os GUIDs de subformato para os formatos de áudio compactados definidos pelo CEA-861-D. Os GUIDs são especificados no membro SubFormat do WAVEFORMATEXTENSIBLE, especificado no membro FormatExt da estrutura WAVEFORMATEXTENSIBLE_IEC61937 (WAVEFORMATEXTENSIBLE_IEC61937.FormatExt.Subformat).

Os GUIDs para os formatos de áudio compactados que estão disponíveis como formatos de áudio codificados IEC 61937 padrão estão listados na tabela a seguir. Esses formatos são semelhantes às representações existentes dos formatos Active Coding 3 (AC-3) e Digital Theater Sound (DTS) no Windows.

Tipo CEA 861 GUID de subformato Descrição
0x00 Consulte o fluxo.
0x01 00000000-0000-0010-8000-00aa0389b71
KSDATAFORMAT_SUBTYPE_WAVEFORMATEX
IEC 60958 PCM
0x02 00000092-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL
AC-3
0x03 00000003-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_MPEG1
MPEG-1 (Camada 1 & 2)
0x04 00000004-0cea-0010-8000-00aa0389b71
KSDATAFORMAT_SUBTYPE_IEC61937_MPEG3
MPEG-3 (Camada 3)
0x05 00000005-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_MPEG2
MPEG-2 (multicanal)
0x06 00000006-0cea-0010-8000-00aa0389b71
KSDATAFORMAT_SUBTYPE_IEC61937_AAC
Codificação de áudio avançada (MPEG-2/4 AAC em ADTS)
0x07 00000008-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTS
DTS
0x0a 0000000a-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS
Dolby Digital Plus
0x0a 0000010a-0cea-0010-8000-00aa0389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS_ATMOS
Dolby Atmos codificado com Dolby Digital Plus
0x0f Não utilizado Reservado

 

Os GUIDs para os formatos de áudio compactados que são transmitidos em pacotes de amostra de áudio de alta taxa de bits estão listados na tabela a seguir.

Tipo CEA 861 GUID de subformato Descrição
0x0b 0000000b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTS_HD
DTS-HD (24 bits, 96 Khz)
0x0c 0000000c-0cea-0010-8000-00aa0389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MLP
Dolby MAT 1.0:
Dolby TrueHD (MLP – Meridian Lossless Packing) – 24-bit 192KHz/até 18 Mbps, 8 canais)
0x0c 0000010c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT20
Dolby MAT 2.0:
Dolby TrueHD – 24 bits 192KHz/até 18 Mbps, 8 canais ou LPCM até 24 Mbps.
0x0c 0000030c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT21
Dolby MAT 2.1:
Dolby TrueHD – 24 bits 192KHz/até 18 Mbps, 8 canais ou LPCM até 24 Mbps.
0x0e 00000164-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_WMA_PRO
Windows Media Audio (WMA) Pro
0x0b 0000000b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTS_HD
DTS HD
0x0b 0000010b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTSX_E1
DTS: X E1
0x0b 0000030b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTSX_E2
DTS: X E2

 

O driver de classe HD Audio fornecido pela Microsoft suporta os formatos PCM, AC3, DTS, AAC, Dolby Digital Plus, WMA Pro, MAT (MLP). Os GUIDs para os formatos de áudio compactados que não são suportados pelo driver de classe de áudio HD e podem ser implementados por soluções de terceiros estão listados na tabela a seguir.

Tipo CEA 861 GUID de subformato Descrição
0x08 00000008-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_ATRAC
Codificação Acústica por Transformada Adaptativa (ATRAC)
0x09 00000009-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_ONE_BIT_AUDIO
Áudio de um bit
0x0d 0000000D-0CEA-0010-8000-00AA00389B71
KSDATAFORMAT_SUBTYPE_IEC61937_DST
Direct Stream Transport (DST) — DSD (Direct Stream Digital) compactado sem perdas.

 

Formato Dolby Digital Plus

Quando o conteúdo Dolby Digital Plus é transmitido através da norma IEC 60958, a taxa de amostragem de ligação deve ser quatro vezes superior à taxa de amostragem do conteúdo. O Dolby Digital Plus suporta taxas de amostragem de conteúdo de 32 KHz, 44,1 KHz e 48 KHz. Interfaces como HDMI não suportam 128 KHz (32 KHz x 4), portanto, apenas taxas de amostragem de conteúdo de 44,1 e 48 KHz podem ser suportadas.

Os valores definidos por um aplicativo na estrutura WAVEFORMATEXTENSIBLE_IEC61937 para representar o formato Dolby Digital Plus a uma taxa de amostragem de conteúdo de 48 KHz são mostrados no exemplo a seguir.

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 2;              // One IEC 60958 Line.
wfext.FormatExt.Format.nSamplesPerSec = 192000;    // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 768000;   // 192 KHz * 4.
wfext.FormatExt.Format.nBlockAlign = 4;            // 16 bits * 2 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;        // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                // Indicates that Format is part of a 
                                                   // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_5POINT1;    // Dolby 5.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS;
wfext.dwEncodedSamplesPerSec = 48000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 6;                            // Encoded data contains 6 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Dolby TrueHD (MAT)

O conteúdo Dolby TrueHD é transmitido através de IEC 60958 a 176,4 kHz / 8 canais (exigindo uma taxa de quadros IEC 60958 de 705,6 kHz) para taxas de amostragem de conteúdo de 44,1, 88,2 e 176,4 kHz, e 192 kHz / 8 canais (exigindo uma taxa de quadros IEC 60958 de 768 kHz) para taxas de amostragem de conteúdo de 48, 96 e 192 kHz.

Os valores definidos por um aplicativo na estrutura WAVEFORMATEXTENSIBLE_IEC61937 para representar Dolby TrueHD a uma taxa de amostragem de conteúdo de 96 KHz são mostrados nos exemplos a seguir.

Dolby MAT 1,0

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 8;                // Four IEC 60958 Lines.
wfext.FormatExt.Format.nSamplesPerSec = 192000;      // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 3072000;    // 192 KHz * 16.
wfext.FormatExt.Format.nBlockAlign = 16;             // 16-bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;          // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                  // Indicates that Format is part of a 
                                                     // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_7POINT1;    // Dolby 7.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MLP; // This structure indicates MLP (MAT 1.0) support.
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 8;                            // Encoded data contains 8 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Dolby MAT 2,0

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 8;                // Four IEC 60958 Lines.
wfext.FormatExt.Format.nSamplesPerSec = 192000;      // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 3072000;    // 192 KHz * 16.
wfext.FormatExt.Format.nBlockAlign = 16;             // 16-bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;          // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                  // Indicates that Format is part of a 
                                                     // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_7POINT1;    // Dolby 7.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT20; // This structure indicates MAT 2.0 support.
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 8;                            // Encoded data contains 8 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Dolby MAT 2,1

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 8;                // Four IEC 60958 Lines.
wfext.FormatExt.Format.nSamplesPerSec = 192000;      // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 3072000;    // 192 KHz * 16.
wfext.FormatExt.Format.nBlockAlign = 16;             // 16-bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;          // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                  // Indicates that Format is part of a 
                                                     // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_7POINT1;    // Dolby 7.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT21; // This structure indicates MAT 2.1 support.
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 8;                            // Encoded data contains 8 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Observação

O suporte para uma versão do Dolby MAT não implica suporte para Dolby MAT com um número de versão mais baixo. Como o Dolby MAT 2.1 é compatível com versões anteriores do Dolby MAT, um driver de classe que indica suporte para Dolby MAT 2.1 normalmente também indicará suporte para Dolby MAT 2.0 e Dolby MAT 1.0, usando uma estrutura de WAVEFORMATEXTENSIBLE_IEC61937 separada para cada versão.

 

WMA Pro

O conteúdo de áudio do WMA Pro pode ser codificado em um dos quatro perfis listados na tabela a seguir.

Profile Propriedade - Valor Descrição
M0 Taxa de bits máxima – 192000 bps
Taxa máxima de amostragem – 48 KHz
Contagem máxima de canais – 2
Tamanho máximo do buffer – 600 * 1024 bits
Máximo de amostras por quadro – 2048
Máximo de bits por quadro - 655536
Recomendado para música over-the-air e streaming.
A taxa de bits máxima em um quadro de áudio é de 1536000 bps.
M1 Taxa de bits máxima – 385000 bps
Taxa máxima de amostragem – 48 KHz
Contagem máxima de canais – 6
Tamanho máximo do buffer – 600 * 1024 bits
Máximo de amostras por quadro – 4096
Máximo de bits por quadro - 131072
Recomendado para filmes de definição padrão de som ambiente.
A taxa de bits máxima em um quadro de áudio é de 1536000 bps.
M2 Taxa de bits máxima – 769000 bps
Taxa máxima de amostragem – 96 KHz
Contagem máxima de canais – 6
Tamanho máximo do buffer – 1200 * 1024 bits
Máximo de amostras por quadro – 4096
Máximo de bits por quadro - 131072
Recomendado para filmes de alta definição com som ambiente.
A taxa máxima em um quadro de áudio é de 3072000 bps.
M3 Taxa de bits máxima – 3000000 bps
Taxa máxima de amostragem – 96 KHz
Contagem máxima de canais – 8
Tamanho máximo do buffer – 2400 * 1024 bits
Máximo de amostras por quadro – 4096
Máximo de bits por quadro - 131072
Recomendado para teatro digital.
A taxa máxima em um quadro de áudio é de 3072000 bps.

 

Os perfis M0 e M1 se encaixam em um fluxo IEC 60958 de 48 KHz/16 bits/estéreo (1536000 bps). Os perfis M2 e M3 se encaixam em um fluxo IEC 60958 de 96 KHz/16 bits/Estéreo (3072000 bps).

Os valores definidos por um aplicativo na estrutura WAVEFORMATEXTENSIBLE_IEC61937 para representar o WMA Pro como um perfil M2 são mostrados no exemplo a seguir.

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 2;             // One IEC 60958 Line.
wfext.FormatExt.Format.nSamplesPerSec = 96000;    // Link runs at 96 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 384000;  // 96 KHz * 4.
wfext.FormatExt.Format.nBlockAlign = 4;           // 16 bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;       // Always at 16 bits over link.
wfext.FormatExt.Format.cbSize = 34;               // Indicates that Format is part of a 
                                                  // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_5POINT1;    // 5.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_WMA_PRO;
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 6;                            // Encoded data contains 6 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Formatos de dispositivo