Partilhar via


Transmissão de S/PDIF Pass-Through de fluxos não PCM

O formato de interface digital Sony/Philips (S/PDIF) é definido principalmente para transmitir dados de áudio PCM, mas pode ser facilmente adaptado para transmitir dados não PCM. O princípio da transmissão de passagem S/PDIF é que um fluxo de dados não PCM pode passar por um link S/PDIF como se fosse um fluxo de PCM. A transmissão de passagem não exige que o S/PDIF envie e receba portas para entender a codificação do fluxo não PCM.

O WMA Pro e o AC-3 são formatos não PCM compactados que transmitem fluxos de áudio digital em unidades chamadas quadros de sincronização. Cada quadro de sincronização contém seu próprio cabeçalho e pode ser decodificado independentemente dos outros quadros de sincronização no fluxo. A uma taxa de exemplo de 48 kHz, por exemplo, um quadro de sincronização do WMA Pro contém dados suficientes para reprodução para 2048 tiques do relógio de exemplo (42,67 milissegundos). Nesse mesmo ritmo, um quadro de sincronização AC-3 contém dados suficientes para 1536 tiques (32 milissegundos).

A uma taxa de exemplo de 48 kHz, um quadro de sincronização WMA Pro de 5,1 canais nunca excede 8.192 bytes, que é o número de bytes ocupados por amostras de PCM estéreo (dois canais) estéreo de 16 bits. Da mesma forma, um quadro de sincronização AC-3 de 5,1 canais nunca excede 6144 bytes, que é o número de bytes ocupados por amostras de PCM estéreo de 16 bits estéreo. (Há exceções a essa regra, mas esses tipos de quadros de sincronização AC-3 são muito incomuns, não podem ser transmitidos por S/PDIF e podem ser ignorados aqui.)

Quando um fluxo de áudio WMA Pro ou AC-3 de 48 kHz passa por um link S/PDIF no formato digital sem ser decodificado, as portas de envio e recebimento do S/PDIF podem tratar o fluxo da mesma forma que um fluxo de PCM estéreo de 16 bits e 48 kHz. Ao especificar um intervalo de dados para um pin que pode transmitir um fluxo WMA Pro-over-S/PDIF ou AC-3-over-S/PDIF, a marca de formato de onda em si é a única coisa que difere de um intervalo de dados para um pin que transmite um fluxo pcm pela porta S/PDIF. Para obter um exemplo, consulte as declarações de intervalo de dados em Especificando intervalos de dados do WMA Pro.

Para evitar a entrega de um fluxo compactado do WMA Pro pela interface S/PDIF mais rápido do que em tempo real (ou seja, para evitar a entrega de 43 milissegundos de áudio em menos de 43 milissegundos), um aplicativo de áudio deve bloquear um quadro de sincronização do WMA Pro com zeros até que o quadro de sincronização assuma o mesmo número de bytes que os exemplos de PCM estéreo de 2048. Um quadro de sincronização AC-3 deve ser adicionado de forma semelhante ao tamanho de 1536 amostras de PCM estéreo.

Se você tentar enviar quadros de sincronização WMA Pro ou AC-3 não adicionados a um driver de adaptador PortCls que usa WaveCyclic, lembre-se de que quando o driver de porta sente falta de dados (porque o fluxo de dados contém menos bytes do que um fluxo de dois canais não compactado faria), ele preenche o buffer cíclico com silêncio. O decodificador de fluxo não PCM terá problemas para interpretar esses períodos de silêncio, que estão no PCM em vez do formato não PCM.

A figura a seguir mostra um exemplo de aplicativo de transmissão de passagem S/PDIF.

Diagrama mostrando um computador conectado a um receptor A/V por meio de um cabo persuasial para transmissão de passagem S/PDIF.

A figura mostra um computador conectado a um receptor de áudio/visual externo (A/V) por meio de um cabo de persuasão. O cabo conecta a porta de saída S/PDIF no dispositivo de áudio do computador à porta de entrada S/PDIF no receptor A/V.

Na borda esquerda da figura, um aplicativo de áudio insere um quadro de sincronização de um fluxo de áudio do WMA Pro no início de um buffer de 8192 bytes. (Esse tamanho de buffer é usado puramente para facilitar a ilustração. Na prática, um tamanho de buffer de 4096 bytes ou 10240 bytes, por exemplo, pode ser usado em vez disso.) O aplicativo preenche qualquer espaço restante no buffer com zeros. O driver de áudio programa a porta de saída S/PDIF para transmitir o conteúdo do buffer como se fossem 8192 bytes de dados PCM.

Da mesma forma, a porta de entrada S/PDIF no receptor A/V recebe o fluxo como se fossem 8192 bytes de dados pcm. Ele carrega os dados em um buffer de entrada, que neste exemplo também tem um tamanho de 8192 bytes. O decodificador extrai o quadro de sincronização do WMA Pro do buffer de entrada, decodifica o quadro de sincronização em um fluxo de áudio de 5,1 canais e reproduz o fluxo pelos alto-falantes surround na borda direita da figura.

Para permitir que o decodificador na outra extremidade da conexão saiba que o fluxo de áudio está em um formato não PCM, o driver de áudio deve definir o bit /AUDIO no transceptor S/PDIF. O decodificador lê esse bit do bloco status canal S/PDIF para determinar se o fluxo de dados está codificado em um formato não PCM. Definir esse bit é a única coisa especial que o driver precisa fazer para acomodar o fluxo não PCM. De todas as outras maneiras, o driver trata o fluxo como se ele contivesse dados de PCM.

Vários dispositivos de consumidor dão suporte à transmissão de passagem S/PDIF, mas outras interfaces digitais, como USB e 1394, também podem ser adaptadas para transmissão de passagem digital de dados não PCM para decodificadores de áudio externos.

O Dolby Laboratories introduziu o formato de áudio compactado AC-3 (Dolby Digital) em 1992. Os primeiros receptores A/V do consumidor a dar suporte ao AC-3 por S/PDIF ficaram disponíveis por volta de 1997. O suporte de software para o formato de fluxo de áudio do WMA Pro ficou disponível com o lançamento da tecnologia Microsoft Windows Media 9 Series em 2003. Receptores A/V que dão suporte ao WMA Pro-over-S/PDIF foram introduzidos em 2003.

No Windows XP e posterior, as APIs waveOut, DirectSound e DirectShow dão suporte a formatos não PCM. As APIs DirectSound e waveOut são implementadas de forma que qualquer formato PCM ou não PCM exposto pelo driver esteja automaticamente disponível para clientes dessas APIs.