Descarga de banda lateral de audio A2DP

En este tema se describe la descarga de banda lateral A2DP de audio, que está disponible a partir de Windows 11, compilación 10.0.22000 para Bluetooth.

El objetivo principal de la descarga de banda lateral A2DP de audio es reducir el consumo de energía, por ejemplo, durante la reproducción de música de ejemplo.

En este documento se presupone cierta familiaridad con la solución de banda lateral HF existente. Consulta las directrices para omitir Bluetooth en los controladores de audio y las especificaciones de Bluetooth A2DP a las que se hace referencia en la sección ver también de este tema.

Diseño de arquitectura de banda lateral

La descarga lateral A2DP de audio se basa en diseños probados para reducir el consumo de energía durante la reproducción de contenido de audio lineal a través de altavoces integrados o auriculares analógicos conectados. En resumen, estos diseños transmiten grandes cantidades de datos de audio (en el orden de un segundo) a un DSP de audio a través de un controlador de audio específico del proveedor. Los procesadores principales y la mayoría de los demás circuitos entran en un estado de baja potencia mientras el DSP de audio transmite los datos de audio discontinuos a través de los altavoces integrados. Cuando los datos de audio están casi agotados, el DSP genera una interrupción en el controlador de audio que indica al sistema operativo que expanda más datos de audio a través del controlador de audio al DSP.

El IHV proporciona componentes grises claros en el diagrama siguiente.

Pila de controladores de audio Bluetooth con un controlador IHV que utiliza IOCTLs de banda lateral DDI, un núcleo Bluetooth y un controlador de transporte opcional, con un DSP y un controlador de Bluetooth en la parte inferior de la pila

La descarga A2DP de la banda lateral de audio también se basa en un diseño común para la ruta de audio SCO de Bluetooth, donde el mismo DSP de audio está conectado directamente al controlador Bluetooth.

Esta conexión suele ser una interfaz I2S o PCM, pero también puede ser un bus más rico y complejo, como SLIMbus. Microsoft hace referencia a esta arquitectura como audio de banda lateral, lo que refleja el hecho de que el audio se transfiere al controlador Bluetooth (u otro) a través de una ruta alternativa en lugar de la interfaz del controlador normal (la "HCI"). En este caso, el controlador de audio transfiere datos de audio del sistema operativo al DSP de audio, el DSP de audio transfiere datos a través de la conexión de banda lateral al controlador de bus de hardware y el controlador transmite datos de audio al dispositivo conectado. (En el caso del audio bidireccional, también se produce la dirección inversa). Aunque hay más componentes implicados, esto puede tener ventajas sobre la interfaz del controlador normal. En algunos casos de uso (principalmente llamadas móviles), la ruta de acceso completa de la señal de audio de un extremo a otro se controla mediante firmware, descargado de los procesadores principales. También puede proporcionar una mejor interfaz para la transferencia de datos de audio en tiempo real o isócrono hacia y desde el software host. Para esta conexión de banda lateral, Microsoft define un DDI de banda lateral que usa el controlador de audio para admitir puntos de conexión de audio que tienen este diseño físico.

Componentes

Controlador de audio IHV (controlador DSP de audio)

Este controlador gestiona puntos de conexión de audio integrados, audio celular y banda lateral/descarga HFP/SCO. Esta característica requiere que el controlador también admita la descarga de A2DP. Las responsabilidades del conductor son como las de HFP/SCO.

Controlador y controlador de transporte Bluetooth IHV

La descarga de A2DP no se define en ningún estándar de Bluetooth SIG. Esta característica mejora y agrega comandos Bluetooth HCI definidos por Microsoft. Para admitir esta característica, el controlador Bluetooth de IHV o un controlador IHV admitirán estos comandos.

Controlador de perfil A2DP

Windows proporciona este controlador. Sus funciones incluyen lo siguiente.

  • Implementa las especificaciones A2DP y AVDTP
  • Expone instancias de interfaz de dispositivo PnP (la interfaz de banda lateral A2DP) para que el controlador de audio IHV detecte, abra y envíe solicitudes.
  • Admite las solicitudes IOCTL de banda lateral definidas en este documento.
  • Envía comandos de Bluetooth HCI definidos por Microsoft para la descarga de A2DP

