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


Разгрузка звуковой боковой полосы A2DP

В этом разделе описывается разгрузка звуковой полосы A2DP, которая доступна начиная с Windows 11, сборка 10.0.22000 для Bluetooth.

Основной целью разгрузки звуковой боковой полосы A2DP является сокращение потребления энергии, например во время воспроизведения музыки.

В этом документе предполагается, что некоторые знания о существующем решении боковой полосы HF. См . рекомендации по обходу Bluetooth для звуковых драйверов и спецификации Bluetooth A2DP, указанные в разделе этой статьи.

Проектирование архитектуры боковой полосы

Разгрузка аудиобанда A2DP основана на существующих проверенных конструкциях для уменьшения потребления энергии во время воспроизведения линейного звукового содержимого с помощью интегрированных (встроенных) динамиков или подключенных аналоговых наушников. Вкратце, эти конструкции разорвали большие объемы звуковых данных (в порядке одной секунды) в аудио-DSP через звуковой драйвер для конкретного поставщика. Основные процессоры и большинство других каналов вступают в состояние низкой мощности, в то время как звуковой DSP потоковой передачи всплеска звуковых данных через встроенные динамики. При почти истощении звуковых данных DSP вызывает прерывание звукового драйвера, который сигнализирует ОС о том, чтобы получить больше звуковых данных через звуковой драйвер в DSP.

Светло-серые компоненты на следующей схеме предоставляются IHV.

Стек аудиофайлов Bluetooth с драйвером IHV с помощью бокового модуля ввода-вывода DDI, ядра Bluetooth и дополнительного транспортного драйвера с контроллером DSP и Bluetooth в нижней части стека

Разгрузка звуковой полосы A2DP также строится на стандартном макете для звукового пути Bluetooth SCO, где тот же звуковой DSP подключается непосредственно к контроллеру Bluetooth.

Это подключение часто является интерфейсом I2S или PCM, но также может быть более богатым, более сложным автобусом, например SLIMbus. Корпорация Майкрософт ссылается на эту архитектуру как звук боковой полосы, отражая тот факт, что звук передается в контроллер Bluetooth (или другой) через альтернативный путь, а не обычный интерфейс контроллера (HCI). В этом случае звуковой драйвер передает звуковые данные из ОС в аудио DSP, звуковой DSP передает данные через боковое подключение к контроллеру аппаратной шины, а контроллер передает звуковые данные на подключенное устройство. (Для двунаправленного звука также происходит обратное направление.) Хотя задействованы дополнительные компоненты, это может иметь преимущества по сравнению с обычным интерфейсом контроллера. В некоторых случаях использования (в первую очередь сотовые звонки), весь сквозной путь звукового сигнала обрабатывается встроенного ПО, выгружается из основных процессоров. Кроме того, он может предоставить лучший интерфейс для передачи аудиоданных в программное обеспечение узла в режиме реального времени или из него. Для этого подключения к боковой полосе корпорация Майкрософт определяет DDI боковой полосы, используемый звуковым драйвером для поддержки конечных точек аудио, имеющих этот физический дизайн.

Компоненты

Звуковой драйвер IHV (драйвер аудио DSP)

Этот драйвер управляет интегрированными конечными точками аудио, сотовым звуком и боковой полосой HFP/SCO или разгрузкой. Эта функция требует от драйвера также поддержки разгрузки A2DP. Обязанности водителя похожи на обязанности для HFP/SCO.

Драйвер транспорта и контроллер IHV Bluetooth

Разгрузка A2DP не определена в стандарте Bluetooth SIG. Эта функция улучшает и добавляет определяемые корпорацией Майкрософт команды Bluetooth HCI. Для поддержки этой функции контроллер Bluetooth IHV или драйвер IHV должны поддерживать эти команды.

Драйвер профиля A2DP

Этот драйвер предоставляется Windows. К его функциям относятся следующие функции.

  • Реализует спецификации A2DP и AVDTP
  • Предоставляет экземпляры интерфейса устройства PnP (интерфейс боковой полосы A2DP) для звукового драйвера IHV для обнаружения, открытия и отправки запросов
  • Поддерживает запросы IOCTL на боковой полосе, определенные в этом документе
  • Отправляет определяемые корпорацией Майкрософт команды Bluetooth HCI для разгрузки A2DP

