Representando formatos para transmissões do IEC 61937

Com o aumento nos 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 HDMI ou receptor DisplayPort.

Para representar um fluxo de áudio codificado a ser transmitido por uma interface compatível com o 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 sistemas operacionais Windows anteriores, um aplicativo pode inferir o nível de qualidade de um formato de áudio do número de canais, o tamanho da amostra e a 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 obrigados a armazenar informações sobre os dados compactados no fluxo de áudio. Portanto, a estrutura WAVEFORMATEX não tem 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 tocado. Com base nas informações nessa estrutura, um usuário ou um aplicativo pode ter dificuldade para inferir o nível de qualidade do fluxo não PCM.

O WAVEFORMATEX foi estendido para a estrutura WAVEFORMATEXTENSIBLE para fornecer as características de fluxo extra. No entanto, essa estrutura também não é adequada para descrever o fluxo para transmissões do IEC 61937, pois foi destinada a representar um único conjunto de características e usada para dados PCM de vários canais descompactados.

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 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 tocado.

A estrutura WAVEFORMATEXTENSIBLE _ IEC61937 é declarada no header KsMedia.h incluído no SDK 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 desse WAVEFORMATEX e WAVEFORMATEXTENSIBLE indica 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 os GUIDs com suporte, consulte GUIDs de subformatação.

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

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

GUIDs de subformatação

No Windows 7, o header KsMedia.h contém definições para os GUIDs de SubFormat para os formatos de áudio compactados definidos por 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 pelo IEC 61937 padrão são listados na tabela a seguir. Esses formatos são semelhantes às representações existentes de formatos AC-3 (Active Coding 3) e DTS (Digital Sound) em Windows.

Tipo CEA 861 GUID de subformatação Descrição
0x00 Consulte o fluxo.
0x01 00000000-0000-0010-8000-00aa00389b71
KSDATAFORMAT _ SUBTYPE _ WAVEFORMATEX
IEC 60958 PCM
0x02 00000092-0000-0010-8000-00aa00389b71
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ DOLBY _ DIGITAL
AC-3
0x03 00000003-0cea-0010-8000-00aa00389b71
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ MPEG1
MPEG-1 (Camada 1 & 2)
0x04 00000004-0cea-0010-8000-00aa00389b71
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ MPEG3
MPEG-3 (Camada 3)
0x05 000000005-0cea-0010-8000-00aa00389b71
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ MPEG2
MPEG-2(multicanal)
0x06 00000006-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ SUBTYPE _ IEC61937 _ AAC
Codificação de áudio avançada (MPEG-2/4 AAC no ADTS)
0x07 00000008-0000-0010-8000-00aa00389b71
KSDATAFORMAT _ SUBTYPE _ IEC61937 _ DTS
DTS
0x0a 0000000a-0cea-0010-8000-00aa00389b71
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ DOLBY _ DIGITAL _ PLUS
Dolby Digital Plus
0x0a 0000010a-0cea-0010-8000-00aa00389b71
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ DOLBY _ DIGITAL PLUS _ _ ATMOS
Dolby Atmos codificado com Dolby Digital Plus
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
SUBTIPO KSDATAFORMAT _ _ IEC61937 _ DTSX _ E2
DTS:X E2
0x0f Reservado nãoutilado

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

Tipo CEA 861 GUID de subformatação Descrição
0x0b 0000000b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ SUBTYPE _ IEC61937 _ DTS _ HD
DTS-HD (24 bits, 96Khz)
0x0c 0000000c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ SUBTYPE _ IEC61937 _ DOLBY _ MLP
Dolby-esteira 1,0:
Dolby TrueHD (MLP – embalagem do meridiano sem perdas) – 192KHz de 24 bits/até 18 Mbps, 8 canais)
0x0c 0000010c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ subtipo _ IEC61937 _ Dolby _ MAT20
Dolby-esteira 2,0:
Dolby TrueHD – 192KHz de 24 bits/até 18 Mbps, 8 canais ou LPCM até 24 Mbps.
0x0c 0000030c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ subtipo _ IEC61937 _ Dolby _ MAT21
Dolby-esteira 2,1:
Dolby TrueHD – 192KHz de 24 bits/até 18 Mbps, 8 canais ou LPCM até 24 Mbps.
0x0e 00000164-0000-0010-8000-00aa00389b71
_SUBTIPO KSDATAFORMAT _ IEC61937 _ WMA _ pro
Windows Pro de áudio de mídia (WMA)

o driver de classe de áudio HD fornecido pela Microsoft dá suporte aos formatos PCM, AC3, DTS, AAC, Dolby Digital Plus, WMA Pro, passe-partout (MLP). Os GUIDs dos formatos de áudio compactados que não têm suporte do driver de classe de HD Audio e podem ser implementados por soluções de terceiros são listados na tabela a seguir.

Tipo CEA 861 GUID do subformato Descrição
0x08 00000008-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ subtipo _ IEC61937 _ ATRAC
Codificação acústica de transformação adaptável (ATRAC)
0x09 00000009-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ subtipo _ IEC61937 _ áudio de um _ bit _
One-Bit áudio
0x0D 0000000d-0cea-0010-8000-00aa00389b71
KSDATAFORMAT _ subtipo _ IEC61937 _ DST
DST (Direct Stream Transport) – DSD compactado sem perdas (Direct Stream digital).

Formato Dolby Digital Plus

Quando o conteúdo Dolby Digital Plus é transmitido pelo IEC 60958, a taxa de amostragem de link deve ser quatro vezes a taxa de amostragem do conteúdo. O Dolby Digital Plus dá suporte a taxas de exemplo de conteúdo de 32 KHz, 44,1 KHz e 48 KHz. Interfaces como HDMI não dão suporte a 128 KHz (32 KHz x 4), de modo que apenas taxas de amostra de conteúdo 44,1 e 48 KHz podem ter suporte.

Os valores definidos por um aplicativo na estrutura WAVEFORMATEXTENSIBLE _ IEC61937 para representar o formato Dolby Digital Plus a uma taxa de amostra 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 (passe-partout)

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

Os valores definidos por um aplicativo na estrutura WAVEFORMATEXTENSIBLE _ IEC61937 para representar o Dolby TrueHD em uma taxa de amostra de conteúdo de 96 kHz são mostrados nos exemplos a seguir.

Dolby-esteira 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-esteira 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-esteira 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 enquadrant não significa suporte para Dolbyout com um número de versão inferior. Como o Dolby enquadramento 2,1 é compatível com versões anteriores do Dolbyout, um driver de classe que indica suporte para Dolby enquadrable 2,1 normalmente também indicará suporte para Dolby enquadrable 2,0 e Dolby PASSEs 1,0, usando uma _ estrutura IEC61937 WAVEFORMATEXTENSIBLE separada para cada versão.

WMA Pro

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

Perfil Propriedade-valor Descrição
M0 Taxa de bits máxima – 192000 bps
Taxa de amostragem máxima – 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 e streaming over-the-Air.
A taxa máxima de bits em um quadro de áudio é de 1536000 bps.
M1 Taxa de bits máxima – 385000 bps
Taxa de amostragem máxima – 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 Surround-Sound.
A taxa máxima de bits em um quadro de áudio é de 1536000 bps.
M2 Taxa de bits máxima – 769000 bps
Taxa de amostragem máxima – 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 de som surround.
A taxa máxima em um quadro de áudio é de 3072000 bps.
M3 Taxa de bits máxima – 3 milhões bps
Taxa de amostragem máxima – 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 o teatro digital.
A taxa máxima em um quadro de áudio é de 3072000 bps.

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

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