Рекомендации по потоковой передаче ядра

В этой статье разъясняются требования и особые соображения для потоковой передачи в ядре, связанной с обходом потоковой передачи аудио Bluetooth.

Звуковой драйвер должен полностью поддерживать драйвер порта WaveRT, включая режим извлечения данных. Дополнительные сведения см. в разделе "Знакомство с драйвером порта WaveRT". Несмотря на отсутствие необходимости реализовать аппаратный аудиодвижок для обходного выхода, ориентированного на синхронное подключение (SCO), это не представляет никакого вреда.

Требования к логотипу Windows для поддержки формата включают исключение для Bluetooth.

Звуковой драйвер должен поддерживать форматы, которые возможны через боковое оборудование, обычно 8kHz mono audio streaming.

Топология

Все устройства Bluetooth Hands-Free поддерживают как запись, так и отрисовку. Звуковой драйвер должен предоставлять топологию потоковой передачи ядра (KS) для устройства Hands-Free, как показано на следующей схеме, для поддержки как воспроизведения, так и захвата.

Схема, демонстрирующая топологию KS для звукового драйвера, поддерживающую отрисовку и запись на устройствах Bluetooth Hands-Free.

Заметка: Разработчик звукового драйвера может выбрать, следует ли реализовать один фильтр для отслеживания и отрисовки путей или отдельных фильтров. Однако устройство HFP поддерживает только один файловый объект в интерфейсе устройства GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS. Таким образом, конструктор, использующий два фильтра, должен позволить обоим фильтрам совместно использовать один объект файла.

Узлы DAC и ADC представляют аналоговые и цифровые преобразования, но не поддерживают какие-либо свойства KS.

Узлы тома поддерживают KSPROPERTY_AUDIO_VOLUMELEVEL и KSEVENT_CONTROL_CHANGE путем отправки IOCTLs SETVOLUME и GETVOLUMESTATUSUPDATE драйверу HFP.

Узел тома должен быть реализован следующим образом:

  • Если гарнитура Bluetooth поддерживает управление громкостью, звуковой драйвер должен включать узел громкости в топологию KS. Обработчики свойств громкости аудиодрайвера отправляют вышеупомянутые IOCLTs в драйвер Bluetooth HFP для управления громкостью.
  • Если Bluetooth-гарнитура не реализует аппаратную регулировку громкости, а кодек (или DSP) имеет такую возможность, звуковой драйвер должен обрабатывать управление громкостью в кодеке (или DSP).
  • Если ни гарнитура Bluetooth, ни звуковое устройство не имеют аппаратных регуляторов громкости, узел управления громкостью не должен быть представлен, и Windows вставляет программный узел управления громкостью.
  • Узел заглушки является необязательным. Звуковой драйвер должен реализовать узел отключения звука, если и только если DSP или звуковой кодек предоставляет возможность отключить сигнал обхода PCM перед передачей в контроллер Bluetooth. Узлы приглушения поддерживают KSPROPERTY_AUDIO_MUTE.

Запросы свойств

Звуковой драйвер использует следующие свойства KS для получения сведений о любом звуковом разъеме или разъемах в звуковом пути. Драйвер аудиоустройства также может использовать соответствующий запрос свойства, чтобы подключить или отключить любое устройство Bluetooth в аудиопотоке.

KSPROPERTY_JACK_DESCRIPTION

Это свойство возвращает структуру KSJACK_DESCRIPTION . Звуковой драйвер должен задать поля KSPROPERTY_JACK_DESCRIPTION следующим образом.

  • ChannelMapping = KSAUDIO_SPEAKER_MONO
  • Цвет = 0
  • ConnectionType = eConnTypeOtherDigital
  • GeoLocation = eGeoLocНеПрименимо
  • GenLocation = eGenLocOther
  • PortConnection = ePortConnUnknown
  • IsConnected = <BOOL для текущего состояния подключения>

KSPROPERTY_JACK_DESCRIPTION2

Это свойство возвращает структуру KSJACK_DESCRIPTION2 . Звуковой драйвер должен задать поля KSPROPERTY_JACK_DESCRIPTION2 следующим образом.

  • DeviceStateInfo = 0
  • ВозможностиДжека = JACKDESC2_PRESENCE_DETECT_CAPABILITY

KSPROPERTY_ONESHOT_RECONNECT

Фильтр драйвера звука должен поддерживать KSPROPERTY_ONESHOT_RECONNECT. Чтобы создать и инициализировать эту структуру, звуковой драйвер отправляет IOCTL_BTHHFP_DEVICE_REQUEST_CONNECT драйверу HFP. Драйвер HFP завершает этот запрос, а затем пытается подключиться к звуковому устройству Bluetooth асинхронно.

KSPROPERTY_ONESHOT_DISCONNECT

Фильтр драйвера звука должен поддерживать KSPROPERTY_ONESHOT_DISCONNECT. Чтобы создать и инициализировать эту структуру, звуковой драйвер отправляет IOCTL_BTHHFP_DEVICE_REQUEST_DISCONNECT драйверу HFP. Драйвер HFP завершает этот запрос, а затем пытается отключиться от аудиоустройства Bluetooth асинхронно.

Если звуковой драйвер поддерживает эти свойства, диалоговое окно "Звук" на панели управления предоставляет команды подключения и отключения для конечной точки HFP.

Теория обходного метода потоковой передачи аудио через Bluetooth