Требование к звуковому драйверу IHV (драйвер аудио DSP)

Если звуковой драйвер в системе настроен для потоковой передачи боковой полосы A2DP, он должен опубликовать интерфейс устройства с ИДЕНТИФИКАТОРом GUID GUID_SIDEBANDAUDIO_A2DP_SUPPORT_INTERFACE класса { 2BC51EE4-07AF-49CF-B04B-FB3F1C26AADC}. Этот интерфейс устройства должен присутствовать не позднее запуска PnP звукового драйвера.

Структуры данных боковой полосы

Обратите внимание, что некоторые структуры данных и константы, используемые звуковым драйвером, определяются в заголовке sidebandaudio.h .

Следующие структуры данных используются для разгрузки звуковой боковой полосы A2DP.

Дескриптор устройства — SIDEBANDAUDIO_DEVICE_DESCRIPTOR

Элемент Description
NumberOfEndpoints Указывает количество конечных точек на подключенном устройстве

Подключенное устройство может быть составным устройством, содержащим несколько конечных точек звука (динамик, микрофон и т. д.). Звуковой драйвер может выполнять итерацию для каждой конечной точки и получить дополнительные сведения о создании фильтров KS для каждой конечной точки.

Дескриптор конечной точки — SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR

SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR определяется следующим образом.

Элемент Description
CbSize Общий размер дескриптора конечной точки. Это включает буфер для хранения строк.
ContainerId GUID для конечных точек. Общий GUID для нескольких конечных точек указывает, что эти конечные точки содержатся в одном физическом контейнере. ОС может легко связать такие конечные точки для различных сценариев.
Категория KSPIN_DESCRIPTOR. Категория, указываемая форм-фактор для каждой конечной точки.
Направление Указывает направление потока данных записи или отрисовки.
Capabilities (См. таблицу ниже)
FriendlyName Понятное имя конечной точки, применяемой к DEVPKEY_DeviceInterface_FriendlyName в интерфейсе фильтра KS конечной точки.
VolumePropertyValuesSize Размер KSPROPERTY_DESCRIPTION структуры, описывающей шаг и диапазон томов для каждого канала.
SidetoneVolumePropertyValueSize Размер KSPROPERTY_DESCRIPTION структуры, описывающей шаг и диапазон томов для каждого канала для Sidetone.

Дескриптор конечной точки — SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR — возможности

Возможности определяются следующим образом.

Элемент Description
Объем Конечная точка поддерживает управление томами
Немой Конечная точка поддерживает функцию "Отключить"
Sidetone Endpoint поддерживает элемент управления Sidetone
Отзывы Конечная точка имеет связанный канал обратной связи

SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2

Боковая полоса A2DP использует обновленную версию существующей структуры SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR для предоставления дополнительных сведений, необходимых звуковой системе Windows для идентификации конечных точек — SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2.

// Number of device properties that shall be added to the audio filter factory interface.
ULONG                                   FilterInterfacePropertyCount;
DEVPROPERTY*                            FilterInterfaceProperties;

Звуковой драйвер получает эту структуру данных с помощью нового запроса IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2 . По завершении запроса звуковой драйвер добавляет эти свойства устройства в его интерфейс аудиофильтра топологии.

Параметры звукового интерфейса

Выбор и проектирование аудиотранспорта между звуковым устройством и контроллером Bluetooth зависит от поставщика. Этот аудиотранспорт часто является интерфейсом I2S или PCM, но также может быть более богатым, более сложным автобусом, например SLIMbus или потенциально SoundWire. Эта функция не предъявляет особых требований к звуковому транспорту. Однако если кодек Bluetooth реализован в звуковом DSP, контроллер Bluetooth должен извлечь закодированные кадры из данных, передаваемых через аудиотранспорт, чтобы упаковать эти кадры в пакеты мультимедиа AVDTP для передачи.