Requisito del controlador de audio IHV (controlador DSP de audio)

Si un controlador de audio de un sistema está configurado para el streaming de banda lateral A2DP, publicará una interfaz de dispositivo con el GUID de clase establecido GUID_SIDEBANDAUDIO_A2DP_SUPPORT_INTERFACE en {2BC51EE4-07AF-49CF-B04B-FB3F1C26AADC}. Esta interfaz de dispositivo debería estar presente a más tardar en el inicio del controlador de audio PnP.

Estructuras de datos de banda lateral

Tenga en cuenta que algunas estructuras de datos y constantes usadas por el controlador de audio se definen en el encabezado sidebandaudio.h .

Las siguientes estructuras de datos se usan para la descarga de subbanda A2DP de audio.

Descriptor de dispositivo : SIDEBANDAUDIO_DEVICE_DESCRIPTOR

Elemento Descripción
NúmeroDePuntosFinales Indica el número de puntos de conexión en un dispositivo conectado.

El dispositivo conectado puede ser un dispositivo compuesto que contiene varios puntos de conexión de audio (altavoz, micrófono, etc.). El controlador de audio puede iterar para cada punto de conexión y obtener más detalles para compilar filtros KS para cada punto de conexión.

Descriptor de Punto Final - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR

El SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR se define de la manera siguiente.

Elemento Descripción
CbSize Tamaño total del descriptor de punto de conexión. Esto incluye el búfer para almacenar cadenas.
ContainerId GUID para los puntos de conexión. Un GUID común para varios puntos de conexión indica que esos puntos de conexión están incluidos en el mismo contenedor físico. El sistema operativo puede asociar fácilmente estos puntos de conexión para varios escenarios.
Categoría KSPIN_DESCRIPTOR. Categoría para indicar el factor de forma para cada punto de conexión.
Dirección Indica la dirección del flujo de datos de captura o renderización.
Capacidades (Consulte la tabla siguiente)
FriendlyName Nombre descriptivo para que el punto de conexión se aplique al DEVPKEY_DeviceInterface_FriendlyName en la interfaz de filtro KS del punto de conexión.
VolumePropertyValuesSize Tamaño de la estructura KSPROPERTY_DESCRIPTION que describe el paso y el rango del volumen para cada canal.
SidetoneVolumePropertyValueSize Tamaño de la estructura KSPROPERTY_DESCRIPTION que describe el ajuste de volumen y el intervalo de cada canal para Sidetone.

Descriptor de punto de conexión : SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR : funcionalidades

Las funcionalidades se definen de la manera siguiente.

Elemento Descripción
Volumen El punto de conexión admite el control de volumen
Silencio El punto de conexión admite el control Silenciar
Sidetone El endpoint admite el control del Sidetone
Comentarios El punto de conexión tiene asociado el canal de comentarios

SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2

La banda lateral A2DP usa una versión actualizada de la estructura de SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR existente para proporcionar más información necesaria por el sistema de audio de Windows para la identificación del punto de conexión: SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2.

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

El controlador de audio obtiene esta estructura de datos mediante la nueva solicitud IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Tras la finalización de la solicitud, el controlador de audio agrega estas propiedades del dispositivo a su interfaz de filtro de topología de audio.

Parámetros de la interfaz de audio

La elección y el diseño del transporte de audio entre el dispositivo de audio y el controlador Bluetooth es específico del proveedor. Este transporte de audio suele ser una interfaz I2S o PCM, pero también puede ser un bus más rico y complejo, como SLIMbus o potencialmente SoundWire. El diseño de esta función no impone ningún requisito específico en el transporte de audio. Sin embargo, si el códec Bluetooth se implementa en el DSP de audio, el controlador Bluetooth podrá extraer los fotogramas codificados de los datos transmitidos a través del transporte de audio para empaquetar estos fotogramas en paquetes multimedia AVDTP para la transmisión.

