Поделиться через


S/PDIF Pass-Through передачи потоков, не относящихся к PCM

Формат цифрового интерфейса Sony/Philips (S/PDIF) определяется в основном для передачи аудиоданных PCM, но его можно легко адаптировать для передачи данных, не связанных с PCM. Принцип сквозной передачи S/PDIF заключается в том, что поток данных, отличный от PCM, может проходить через канал S/PDIF, как если бы это был поток PCM. Для сквозной передачи не требуется порты отправки и получения S/PDIF, чтобы понять кодировку потока, не являющегося PCM.

WMA Pro и AC-3 — это сжатые форматы, не являющиеся PCM, которые передают цифровые звуковые потоки в единицах, называемых кадрами синхронизации. Каждый кадр синхронизации содержит собственный заголовок и может быть декодирован независимо от других кадров синхронизации в потоке. Например, при частоте дискретизации 48 кГц кадр синхронизации WMA Pro содержит достаточно данных для воспроизведения 2048 тактов выборки часов (42,67 миллисекунда). При такой же скорости кадр синхронизации AC-3 содержит достаточно данных для 1536 тактов (32 миллисекунда).

При частоте дискретизации 48 кГц 5,1-канальный кадр синхронизации WMA Pro никогда не превышает 8192 байта, что является числом байтов, занятых 2048 стерео (двухканальная), 16-разрядные образцы PCM. Аналогичным образом, 5,1-канальный кадр синхронизации AC-3 никогда не превышает 6144 байт, то есть количество байтов, занятых 1536 стерео- и 16-разрядными образцами PCM. (Существуют исключения из этого правила, но эти типы кадров синхронизации AC-3 очень редки, не могут передаваться по S/PDIF и могут быть проигнорированы здесь.)

Когда аудиопоток WMA Pro или AC-3 с частотой 48 кГц проходит через канал S/PDIF в цифровой форме без декодирования, порты отправки и приема S/PDIF могут обрабатывать поток так же, как стереофонический 16-разрядный поток PCM с частотой 48 кГц. При указании диапазона данных для контакта, который может передавать поток WMA Pro-over-S/PDIF или AC-3-over-S/PDIF, тег формата волн — это единственное, что отличается от диапазона данных для контакта, который передает поток PCM через порт S/PDIF. Пример см. в описании объявлений диапазонов данных в разделе Указание диапазонов данных WMA Pro.

Чтобы избежать доставки сжатого потока WMA Pro через интерфейс S/PDIF быстрее, чем в режиме реального времени (т. е. для предотвращения доставки звука в 43 миллисекундах менее чем за 43 миллисекунд), звуковое приложение должно заполнить кадр синхронизации WMA Pro нулями, пока кадр синхронизации не займет то же количество байтов, что и образцы стерео PCM 2048. Кадр синхронизации AC-3 также должен быть заполнен до размера 1536 образцов стерео PCM.

При попытке отправить кадры синхронизации WMA Pro или AC-3 в драйвер адаптера PortCls, использующий WaveCyclic, имейте в виду, что когда драйвер порта чувствует нехватку данных (поскольку поток данных содержит меньше байтов, чем двухканаловый несжатый поток), он заполняет циклический буфер тишиной. У декодера потока, отличного от PCM, будут возникать проблемы с интерпретацией этих периодов тишины, которые используются в pcm, а не в формате, отличном от PCM.

На следующем рисунке показан пример применения сквозной передачи S/PDIF.

Схема, показывающая компьютер, подключенный к приемнику A/V через коаксиальный кабель для сквозной передачи по протоколу S/PDIF.

На рисунке показан компьютер, подключенный к внешнему аудио- и видеоресиверу через коаксиальный кабель. Кабель подключает выходной порт S/PDIF на звуковом устройстве компьютера к порту ввода S/PDIF на аудиоресурсе.

В левой части рисунка звуковое приложение вставляет кадр синхронизации из аудиопотока WMA Pro в начало 8192-байтового буфера. (Этот размер буфера используется исключительно для удобства иллюстрации. На практике вместо него можно использовать буфер размером 4096 байт или 10240 байт.) Приложение заполняет оставшееся пространство в буфере нулями. Звуковой драйвер программирует выходной порт S/PDIF для передачи содержимого буфера, как если бы они были 8192 байтами данных PCM.

Аналогичным образом входной порт S/PDIF на A/V-приемнике получает поток, как если бы он был 8192 байт данных PCM. Он загружает данные во входной буфер, который в этом примере также имеет размер 8192 байта. Декодер извлекает кадр синхронизации WMA Pro из входного буфера, декодирует кадр синхронизации в 5,1-канальный аудиопоток и воспроизводит поток через динамики окружения на правом краю фигуры.

Чтобы декодер на другом конце подключения знал, что аудиопоток находится в формате, отличном от PCM, звуковой драйвер должен задать бит /AUDIO для приемопередатчика S/PDIF. Декодер считывает этот бит из блока состояния канала S/PDIF, чтобы определить, кодируется ли поток данных в формате, отличном от PCM. Установка этого бита — это единственное, что необходимо сделать драйверу для размещения потока, не являющегося PCM. Во всех остальных случаях драйвер обрабатывает поток так, как будто он содержит данные PCM.

Ряд потребительских устройств поддерживает сквозную передачу S/PDIF, но другие цифровые интерфейсы, такие как USB и 1394, также могут быть адаптированы для цифровой сквозной передачи данных, не связанных с PCM, во внешние звуковые декодеры.

Компания Dolby Laboratories представила сжатый аудиоформат AC-3 (Dolby Digital) в 1992 году. Первые потребительские A/V приемники для поддержки AC-3 по сравнению с S/PDIF стали доступны примерно в 1997 году. Поддержка программного обеспечения для формата аудиопотока WMA Pro стала доступна с выпуском технологии Microsoft Windows Media 9 Series в 2003 году. Приемники A/V, поддерживающие WMA Pro-over-S/PDIF, появились в 2003 году.

В Windows XP и более поздних версиях API waveOut, DirectSound и DirectShow поддерживают форматы, отличные от PCM. API DirectSound и waveOut реализованы таким образом, чтобы любой формат PCM или не pcm, предоставляемый драйвером, автоматически был доступен клиентам этих API.