Настройка и настройка (если таковой) аудиотранспорта считается задачей конкретного поставщика. Это упрощается параметрами звукового интерфейса для конкретного поставщика, передаваемыми между компонентами в этой функции. Параметры, относящиеся к поставщику, обычно определяются поставщиком звуковых драйверов и контроллером Bluetooth и /или поставщиком транспортных драйверов. Параметры используются звуковым устройством и контроллером Bluetooth для настройки аудиотранспорта между звуковым контроллером DSP и Bluetooth.

Например, эти данные могут содержать идентификатор транспорта, если существует несколько физических или логических подключений, настройка использования сигналов интерфейса PCM или формат звуковых данных в транспорте.

Наборы звуковых драйверов и получение параметров звукового интерфейса для конкретного поставщика с помощью SIOPs, которые определяют данные с помощью GUID и целого числа. Однако для поддержания более естественного набора команд Bluetooth HCI определяемые корпорацией Майкрософт команды HCI передают параметры звукового интерфейса для конкретного поставщика, используя следующую структуру.

Параметр звукового интерфейса

Поле Октет
Идентификатор поставщика 0..3
Идентификатор конкретного параметра поставщика 4..5
Длина конкретного значения поставщика = (n-9) 6
Значение конкретного поставщика 7.. n

Идентификатор поставщика определяется в номерах, назначенных Bluetooth: https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers

Драйвер A2DP выполняет прямое преобразование между поставщиком-SIOPs, которые являются более естественной структурой данных для звукового драйвера и параметром звукового интерфейса, который более естественно для Bluetooth HCI. GUID поставщика SIOP создается из базового GUID и 4-символьного идентификатора поставщика Bluetooth. Только идентификатор поставщика (не весь GUID) передается через Bluetooth HCI.

Базовый GUID .SIDEBANDAUDIO_PARAMS_SET_A2DP

Определяемые корпорацией Майкрософт SIOP

Корпорация Майкрософт определяет два SIOP для A2DP, которые предоставляют сведения о кодеке. Поставщики могут определять дополнительные SIOPs для поддержки их реализации.

Codecs (codecs-SIOP)

Звуковой драйвер выражает список поддерживаемых кодеков A2DP (при наличии) с помощью этого SIOP. Поля SIDEBANDAUDIO_IO_PARAM_HEADER для этого SIOP задаются следующим образом.

Поле значение
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODECS (1)
Размер Общий размер списка возможностей кодека, который следует этому заголовку

Данные, следующие за этим заголовком, — это последовательность структур возможностей кодека (переменная размера), как описано выше в сведениях о возможностях Codec.

Для остальной части этого раздела этот параметр называется кодеками SIOP.

Настроенный кодек (configured-codec-SIOP)

Звуковой драйвер может получить настроенный в данный момент кодек A2DP с помощью этого SIOP. Поля SIDEBANDAUDIO_IO_PARAM_HEADER для этого SIOP задаются следующим образом.

Поле значение
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEANDAUDIO_PARAM_A2DP_CONFIGURED_CODEC (2)
Размер Общий размер возможности кодека, которая следует этому заголовку

Данные, следующие за этим заголовком, — это отдельная (переменная размер) структура возможностей кодека, как описано в приведенных выше сведениях о возможностях кодека.

Этот SIOP является обновляемым, что означает, что звуковой драйвер должен использовать запрос IOCTL_SBAUD_GET_SIOP_UPDATE , чтобы оставаться в курсе изменений в настроенном кодеке.

Для остальной части этого раздела этот параметр называется настроенным codec-SIOP.

Режим активной задержки codec (codec-latency-mode-SIOP)

Звуковой драйвер может получить активный режим задержки текущего настроенного кодека A2DP с помощью этого SIOP. Поля SIDEBANDAUDIO_IO_PARAM_HEADER для этого SIOP задаются следующим образом.

Поле значение
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_LATENCY_MODE
Размер 1 байт