La configuración y configuración (si existe) del transporte de audio se considera una tarea específica del proveedor. Esto lo facilitan los parámetros de interfaz de audio específicos del proveedor que se pasan entre los componentes de esta característica. Los parámetros específicos del proveedor se definen normalmente por el proveedor del controlador de audio y el controlador bluetooth o el proveedor del controlador de transporte. El dispositivo de audio y el controlador Bluetooth usan los parámetros para configurar el transporte de audio entre el DSP de audio y el controlador Bluetooth.

Por ejemplo, estos datos pueden incluir un identificador de transporte si hay varias conexiones físicas o lógicas, configurando el uso de señales de una interfaz PCM o el formato de los datos de audio a través del transporte.

El controlador de audio establece y obtiene parámetros de interfaz de audio específicos del proveedor mediante SIOPs, que identifican los datos mediante un GUID y un entero. Sin embargo, para mantener un conjunto de comandos de Bluetooth HCI más natural, los comandos HCI definidos por Microsoft pasan parámetros de interfaz de audio específicos del proveedor mediante la siguiente estructura.

Parámetro de interfaz de audio

Campo Octeto
Id. de proveedor 0..3
Identificador de parámetro específico del proveedor 4..5
Longitud del valor específico del proveedor = (n-9) 6
Valor específico del proveedor 7.. n

Un identificador de proveedor es tal como se define en Números asignados por Bluetooth: https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers.

El controlador A2DP realiza una conversión directa entre los SIOPs de proveedor, que son una estructura de datos más natural para el controlador de audio, y un parámetro de interfaz de audio que es más natural para el HCI de Bluetooth. El GUID de SIOP del proveedor se construye a partir de un GUID base más un identificador de proveedor Bluetooth de 4 caracteres. Solo el identificador del proveedor (no todo el GUID) pasa a través de Bluetooth HCI.

El GUID base es SIDEBANDAUDIO_PARAMS_SET_A2DP.

SIOP de A2DP definidos por Microsoft

Microsoft define dos SIOP para A2DP que proporcionan información de códec. Los proveedores pueden definir SIOP adicionales para apoyar su implementación.

Códecs (codecs-SIOP)

El controlador de audio expresa su lista de códecs A2DP admitidos (si los hay) mediante este SIOP. Los campos SIDEBANDAUDIO_IO_PARAM_HEADER para este SIOP se establecen de la manera siguiente.

Campo Importancia
ConjuntoDeParámetros SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODECS (1)
Tamaño Tamaño total de la lista de funcionalidades de códec que sigue a este encabezado

Los datos que siguen a este encabezado son una secuencia de estructuras de funcionalidad de códec (de tamaño variable), como se describe en Información sobre las funcionalidades de códec anterior.

En el resto de este tema, este parámetro se conoce como codecs-SIOP.

Códec configurado (configured-codec-SIOP)

El controlador de audio puede recuperar el códec A2DP configurado actualmente mediante este SIOP. Los campos SIDEBANDAUDIO_IO_PARAM_HEADER para este SIOP se establecen de la manera siguiente.

Campo Importancia
ConjuntoDeParámetros SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEANDAUDIO_PARAM_A2DP_CONFIGURED_CODEC (2)
Tamaño Tamaño total de la funcionalidad del códec que sigue a este encabezado

Los datos que siguen a este encabezado son una estructura de funcionalidad de códec única (de tamaño variable), tal como se describe en la información de funcionalidades de códec anterior.

Este SIOP es actualizable, lo que significa que el controlador de audio debe usar la solicitud de IOCTL_SBAUD_GET_SIOP_UPDATE para mantenerse informado de los cambios en el códec configurado.

Para el resto de este tema, este parámetro se conoce como configured-codec-SIOP.

Modo de latencia activa del códec (modo-latencia-códec-SIOP)

El controlador de audio puede recuperar el modo de latencia activa del códec A2DP configurado actualmente mediante este SIOP. Los campos SIDEBANDAUDIO_IO_PARAM_HEADER para este SIOP se establecen de la manera siguiente.

Campo Importancia
Conjunto de Parámetros SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_LATENCY_MODE
Tamaño 1 byte

