Condividi tramite


S/PDIF Pass-Through trasmissione di flussi non PCM

Il formato S/PDIF (Digital Interface) Sony/Philips è definito principalmente per la trasmissione di 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 e la ricezione di porte S/PDIF 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 la propria intestazione e può essere decodificato indipendentemente dagli altri frame di sincronizzazione nel flusso. A una frequenza di campionamento di 48 kHz, ad esempio, un frame di sincronizzazione WMA Pro contiene dati sufficienti per riprodurre 2048 tick dell'orologio del campione (42,67 millisecondi). Con questa stessa frequenza, un frame di sincronizzazione AC-3 contiene dati sufficienti per 1536 tick (32 millisecondi).

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

Quando un flusso audio WMA Pro o AC-3 a 48 kHz passa attraverso un collegamento S/PDIF in forma digitale senza essere decodificato, le porte di invio e ricezione S/PDIF possono trattare il flusso come un PCM stereo, 16 bit, 48 kHz. 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 onda stesso è l'unica cosa che differisce da un intervallo di dati per un pin che trasmette un flusso PCM attraverso 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 impedire la distribuzione di 43 millisecondi di audio in meno di 43 millisecondi), un'applicazione audio deve riempire un fotogramma di sincronizzazione WMA Pro con zeri finché il fotogramma di sincronizzazione non occupa lo stesso numero di byte di 2048 campioni PCM stereo. Un frame di sincronizzazione AC-3 deve essere riempito in modo analogo alle dimensioni di 1536 campioni PCM stereo.

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

Nella figura seguente viene illustrata un'applicazione di esempio di trasmissione pass-through S/PDIF.

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

La figura mostra un PC connesso a un ricevitore audio/visivo esterno (A/V) tramite un cavo coassiale. Il cavo collega la porta di output S/PDIF sul dispositivo audio del PC alla porta di input S/PDIF sul 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 a 8192 byte. Questa dimensione del buffer viene usata esclusivamente per semplificare l'illustrazione. In pratica, è possibile usare invece una dimensione del buffer di 4096 byte o 10240 byte. L'applicazione riempie qualsiasi spazio rimanente nel buffer con zeri. 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 dati PCM da 8192 byte. 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 da 5.1 canali e riproduce il flusso attraverso gli altoparlanti surround sul bordo destro della figura.

Per far sapere al decodificatore sull'altra estremità della connessione che il flusso audio è in un formato non PCM, il driver audio deve impostare il bit /AUDIO sul 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 pass-through digitale di dati non PCM a decodificatori audio esterni.

Dolby Laboratories ha introdotto il formato audio compresso AC-3 (Dolby Digital) nel 1992. I primi ricevitori A/V consumer a supportare AC-3 su S/PDIF sono diventati disponibili nel 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 che qualsiasi formato PCM o non PCM esposto dal driver sia automaticamente disponibile ai client di queste API.