Указание диапазонов данных AC-3
Файл заголовка Mmreg.h определяет значение, 0x0092 быть тегом формата волны для AC-3-over-S/PDIF:
#define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092
Теги в формате волн, 0x0240 и 0x0241, являются синонимами 0x0092 и многие приложения DVD рассматривают эти три тега как идентичные. Однако, чтобы исключить избыточность, драйверы и приложения должны поддерживать только 0x0092 тегов (а не теги 0x0240 и 0x0241).
Соответствующий GUID подтипа формата можно указать в виде тега wave-format с помощью макроса DEFINE_WAVEFORMATEX_GUID из файла заголовка Ksmedia.h следующим образом:
#define KSDATAFORMAT_SUBTYPE_AC3_SPDIF \
DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)
В следующем примере кода показано, как драйвер miniport WaveCyclic или WavePci может указать записи таблицы KSDATARANGE_AUDIO для закрепления, поддерживающего формат AC-3-over-S/PDIF:
static KSDATARANGE_AUDIO PinDataRangesAC3Stream[] =
{
// 48-kHz AC-3 over S/PDIF
{
{
sizeof(KSDATARANGE_AUDIO),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
},
2, // Max number of channels
16, // Minimum number of bits per sample
16, // Maximum number of bits per channel
48000, // Minimum rate
48000 // Maximum rate
},
// If you do not include this second data range (which is identical
// to the first except for the value KSDATAFORMAT_SPECIFIER_DSOUND),
// then your non-PCM pin is not seen by DirectSound on Windows 98 SE
// or Windows 2000, regardless of the DirectX version or whether a
// hotfix or service pack is installed.
{
{
sizeof(KSDATARANGE_AUDIO),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_DSOUND)
},
2, // Max number of channels
16, // Minimum number of bits per sample
16, // Maximum number of bits per channel
48000, // Minimum rate
48000 // Maximum rate
}
};
Вторая запись диапазона данных в предыдущей таблице необходима, чтобы включить DirectSound для обработки формата AC-3-over-S/PDIF в Windows 2000 с пакетом обновления 2 (SP2) и в Microsoft Windows 98 SE + исправление.
Для каждого диапазона данных, заданного драйвером мини-порта с помощью KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, драйвер порта автоматически добавляет второй диапазон данных, указанный с помощью KSDATAFORMAT_SPECIFIER_DSOUND но в противном случае идентичен первому. (Это можно проверить с помощью служебной программы KsStudio для просмотра списка диапазонов данных.) В Windows 2000 и Windows 98 драйвер порта создает KSDATAFORMAT_SPECIFIER_DSOUND версии диапазонов данных только для KSDATAFORMAT_SUBTYPE_PCM форматов, так как версии DirectSound до DirectSound 8 поддерживают только PCM. Это ограничение снимается в Windows XP и более поздних версиях, а также в Windows Me. Однако он не удаляется в Windows 2000 с пакетом обновления 2 (SP2) или пакетом горячего исправления для Windows 98 SE. Для поддержки directSound в этих версиях Windows драйвер должен явно перечислить два диапазона данных для каждого формата данных, отличного от PCM: один с KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, а другой с KSDATAFORMAT_SPECIFIER_DSOUND.
Как описано в разделе S/PDIF Pass-Through передачи потоков, отличных от PCM, два диапазона данных AC-3-over-S/PDIF используют следующие параметры PCM: два канала и 16 бит на канал.