Данные, следующие за этим заголовком, являются одним байтом, интерпретируемым как 8-разрядное целое число без знака. Значение SIDEBANDAUDIO_CODEC_MODE_HIGH_QUALITY указывает, что в настоящее время настроенный кодек работает в режиме высокого качества, а значение SIDEBANDAUDIO_CODEC_MODE_LOW_LATENCY указывает, что кодек работает в режиме низкой задержки. Этот SIOP является обновляемым, что означает, что звуковой драйвер должен использовать запрос IOCTL_SBAUD_GET_SIOP_UPDATE , чтобы оставаться в курсе изменений в режиме задержки.

В настоящее время этот SIOP используется только в том случае, если адаптивный кодек aptX активен. Дополнительные сведения об aptX см. в разделе Qualcomm aptX Adaptive Audio.

Для остальной части этого раздела этот параметр называется codec-latency-mode-SIOP.

Размер MTU Codec L2CAP (mtu-size-SIOP)

Звуковой драйвер может получить текущий размер MTU L2CAP (в байтах) с помощью этого SIOP. Поля SIDEBANDAUDIO_IO_PARAM_HEADER для этого SIOP задаются следующим образом.

Поле значение
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_MTU_SIZE
Размер 2 байта

Данные, следующие за этим заголовком, — 2 байта, которые интерпретируются как целое число без знака. Этот SIOP является обновляемым, что означает, что звуковой драйвер должен использовать запрос IOCTL_SBAUD_GET_SIOP_UPDATE , чтобы оставаться в курсе изменений в размере MTU.

В настоящее время этот SIOP используется только в том случае, если адаптивный кодек aptX активен. Дополнительные сведения об aptX см. в разделе Qualcomm aptX Adaptive Audio.

Для остальной части этого раздела этот параметр называется MTU-size-SIOP.

Использование определяемых поставщиком SIOPs

Звуковой драйвер может задать определяемые поставщиком SIOPs.

Поставщик-SIOPs устанавливается после открытия интерфейса боковой полосы и до IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR

Драйвер A2DP сохраняет значения SIOP в коллекции SIOP поставщика системной конфигурации. Драйвер A2DP отправляет эту коллекцию на контроллер Bluetooth (с помощью HCI_VS_MSFT_Avdtp_Capabilities_Configuration) при обработке IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Все параметры звукового интерфейса, возвращаемые контроллером Bluetooth, также хранятся в коллекции SIOP поставщика конфигурации системы. Звуковой драйвер может получить эти значения в любое время после завершения IOCTL.

Поставщик SIOPs задан после IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2

Драйвер A2DP завершается сбоем любых SIOPs, отправленных звуковым драйвером после IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2.

Поставщик SIOPs устанавливается после IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR и до IOCTL_SBAUD_STREAM_OPEN

Драйвер A2DP сохраняет значения SIOP в коллекции SIO-адресов поставщика конфигурации потоков. Драйвер A2DP отправляет эту коллекцию контроллеру Bluetooth (с помощью HCI_VS_MSFT_Avdtp_Open) при обработке IOCTL_SBAUD_STREAM_OPEN. Все параметры звукового интерфейса, возвращаемые контроллером Bluetooth, также хранятся в коллекции SIOP поставщика конфигурации потока. Звуковой драйвер может получить эти значения в любое время после завершения IOCTL.

Драйвер A2DP очищает коллекцию SIOP поставщика конфигурации потоков при обработке IOCTL_SBAUD_STREAM_CLOSE. (Не удаляет коллекцию SIOPs поставщика конфигурации системы.)

Интерфейс боковой полосы A2DP

В боковой полосе A2DP используются универсальные запросы IOCTL_SBAUD_*. Полный список операций ввода-вывода см. в заголовке sidebandaudio.h . В этом разделе содержатся сведения, относящиеся к A2DP.

Класс интерфейса PnP

Класс интерфейса предназначен GUID_DEVINTERFACE_A2DP_SIDEBAND_AUDIO для звука Bluetooth боковой полосы A2DP.

IoCTLs, используемые для переходов состояния закреплений KS

Звуковой драйвер отправляет эти запросы на определенные переходы состояния пин-кода KS.

Определенные корпорацией Майкрософт расширения Bluetooth HCI для разгрузки A2DP