Los datos que siguen a este encabezado son un solo byte que se interpreta como un entero de 8 bits sin signo. El valor SIDEBANDAUDIO_CODEC_MODE_HIGH_QUALITY indica que el códec configurado actualmente funciona en modo de alta calidad, mientras que el valor SIDEBANDAUDIO_CODEC_MODE_LOW_LATENCY indica que el códec funciona en modo de baja latencia. Este SIOP es actualizable, lo que significa que el controlador de audio debe usar la solicitud de IOCTL_SBAUD_GET_SIOP_UPDATE para mantenerse informado de los cambios en el modo de latencia.

Actualmente, este SIOP solo se usa cuando el códec adaptable aptX está activo. Para obtener más información sobre aptX, vea Qualcomm aptX Adaptive Audio.

Para el resto de este tema, este parámetro se conoce como codec-latency-mode-SIOP.

Tamaño de MTU de códec L2CAP (mtu-size-SIOP)

El controlador de audio puede recuperar el tamaño de MTU L2CAP actual (en bytes) mediante este SIOP. Los campos SIDEBANDAUDIO_IO_PARAM_HEADER para este SIOP se establecen de la manera siguiente.

Campo Importancia
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_códec_tamaño_MTU_SIZE
Tamaño 2 bytes

Los datos que siguen a este encabezado son 2 bytes que se interpretan como un entero de 16 bits sin signo. Este SIOP es actualizable, lo que significa que el controlador de audio debe usar la solicitud de IOCTL_SBAUD_GET_SIOP_UPDATE para mantenerse informado de los cambios en el tamaño de MTU.

Actualmente, este SIOP solo se usa cuando el códec adaptable aptX está activo. Para obtener más información sobre aptX, vea Qualcomm aptX Adaptive Audio.

Para el resto de este tema, este parámetro se conoce como mtu-size-SIOP.

Uso de SIOP definidos por el proveedor

El controlador de audio puede establecer SIOP definidos por el proveedor.

SiOPs de proveedor se configuran después de abrir la interfaz sideband y antes de IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR.

El controlador A2DP guarda los valores de SIOP en una colección de SIOPs de configuración del sistema del proveedor. El controlador A2DP envía esta colección al controlador Bluetooth mediante HCI_VS_MSFT_Avdtp_Capabilities_Configuration mientras maneja IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Los parámetros de interfaz de audio devueltos por el controlador Bluetooth también se almacenan en la colección de SIOPs del proveedor de configuración del sistema. El controlador de audio puede obtener estos valores en cualquier momento después de que se complete el IOCTL.

SIOPs de proveedor establecidos después de IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2

El controlador A2DP produce un error en los SIOP enviados por el controlador de audio después de IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2.

SIOPs del proveedor establecidos después de IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR y antes de IOCTL_SBAUD_STREAM_OPEN

El controlador A2DP guarda los valores de SIOP en una colección de SIOPs de configuración de flujos del proveedor. El controlador A2DP envía esta colección al controlador Bluetooth (mediante HCI_VS_MSFT_Avdtp_Open) mientras controla IOCTL_SBAUD_STREAM_OPEN. Los parámetros de la interfaz de audio devueltos por el controlador Bluetooth también se almacenan en la colección de SIOPs del proveedor de configuración de flujo. El controlador de audio puede obtener estos valores en cualquier momento después de que se complete el IOCTL.

El controlador A2DP borra la colección de SIOPs del proveedor de configuración de flujo al controlar IOCTL_SBAUD_STREAM_CLOSE. (No borra la colección de SIOPs del proveedor de configuración del sistema).

Interfaz de banda lateral A2DP

La banda lateral A2DP usa las solicitudes genéricas IOCTL_SBAUD_*. Consulte el encabezado sidebandaudio.h para obtener una lista completa de los IOCTLs. En esta sección se proporciona información específica de A2DP.

Clase de interfaz PnP

La clase de interfaz es GUID_DEVINTERFACE_A2DP_SIDEBAND_AUDIO para audio Bluetooth de banda lateral A2DP.

IOCTLs que se usan para transiciones de estado de pin KS

El controlador de audio envía estas solicitudes en determinadas transiciones de estado de patilla KS.

Extensiones de Bluetooth HCI definidas por Microsoft para la descarga de A2DP

Consulte Extensiones de Bluetooth HCI definidas por Microsoft para las extensiones definidas actualmente.

HCI_VS_MSFT_Leer_Características_Soportadas

