Condividi tramite


S/PDIF Pass-Through trasmissione di flussi non PCM

Il formato dell'interfaccia digitale Sony/Philips (S/PDIF) è definito principalmente per trasmettere dati audio PCM, ma può essere facilmente adattato per trasmettere dati non PCM. Il principio della trasmissione pass-through S/PDIF è che un flusso di dati non PCM può passare attraverso un collegamento S/PDIF come se fosse un flusso PCM. La trasmissione pass-through non richiede l'invio S/PDIF e la ricezione delle porte per comprendere la codifica del flusso non PCM.

WMA Pro e AC-3 sono entrambi formati non PCM compressi che trasmettono flussi audio digitali in unità denominate frame di sincronizzazione. Ogni frame di sincronizzazione contiene una propria intestazione e può essere decodificato indipendentemente dagli altri frame di sincronizzazione nel flusso. A una frequenza di campionamento a 48 kHz, ad esempio, un frame di sincronizzazione WMA Pro contiene dati sufficienti per riprodurre 2048 tick dell'orologio di esempio (42,67 millisecondi). A questa frequenza, un frame di sincronizzazione AC-3 contiene dati sufficienti per 1536 ticks (32 millisecondi).

A una frequenza di campionamento a 48 kHz, un frame di sincronizzazione WMA Pro a 5,1 canali non supera mai i 8192 byte, ovvero il numero di byte occupati da 2048 stereo (due canali), esempi PCM a 16 bit. Analogamente, un frame di sincronizzazione AC-3 a 5.1 canale non supera mai i 6144 byte, ovvero il numero di byte occupati da 1536 esempi di PCM a 16 bit. Esistono eccezioni a questa regola, ma questi tipi di fotogrammi di sincronizzazione AC-3 sono molto rari, non possono essere trasmessi tramite S/PDIF e possono essere ignorati qui.

Quando un flusso audio DA 48 kHz Pro o AC-3 passa attraverso un collegamento S/PDIF in formato digitale senza essere decodificato, l'invio e la ricezione di S/PDIF possono trattare il flusso uguale a uno stereo, a 16 bit, a 48 kHz di flusso PCM. Quando si specifica un intervallo di dati per un pin che può trasmettere un flusso WMA Pro-over-S/PDIF o AC-3-over-S/PDIF, il tag di formato wave è l'unica cosa che differisce da un intervallo di dati per un pin che trasmette un flusso PCM tramite la porta S/PDIF. Per un esempio, vedere le dichiarazioni dell'intervallo di dati in Specifica di intervalli di dati WMA Pro.

Per evitare di distribuire un flusso compresso WMA Pro sull'interfaccia S/PDIF più veloce rispetto al tempo reale,ovvero per evitare il recapito di 43 millisecondi di audio in meno di 43 millisecondi, un'applicazione audio deve eseguire il pad di un frame di sincronizzazione WMA Pro con zero fino a quando il frame di sincronizzazione accetta lo stesso numero di byte degli esempi di PCM stereo 2048. Un frame di sincronizzazione AC-3 deve essere riempito in modo analogo alle dimensioni di 1536 esempi di PCM stereo.

Se si tenta di inviare fotogrammi di sincronizzazione WMA Pro o AC-3 senza blocco a un driver di adattatore PortCls che usa WaveCyclic, tenere presente che quando il driver di porta rileva la starvazione dei dati (perché il flusso di dati contiene meno byte rispetto a un flusso non compresso a due canali), riempie il buffer ciclico con silenzio. Il decodificatore di flusso non PCM avrà problemi durante l'interpretazione di questi periodi di silenzio, che si trovano in PCM anziché nel formato non PCM.

La figura seguente mostra un'applicazione di esempio di trasmissione pass-through S/PDIF.

Diagramma che mostra un PC connesso a un ricevitore A/V tramite un cavo coaxiale per la trasmissione pass-through S/PDIF.

La figura mostra un PC connesso a un ricevitore audio/visivo esterno (A/V) tramite un cavo coaxiale. Il cavo connette la porta di output S/PDIF sul dispositivo audio del PC alla porta di input S/PDIF nel ricevitore A/V.

Al bordo sinistro della figura, un'applicazione audio inserisce un frame di sincronizzazione da un flusso audio WMA Pro all'inizio di un buffer di 8192 byte. Questa dimensione del buffer viene usata esclusivamente per semplificare l'illustrazione. In pratica, una dimensione del buffer di 4096 byte o 10240 byte, ad esempio, potrebbe essere usata. L'applicazione riempie qualsiasi spazio rimanente nel buffer con zero. Il driver audio programma la porta di output S/PDIF per trasmettere il contenuto del buffer come se fossero 8192 byte di dati PCM.

Analogamente, la porta di input S/PDIF nel ricevitore A/V riceve il flusso come se fosse 8192 byte di dati PCM. Carica i dati in un buffer di input, che in questo esempio ha anche una dimensione di 8192 byte. Il decodificatore estrae il frame di sincronizzazione WMA Pro dal buffer di input, decodifica il frame di sincronizzazione in un flusso audio a 5.1 canali e riproduce il flusso attraverso gli altoparlanti circondati sul bordo destro della figura.

Per consentire al decodificatore all'altra estremità della connessione di sapere che il flusso audio è in formato non PCM, il driver audio deve impostare il bit /AUDIO sulla transceiver S/PDIF. Il decodificatore legge questo bit dal blocco di stato del canale S/PDIF per determinare se il flusso di dati è codificato in un formato non PCM. L'impostazione di questo bit è l'unica cosa speciale che il driver deve fare per supportare il flusso non PCM. In ogni altro modo, il driver considera il flusso come se contiene dati PCM.

Un certo numero di dispositivi consumer supporta la trasmissione pass-through S/PDIF, ma altre interfacce digitali come USB e 1394 possono essere adattate anche per la trasmissione digitale pass-through di dati non PCM ai decodificatori audio esterni.

Dolby Labss ha introdotto il formato audio compresso AC-3 (Dolby Digital) nel 1992. I primi ricevitori A/V per supportare AC-3 su S/PDIF sono diventati disponibili in circa il 1997. Il supporto software per il formato di flusso audio WMA Pro è diventato disponibile con la versione della tecnologia Microsoft Windows Media 9 Series nel 2003. I ricevitori A/V che supportano WMA Pro-over-S/PDIF sono stati introdotti nel 2003.

In Windows XP e versioni successive, le API waveOut, DirectSound e DirectShow supportano formati non PCM. Le API DirectSound e waveOut vengono implementate in modo tale che qualsiasi formato PCM o non PCM esposto dal driver sia automaticamente disponibile ai client di queste API.