Compartir a través de


Descarga de banda lateral de audio A2DP

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

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

En este documento se presupone cierta familiaridad con la solución de banda lateral HF existente. Consulte Directrices de omisión de Bluetooth para controladores de audio y las especificaciones de Bluetooth A2DP a las que se hace referencia en la sección Consultar también de este tema.

Diseño de la arquitectura de banda lateral

La descarga de banda lateral de audio A2DP se basa en diseños probados existentes 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 en ráfagas grandes cantidades de datos de audio (del orden de un segundo) en un DSP de audio a través de un controlador de audio específico del fabricante. Los procesadores principales y la mayoría del resto de circuitos pasan a un estado de bajo consumo mientras el DSP de audio transmite los datos de audio en ráfaga 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.

IHV proporciona componentes grises claros en el diagrama siguiente.

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

La descarga de banda lateral de audio A2DP también se basa en un diseño común para la ruta de audio BLUETOOTH SCO, 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 los datos de audio del sistema operativo al DSP de audio, el DSP de audio transfiere los datos a través de la conexión de banda lateral al controlador de bus de hardware y el controlador transmite los 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/isócronos hacia y desde el software de host. Para esta conexión de banda lateral, Microsoft define un DDI de banda lateral usado por el controlador de audio para admitir puntos finales de audio que tengan este diseño físico.

Componentes

Controlador de audio IHV (controlador DSP de audio)

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

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. Entre sus funciones figuran las siguientes.

  • 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 la transmisión de banda lateral A2DP, publicará una interfaz de dispositivo con el GUID de clase establecido en GUID_SIDEBANDAUDIO_A2DP_SUPPORT_INTERFACE {2BC51EE4-07AF-49CF-B04B-FB3F1C26AADC}. Esta interfaz de dispositivo debe estar presente a más tardar en el inicio PnP del controlador de audio.

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 banda lateral de audio A2DP.

Descriptor de dispositivo: SIDEBANDAUDIO_DEVICE_DESCRIPTOR

Elemento Descripción
NumberOfEndpoints 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 de conexión: SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR

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 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 que indica el factor de forma para cada punto de conexión.
Dirección Indica la dirección del flujo de datos de captura o representación.
Capabilities (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 estructura KSPROPERTY_DESCRIPTION que describe la ejecución paso a paso del volumen y el intervalo de cada canal.
SidetoneVolumePropertyValueSize Tamaño de estructura KSPROPERTY_DESCRIPTION que describe la ejecución paso a paso del 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 siguiente manera.

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 punto de conexión admite el control 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 existente SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR para proporcionar más información que necesita el sistema de audio de Windows para la identificación del punto final - 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 de 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 audio topología.

Parámetros de 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. Este diseño no impone requisitos específicos al transporte de audio. Sin embargo, si el códec Bluetooth se implementa en el DSP de audio, el controlador Bluetooth deberá ser capaz de extraer las tramas codificadas de los datos transmitidos a través del transporte de audio para empaquetar estas tramas en paquetes de medios AVDTP para su transmisión.

La instalación y configuración (en su caso) 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 ID de transporte si hay varias conexiones físicas o lógicas, configurar 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 SIOP, que identifican los datos usando 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
ID 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 ID 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 vendor-SIOP, 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 la HCI Bluetooth. El GUID SIOP del proveedor se construye a partir de un GUID base más un ID de proveedor Bluetooth de 4 caracteres. Solo el ID del proveedor (no todo el GUID) pasa a través de Bluetooth HCI.

La dirección 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 admitir 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 Value
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODECS (1)
Size 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 Value
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEANDAUDIO_PARAM_A2DP_CONFIGURED_CODEC (2)
Size Tamaño total de la funcionalidad del códec que sigue a este encabezado

Los datos que siguen a este encabezado son una sola estructura de funcionalidad de códec (de tamaño variable), como se describe en Información sobre las 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 de códec (codec-latencia-mode-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 Value
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_LATENCY_MODE
Size 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, consulte Qualcomm aptX Adaptive Audio.

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

Tamaño MTU L2CAP del códec (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 Value
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_MTU_SIZE
Size 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 MTU.

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

En 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.

SiOP de proveedor establecidos después de abrir la interfaz de banda lateral y antes de IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR

El controlador A2DP guarda los valores de SIOP en una colección de SIOP del proveedor de configuración del sistema. El controlador A2DP envía esta colección al controlador Bluetooth (mediante HCI_VS_MSFT_Avdtp_Capabilities_Configuration) mientras gestiona 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 SIOP 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.

SIOP 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.

SIOP del proveedor establecido 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 SIOP del proveedor de configuración de transmisión. El controlador A2DP envía esta colección al controlador Bluetooth (mediante HCI_VS_MSFT_Avdtp_Open) mientras gestiona IOCTL_SBAUD_STREAM_OPEN. Los parámetros de interfaz de audio devueltos por el controlador Bluetooth también se almacenan en la colección de SIOP del proveedor de configuración de transmisión. 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 transmisión cuando gestiona IOCTL_SBAUD_STREAM_CLOSE. (No borra la colección de SIOP 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 IOCTL. Esta sección 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.

IOCTL que se usan para transiciones de estado de pin KS

El controlador de audio envía estas solicitudes en determinadas transiciones de estado de pin 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_Read_Supported_Features

La descarga A2DP de banda lateral de audio mejora el comando HCI_VS_MSFT_Read_Supported_Features definiendo otro bit en el parámetro de devolución de Supported_features para indicar la compatibilidad con los comandos de descarga 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.

Para ver los valores de Supported_features (8 octetos), consulte también HCI_VS_MSFT_Read_Supported_Features. Se usa un valor adicional para indicar que el controlador admite la descarga de AVDTP y los comandos HCI_VS_MSFT_Avdtp_* que se describen en los eventos de Bluetooth HCI de AVDTP definidos por Microsoft.

La interfaz del controlador de host de Bluetooth (HCI) especifica todas las interacciones entre un host y un controlador de radio Bluetooth. Las especificaciones Bluetooth permiten el uso de comandos y eventos HCI definidos por el proveedor para posibilitar una interacción no estandarizada entre hosts y controladores. Microsoft define los comandos y eventos de HCI específicos del proveedor que consume Windows. Los siguientes comandos HCI definidos por Microsoft 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

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

Configura la interfaz de transporte de audio y devuelve las capacidades 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 la transmisión 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 de código de operación de subcomando: 0xA

Detiene la actividad de transmisión 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. Codecs-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 fusionar de forma fiable listas de códecs A2DP admitidos tanto por el controlador de audio como por 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 combinación de las capacidades relacionadas con el códec del DSP de audio y las capacidades del controlador Bluetooth, entonces el controlador de audio puede indicar sus capacidades a través del codecs-SIOP (si la representación estándar es suficiente) o de un vendor-SIOP. El controlador A2DP pasa los SIOP al controlador Bluetooth, que puede intersecar las capacidades y devolver el conjunto resultante de códecs admitidos de HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Consulte también

Extensiones HCI Bluetooth definidas por Microsoft

Directrices de omisión de Bluetooth HFP para controladores de audio

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

A2DP 1.3.1 (Especificación Bluetooth)

AVDTP 1.3 (Especificación Bluetooth)