La función de traslado A2DP de la banda lateral de audio mejora el comando HCI_VS_MSFT_Read_Supported_Features al definir otro bit en el parámetro de devolución Supported_features para indicar la compatibilidad con los comandos de traslado de AVDTP. Cuando se devuelve este bit establecido, se admitirán los comandos restantes de esta sección.

Para obtener una descripción del comando y los parámetros devueltos, consulte HCI_VS_MSFT_Read_Supported_Features.

Consulte también los valores de Supported_features (8 octetos) en HCI_VS_MSFT_Read_Supported_Features. Se utiliza un valor adicional para indicar que el Controlador admite la descarga de AVDTP y los comandos HCI_VS_MSFT_Avdtp_* descritos en eventos de Bluetooth HCI de AVDTP definidos por Microsoft.

Bluetooth Host-Controller Interface (HCI) especifica todas las interacciones entre un host y un controlador de radio Bluetooth. Las especificaciones de Bluetooth permiten que los eventos y comandos HCI definidos por el proveedor habiliten la interacción no estandarizada entre hosts y controladores. Microsoft define eventos y comandos HCI específicos del proveedor que Windows consume. Los siguientes comandos de Microsoft definen HCI se usan para la descarga de banda lateral de audio.

Los siguientes comandos de AVDTP HCI se describen en el tema Bluetooth: eventos de Bluetooth HCI de AVDTP definidos por Microsoft.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

El valor del código de operación del subcomando: 7

Configura la interfaz de transporte de audio y devuelve funcionalidades de códec del controlador Bluetooth, que es una lista de bloques de información de códec. Cada bloque de información de códec describe un códec admitido. Para obtener más información, consulte HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

HCI_VS_MSFT_Avdtp_Open

Valor de código de operación de subcomando: 8

Asigna y configura los recursos de descarga de AVDTP dentro del controlador. Para obtener más información, consulte HCI_VS_MSFT_Avdtp__Open.

HCI_VS_MSFT_Avdtp_Start

Valor de código de operación de subcomando: 9

Este comando inicia el streaming de audio desde el transporte de audio a los paquetes multimedia avDTP transmitidos. Para obtener más información, consulte HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Valor del código de operación del subcomando: 0xA

Detiene la actividad de streaming iniciada por HCI_VS_MSFT_Avdtp_Start. Para obtener más información, consulte HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Valor de código de operación de subcomando: 0xB

Libera los recursos de descarga de AVDTP asignados por HCI_VS_MSFT_Avdtp_Open. Para obtener más información, consulte HCI_VS_MSFT_Avdtp_Close.

Códecs Bluetooth en el DSP de audio o en el controlador Bluetooth

La implementación admite códecs Bluetooth hospedados en el DSP de audio o controlador Bluetooth. El códecs-SIOP proporciona un mecanismo para que el controlador de audio indique una lista de códecs admitidos. Del mismo modo, el comando HCI_VS_MS_Avdtp_Capabilities_Configuration permite al controlador Bluetooth devolver una lista de códecs admitidos. Tenga en cuenta que al menos uno de los controladores A2DP y el controlador Bluetooth devolverán una lista de códecs admitidos.

El controlador A2DP no puede intersecar o combinar de forma confiable listas de códecs A2DP compatibles con el controlador de audio y el controlador Bluetooth. Si ambos devuelven códecs compatibles con A2DP, Windows solo usa la lista devuelta por el controlador de transporte Bluetooth.

Si la solución IHV requiere la intersección o fusión de las capacidades relacionadas con códecs del DSP de audio y del controlador Bluetooth, el controlador de audio puede indicar sus capacidades a través de códecs-SIOP (si la representación estándar es suficiente) o un SIOP de proveedor. El controlador A2DP pasa SIOPs al controlador Bluetooth, que puede entonces intersectar las capacidades y devolver el conjunto resultante de códecs admitidos de HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Consulte también

Extensiones de Bluetooth HCI definidas por Microsoft

Directrices de omisión de Bluetooth para controladores de audio

Directrices de control de alimentación del controlador de bus de transporte para Bluetooth

A2DP 1.3.1 (especificación bluetooth)

AVDTP 1.3 (especificación bluetooth)