S/PDIF Pass-Through Übertragung von Nicht-PCM-Streams

Das Sony/Philips Digital Interface(S/PDIF)-Format ist in erster Linie für die Übertragung von PCM-Audiodaten definiert, kann aber problemlos für die Übertragung von Nicht-PCM-Daten angepasst werden. Das Prinzip der S/PDIF-Passthrough-Übertragung besteht darin, dass ein Nicht-PCM-Datenstrom eine S/PDIF-Verbindung durchlaufen kann, als wäre es ein PCM-Stream. Die Passthrough-Übertragung erfordert keine S/PDIF-Sende- und Empfangsports, um die Codierung des Nicht-PCM-Streams zu verstehen.

WMA Pro und AC-3 sind beide komprimierte Nicht-PCM-Formate, die digitale Audiostreams in Einheiten übertragen, die als Synchronisierungsrahmen bezeichnet werden. Jeder Synchronisierungsrahmen enthält einen eigenen Header und kann unabhängig von den anderen Synchronisierungsrahmen im Stream decodiert werden. Bei einer Abtastrate von 48 kHz enthält ein WMA Pro-Synchronisierungsrahmen beispielsweise genügend Daten, um 2048 Ticks der Beispieluhr (42,67 Millisekunden) wiedergegeben zu werden. Bei dieser Geschwindigkeit enthält ein AC-3-Synchronisierungsrahmen genügend Daten für 1536 Ticks (32 Millisekunden).

Bei einer Abtastrate von 48 kHz überschreitet ein WMA Pro-Synchronisierungsrahmen mit 5,1 Kanälen niemals 8192 Bytes, d. h. die Anzahl der Bytes, die von 2048 Stereo (zwei Kanal), 16-Bit-PCM-Beispielen belegt werden. Ebenso überschreitet ein AC-3-Synchronisierungsrahmen mit 5,1 Kanälen niemals 6144 Bytes, d. h. die Anzahl der Bytes, die von 1536 Stereo-16-Bit-PCM-Beispielen belegt werden. (Es gibt Ausnahmen von dieser Regel, aber diese Typen von AC-3-Synchronisierungsrahmen sind sehr ungewöhnlich, können nicht über S/PDIF übertragen werden und können hier ignoriert werden.)

Wenn ein 48-kHz-WMA Pro- oder AC-3-Audiostream eine S/PDIF-Verbindung in digitaler Form durchläuft, ohne decodiert zu werden, kann der S/PDIF-Sende- und Empfangsport den Datenstrom wie ein 16-Bit-PCM-Stereostream mit 48-kHz behandeln. Wenn Sie einen Datenbereich für einen Pin angeben, der einen WMA Pro-over-S/PDIF- oder AC-3-over-S/PDIF-Stream übertragen kann, ist das Waveformattag selbst das einzige, das sich von einem Datenbereich für einen Pin unterscheidet, der einen PCM-Stream über den S/PDIF-Port überträgt. Ein Beispiel finden Sie unter Datenbereichsdeklarationen unter Angeben von WMA Pro-Datenbereichen.

Um zu verhindern, dass ein komprimierter WMA Pro-Stream über die S/PDIF-Schnittstelle schneller als in Echtzeit bereitgestellt wird (d. h. um die Übermittlung von 43 Millisekunden Audio in weniger als 43 Millisekunden zu verhindern), muss eine Audioanwendung einen WMA Pro-Synchronisierungsrahmen mit Nullen versehen, bis der Synchronisierungsrahmen die gleiche Anzahl von Bytes wie 2048 Stereo-PCM-Beispiele einnimmt. Ein AC-3-Synchronisierungsrahmen muss auf ähnliche Weise auf die Größe von 1536 Stereo-PCM-Beispielen aufgefüllt werden.