Ознакомьтесь с расширениями Bluetooth HCI, определенными корпорацией Майкрософт, для определенных в настоящее время расширений.

HCI_VS_MSFT_Read_Supported_Features

Разгрузка аудиобанда A2DP улучшает HCI_VS_MSFT_Read_Supported_Features команду, определяя другой бит в параметре возврата Supported_features , чтобы указать поддержку команд разгрузки AVDTP. Если этот бит возвращается, остальные команды в этом разделе будут поддерживаться.

Описание команд и параметров возврата см . в HCI_VS_MSFT_Read_Supported_Features.

Для значений Supported_features (8 октетов) также см . HCI_VS_MSFT_Read_Supported_Features. Дополнительное значение используется для указания того, что контроллер поддерживает разгрузку AVDTP и команды HCI_VS_MSFT_Avdtp_*, описанные в событиях Bluetooth HCI, определенных корпорацией Майкрософт.

Интерфейс bluetooth Host-Controller (HCI) указывает все взаимодействия между узлом и радио контроллером Bluetooth. Спецификации Bluetooth позволяют определяемым поставщиком командам и событиям HCI обеспечить нестандартное взаимодействие между узлами и контроллерами. Корпорация Майкрософт определяет команды и события HCI для конкретного поставщика, используемые Windows. Следующая команда Майкрософт определяет команды HCI для разгрузки звуковой боковой полосы.

В разделе Bluetooth описаны следующие команды AVDTP HCI. События AVDTP Bluetooth HCI, определенные корпорацией Майкрософт.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

Значение opcode подкоманда: 7

Настраивает интерфейс аудиотранспорта и возвращает возможности кодека контроллера Bluetooth, который является списком блоков сведений кодека. Каждый блок сведений кодека описывает один поддерживаемый кодек. Дополнительные сведения см. в HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

HCI_VS_MSFT_Avdtp_Open

Значение opcode подкоманда: 8

Выделяет и настраивает ресурсы разгрузки AVDTP в контроллере. Дополнительные сведения см. в HCI_VS_MSFT_Avdtp__Open.

HCI_VS_MSFT_Avdtp_Start

Значение opcode подкоманда: 9

Эта команда начинает потоковую передачу звука из аудиотранспорта на передаваемые пакеты мультимедиа AVDTP. Дополнительные сведения см. в HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Значение opcode подкоманда: 0xA

Останавливает действие потоковой передачи, инициированное HCI_VS_MSFT_Avdtp_Start. Дополнительные сведения см. в HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Значение opcode подкоманда: 0xB

Освобождает ресурсы разгрузки AVDTP, выделенные HCI_VS_MSFT_Avdtp_Open. Дополнительные сведения см. в HCI_VS_MSFT_Avdtp_Close.

Кодеки Bluetooth в звуковом DSP или контроллере Bluetooth

Реализация размещает кодеки Bluetooth, размещенные в звуковом контроллере DSP и /или Bluetooth. Кодекс-SIOP предоставляет механизм для звукового драйвера для указания списка поддерживаемых кодеков. Аналогичным образом команда HCI_VS_MS_Avdtp_Capabilities_Configuration позволяет контроллеру Bluetooth возвращать список поддерживаемых кодеков. Обратите внимание, что по крайней мере один из драйверов A2DP и контроллер Bluetooth возвращает список поддерживаемых кодеков.

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

Если решение IHV требует взаимодействия или объединения возможностей, связанных с кодеком возможностей аудио DSP и контроллера Bluetooth, звуковой драйвер может указать свои возможности через кодекс-SIOP (если стандартное представление достаточно) или поставщика SIOP. Драйвер A2DP передает SIOPs контроллеру Bluetooth, который затем может пересекать возможности и возвращать результирующий набор поддерживаемых кодеков из HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

См. также

Определенные корпорацией Майкрософт расширения Bluetooth HCI

Рекомендации по обходу Bluetooth для звуковых драйверов

Рекомендации по обработке драйвера транспортной шины для управления питанием Bluetooth

A2DP 1.3.1 (спецификация Bluetooth)

AVDTP 1.3 (спецификация Bluetooth)