Wenn Sie versuchen, unpaddierte WMA Pro- oder AC-3-Synchronisierungsrahmen an einen PortCls-Adaptertreiber zu senden, der WaveCyclic verwendet, beachten Sie, dass der Porttreiber den zyklischen Puffer mit Stille ausfüllt, wenn der Datenstrom datenstark erkennt (da der Datenstrom weniger Bytes enthält als ein nicht komprimierter Datenstrom mit zwei Kanälen). Der Nicht-PCM-Streamdecoder hat Probleme bei der Interpretation dieser Stilleperioden, die im PCM-Format statt im Nicht-PCM-Format vorliegen.

Die folgende Abbildung zeigt ein Beispiel für die Anwendung der S/PDIF-Passthrough-Übertragung.

Diagramm eines PCs, der über ein Koaxialkabel für die S/PDIF-Passthrough-Übertragung mit einem A/V-Empfänger verbunden ist.

Die Abbildung zeigt einen PC, der über ein Koaxialkabel mit einem externen Audio-/Visual-Empfänger (A/V) verbunden ist. Das Kabel verbindet den S/PDIF-Ausgangsport des Audiogeräts des PCs mit dem S/PDIF-Eingangsport des A/V-Empfängers.

Am linken Rand der Abbildung fügt eine Audioanwendung einen Synchronisierungsrahmen aus einem WMA Pro-Audiostream in den Anfang eines 8192-Byte-Puffers ein. (Diese Puffergröße wird ausschließlich zur einfachen Veranschaulichung verwendet. In der Praxis kann stattdessen eine Puffergröße von 4.096 Bytes oder 1.0240 Bytes verwendet werden.) Die Anwendung füllt den verbleibenden Speicherplatz im Puffer mit Nullen aus. Der Audiotreiber programmiert den S/PDIF-Ausgabeport, um den Inhalt des Puffers zu übertragen, als wären sie 8192 Byte pcM-Daten.

Auf ähnliche Weise empfängt der S/PDIF-Eingabeport auf dem A/V-Empfänger den Stream, als wären es 8192 Byte PCM-Daten. Die Daten werden in einen Eingabepuffer geladen, der in diesem Beispiel auch eine Größe von 8192 Bytes hat. Der Decoder extrahiert den WMA Pro-Synchronisierungsrahmen aus dem Eingabepuffer, decodiert den Synchronisierungsrahmen in einen 5,1-Kanal-Audiostream und gibt den Stream über die Surroundlautsprecher am rechten Rand der Abbildung wieder.

Damit der Decoder am anderen Ende der Verbindung weiß, dass der Audiodatenstrom in einem Nicht-PCM-Format vorliegt, sollte der Audiotreiber das /AUDIO-Bit auf dem S/PDIF-Transceiver festlegen. Der Decoder liest dieses Bit aus dem S/PDIF-status-Kanalblock, um zu bestimmen, ob der Datenstrom in einem Nicht-PCM-Format codiert ist. Das Festlegen dieses Bits ist das einzige Besondere, was der Treiber tun muss, um den Nicht-PCM-Stream aufzunehmen. Auf jede andere Weise behandelt der Treiber den Stream so, als ob er PCM-Daten enthält.

Eine Reihe von Consumer-Geräten unterstützt die S/PDIF-Passthrough-Übertragung, aber auch andere digitale Schnittstellen wie USB und 1394 können für die digitale Passthrough-Übertragung von Nicht-PCM-Daten an externe Audiodecoder angepasst werden.

Dolby Laboratories führte 1992 das komprimierte Audioformat AC-3 (Dolby Digital) ein. Die ersten Consumer-A/V-Empfänger, die AC-3 über S/PDIF unterstützen, wurden etwa 1997 verfügbar. Die Softwareunterstützung für das WMA Pro-Audiostreamformat wurde mit der Veröffentlichung der Microsoft Windows Media 9-Serie-Technologie im Jahr 2003 verfügbar. A/V-Empfänger, die WMA Pro-over-S/PDIF unterstützen, wurden 2003 eingeführt.

In Windows XP und höher unterstützen die waveOut-, DirectSound- und DirectShow-APIs Nicht-PCM-Formate. Die DirectSound- und waveOut-APIs sind so implementiert, dass alle PCM- oder Nicht-PCM-Formate, die der Treiber verfügbar macht, automatisch für Clients dieser APIs verfügbar sind.