Descarregamento A2DP de banda lateral de áudio

Este tópico descreve o descarregamento de áudio em banda lateral A2DP, disponível para Bluetooth no Windows 11, build 10.0.22000.

O objetivo principal do offload de áudio sideband A2DP é reduzir o consumo de energia, por exemplo, durante a reprodução de música.

Este documento pressupõe alguma familiaridade com a solução de sideband HF existente. Consulte as Diretrizes de Bypass Bluetooth para Drivers de Áudio e as especificações Bluetooth A2DP referenciadas na seção consulte também deste tópico.

Arquitetura de Design de Sideband

O offload de sideband de áudio A2DP baseia-se em designs comprovados existentes para reduzir o consumo de energia durante a reprodução de conteúdo de áudio linear por meio de alto-falantes integrados (embutidos) ou fones de ouvido analógicos conectados. Resumindo, esses designs transmitem grandes quantidades de dados de áudio (aproximadamente um segundo) para dentro de um DSP de áudio através de um driver de áudio específico do fornecedor. Os processadores principais e a maioria dos outros circuitos entram em um estado de baixa potência, enquanto o DSP de áudio transmite os dados de áudio intermitidos por meio dos alto-falantes internos. Quando os dados de áudio estão quase esgotados, o DSP gera uma interrupção para o driver de áudio, que sinaliza ao sistema operacional para enviar mais dados de áudio através do driver de áudio para o DSP.

Os componentes cinza claro no diagrama a seguir são fornecidos pelo IHV.

Pilha de driver de áudio Bluetooth com um driver IHV usando IOCTLs DDI de banda lateral, um núcleo Bluetooth e um driver de transporte opcional com um controlador DSP e Bluetooth na parte inferior da pilha

O descarregamento de A2DP na banda lateral de áudio também se baseia em um design comum para o caminho de áudio SCO do Bluetooth, onde o mesmo DSP de áudio está conectado diretamente ao controlador Bluetooth.

Essa conexão geralmente é uma interface I2S ou PCM, mas também pode ser um barramento mais rico e complexo, como o SLIMbus. A Microsoft refere-se a essa arquitetura como sideband audio, refletindo o fato de que o áudio é transferido para o controlador Bluetooth (ou outro) por meio de um caminho alternativo, em vez de pela interface normal do controlador (a "HCI"). Nesse caso, o driver de áudio transfere dados de áudio do sistema operacional para o DSP de áudio, o DSP de áudio transfere dados pela conexão sideband para o controlador do barramento de hardware e o controlador transmite dados de áudio para o dispositivo conectado. (Para áudio bidirecional, a direção inversa também ocorre.) Embora mais componentes estejam envolvidos, isso pode ter vantagens em relação à interface do controlador normal. Em alguns casos de uso (principalmente chamadas de celular), todo o caminho de sinal de áudio de ponta a ponta é gerenciado por firmware, transferido dos processadores principais. Ele também pode gerar uma interface melhor para transferência de dados de áudio em tempo real/isócrono de e para o software host. Para essa conexão de banda lateral, a Microsoft define uma DDI de banda lateral usada pelo driver de áudio para dar suporte a terminais de áudio com esse design físico.

Componentes

Driver de áudio IHV (driver de DSP de áudio)

Esse driver controla interfaces de áudio integradas, áudio em celulares e o sideband/offload de HFP/SCO. Esse recurso requer que o driver também dê suporte ao offload do A2DP. As responsabilidades do motorista são como as do HFP/SCO.

Controlador e driver de transporte Bluetooth IHV

O offload A2DP não é definido em nenhum padrão do SIG Bluetooth. Esse recurso aprimora e adiciona comandos de HCI Bluetooth definidos pela Microsoft. Para dar suporte a esse recurso, o controlador Bluetooth do IHV ou um driver IHV devem dar suporte a esses comandos.

Controlador de perfil A2DP

Esse driver é fornecido pelo Windows. Suas funções incluem o seguinte.

  • Implementa as especificações do A2DP e do AVDTP
  • Expõe instâncias de interface do dispositivo PnP (a interface de sideband A2DP) para que o driver de áudio IHV descubra, abra e envie solicitações
  • Dá suporte às solicitações IOCTL de sideband definidas neste documento
  • Envia comandos HCI Bluetooth, definidos pela Microsoft, para a transferência do A2DP

Requisito do driver de áudio IHV (driver de áudio DSP)

Se um driver de áudio em um sistema estiver configurado para streaming de sideband A2DP, ele deverá publicar uma interface do dispositivo com GUID de classe definido como GUID_SIDEBANDAUDIO_A2DP_SUPPORT_INTERFACE {2BC51EE4-07AF-49CF-B04B-FB3F1C26AADC}. Essa interface do dispositivo deve estar presente até a inicialização PnP do driver de áudio.

Estruturas de dados de sideband

Observe que algumas estruturas de dados e constantes usadas pelo driver de áudio são definidas no cabeçalho sidebandaudio.h .

As estruturas de dados a seguir são usadas para descarregamento A2DP da sideband de áudio.

Descritor de dispositivo – SIDEBANDAUDIO_DEVICE_DESCRIPTOR

Elemento Descrição
NumberOfEndpoints Indica o número de endpoints em um dispositivo conectado

O dispositivo conectado pode ser um dispositivo composto que contém vários pontos de extremidade de áudio (alto-falante, microfone etc.). O driver de áudio pode iterar para cada ponto de extremidade e obter mais detalhes para criar filtros KS para cada ponto de extremidade.

Descritor de Endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR

O SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR é definido da seguinte maneira.

Elemento Descrição
CbSize Tamanho total do Descritor de Endpoint. Isso inclui o buffer para armazenar cadeias de caracteres.
ContainerId GUID para pontos de extremidade. Um GUID comum para vários pontos de extremidade indica que esses pontos de extremidade estão contidos no mesmo contêiner físico. O sistema operacional pode associar facilmente esses pontos de extremidade a vários cenários.
Categoria KSPIN_DESCRIPTOR. Categoria para indicar o fator de forma para cada endpoint.
Direção Indica a direção do fluxo de dados de Captura ou Renderização.
recursos (Consulte a tabela abaixo)
FriendlyName Nome amigável para o endpoint a ser aplicado ao DEVPKEY_DeviceInterface_FriendlyName na interface de filtro KS do endpoint.
VolumePropertyValuesSize Tamanho da estrutura KSPROPERTY_DESCRIPTION que descreve o degrau de volume e o intervalo para cada canal.
SidetoneVolumePropertyValueSize Tamanho da estrutura KSPROPERTY_DESCRIPTION que descreve as etapas e faixas de volume para cada canal do Sidetone.

Descritor de endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR - Capacidades

As capacidades são definidas da seguinte maneira.

Elemento Descrição
volume O endpoint dá suporte ao controle de volume
Mute O Endpoint dá suporte ao controle Mute
Sidetone O endpoint oferece suporte ao controle de sidetone
Comentários O ponto de extremidade tem o canal de comentários associado

SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2

A banda lateral A2DP utiliza uma versão atualizada da estrutura existente SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR para fornecer mais informações necessárias ao sistema de áudio do Windows para identificação do endpoint – SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2.

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

O driver de áudio obtém essa estrutura de dados usando a nova solicitação IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Após a conclusão da solicitação, o driver de áudio adiciona essas propriedades do dispositivo à interface de filtro Topologia de áudio.

Parâmetros de interface de áudio

A escolha e o design do transporte de áudio entre o dispositivo de áudio e o controlador Bluetooth são específicos do fornecedor. Esse transporte de áudio geralmente é uma interface I2S ou PCM, mas também pode ser um barramento mais rico e complexo, como SLIMbus ou potencialmente SoundWire. Este design de funcionalidade não impõe requisitos específicos no transporte de áudio. No entanto, se o codec Bluetooth for implementado no DSP de áudio, o controlador Bluetooth poderá extrair os quadros codificados dos dados transmitidos pelo transporte de áudio para empacotar esses quadros em pacotes de mídia AVDTP para transmissão.

A instalação e a configuração (se houver) do transporte de áudio são consideradas uma tarefa específica do fornecedor. Isso é facilitado por parâmetros de interface de áudio específicos do fornecedor passados entre componentes nesse recurso. Os parâmetros específicos do fornecedor são definidos comumente pelo fornecedor do driver de áudio e pelo fornecedor do controlador Bluetooth e/ou pelo fornecedor do driver de transporte. Os parâmetros são usados pelo dispositivo de áudio e pelo controlador Bluetooth para configurar o transporte de áudio entre o DSP de áudio e o controlador Bluetooth.

Por exemplo, esses dados poderão incluir uma ID de transporte se houver várias conexões físicas ou lógicas, configurando o uso de sinais de uma interface PCM ou o formato dos dados de áudio em todo o transporte.

O driver de áudio define e obtém parâmetros de interface de áudio específicos do fabricante por meio de SIOPs, que identificam os dados usando um GUID e um inteiro. No entanto, para manter um conjunto de comandos de HCI Bluetooth mais natural, os comandos HCI definidos pela Microsoft passam parâmetros de interface de áudio específicos do fornecedor usando a estrutura a seguir.

Parâmetro de interface de áudio

Campo Octeto
ID do fornecedor 0..3
ID do parâmetro específico do fornecedor 4..5
comprimento do valor específico do fornecedor = (n-9) 6
Valor específico do fornecedor 7.. n

Uma ID do fornecedor é conforme definido em Números Atribuídos por Bluetooth: https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers.

O driver A2DP executa uma conversão direta entre vendor-SIOPs, que são estruturas de dados mais naturais para o driver de áudio e um parâmetro de interface de áudio mais natural para o HCI Bluetooth. O GUID SIOP do fornecedor é construído a partir de um GUID base mais um Bluetooth Vendor ID de 4 caracteres. Somente a ID do Fornecedor (não todo o GUID) passa pelo HCI Bluetooth.

O GUID base é SIDEBANDAUDIO_PARAMS_SET_A2DP.

SIOPs do A2DP definidos pela Microsoft

A Microsoft define dois SIOPs para A2DP que fornecem informações de codec. Os fornecedores podem definir SIOPs adicionais para dar suporte à implementação.

Codecs (codecs-SIOP)

O driver de áudio expressa sua lista de codecs A2DP com suporte (se houver) usando esse SIOP. Os campos SIDEBANDAUDIO_IO_PARAM_HEADER para esse SIOP são definidos da seguinte maneira.

Campo Valor
ConjuntoDeParâmetros SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODECS (1)
Tamanho Tamanho total da lista de recursos codec que segue este cabeçalho

Os dados que seguem esse cabeçalho são uma sequência de estruturas de funcionalidade codec (de tamanho variável), conforme descrito nas informações de funcionalidades do Codec acima.

Para o restante deste tópico, esse parâmetro é conhecido como codecs-SIOP.

Codec configurado (configured-codec-SIOP)

O driver de áudio pode recuperar o codec A2DP atualmente configurado usando esse SIOP. Os campos SIDEBANDAUDIO_IO_PARAM_HEADER para esse SIOP são definidos da seguinte maneira.

Campo Valor
ConjuntoDeParâmetros SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEANDAUDIO_PARAM_A2DP_CONFIGURED_CODEC (2)
Tamanho Tamanho total da funcionalidade codec que segue este cabeçalho

Os dados que seguem esse cabeçalho são uma única estrutura de capacidade de codec (de tamanho variável), conforme descrito nas informações de capacidades de codec acima.

Esse SIOP é atualizável, o que significa que o driver de áudio deve usar a solicitação IOCTL_SBAUD_GET_SIOP_UPDATE para se manter informado das alterações no codec configurado.

Para o restante deste tópico, esse parâmetro é chamado de configured-codec-SIOP.

Modo ativo de latência do codec (codec-latency-mode-SIOP)

O driver de áudio pode recuperar o modo de latência ativa do codec A2DP atualmente configurado usando esse SIOP. Os campos SIDEBANDAUDIO_IO_PARAM_HEADER para este SIOP são definidos da seguinte forma.

Campo Valor
ConjuntoDeParâmetros SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_LATÊNCIA_MODO
Tamanho 1 byte

Os dados que seguem esse cabeçalho são um único byte que é interpretado como um inteiro sem sinal de 8 bits. O valor SIDEBANDAUDIO_CODEC_MODE_HIGH_QUALITY indica que o codec atualmente configurado está operando no modo de alta qualidade, enquanto o valor SIDEBANDAUDIO_CODEC_MODE_LOW_LATENCY indica que o codec está operando no modo de baixa latência. Esse SIOP é atualizável, o que significa que o driver de áudio deve usar a solicitação IOCTL_SBAUD_GET_SIOP_UPDATE para se manter informado das alterações no modo de latência.

Atualmente, esse SIOP só é usado quando o codec adaptável aptX está ativo. Para obter mais informações sobre aptX, consulte Qualcomm aptX Adaptive Audio.

Para o restante deste tópico, esse parâmetro é conhecido como codec-latency-mode-SIOP.

Tamanho da MTU do Codec L2CAP (mtu-size-SIOP)

O driver de áudio pode recuperar o tamanho atual da MTU L2CAP (em bytes) usando esse SIOP. Os campos SIDEBANDAUDIO_IO_PARAM_HEADER para esse SIOP são definidos da seguinte maneira.

Campo Valor
ConjuntoDeParâmetros SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_MTU_SIZE
Tamanho 2 bytes

Os dados que seguem esse cabeçalho são 2 bytes interpretados como um inteiro sem sinal de 16 bits. Esse SIOP é atualizável, o que significa que o driver de áudio deve usar a solicitação IOCTL_SBAUD_GET_SIOP_UPDATE para se manter informado das alterações no tamanho da MTU.

Atualmente, esse SIOP só é usado quando o codec adaptável aptX está ativo. Para obter mais informações sobre aptX, consulte Qualcomm aptX Adaptive Audio.

Para o restante deste tópico, esse parâmetro é conhecido como mtu-size-SIOP.

Uso de SIOPs definidos pelo fornecedor

O driver de áudio pode definir SIOPs definidos pelo fornecedor.

Vendor-SIOPs definidos após abrir a interface de sideband e antes de IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR

O driver A2DP salva os valores SIOP em uma coleção de SIOPs do fornecedor de configuração do sistema. O driver A2DP envia essa coleção ao controlador Bluetooth (usando HCI_VS_MSFT_Avdtp_Capabilities_Configuration) durante a manipulação IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Todos os parâmetros de interface de áudio retornados pelo controlador Bluetooth também são armazenados na coleção de SIOPs do fornecedor de configuração do sistema. O driver de áudio pode obter esses valores a qualquer momento após a conclusão do IOCTL.

SIOPs do fornecedor são definidos após IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2

O driver A2DP rejeita quaisquer SIOPs enviados pelo driver de áudio após IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2.

Os SIOPs do fornecedor são definidos após o IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR e antes do IOCTL_SBAUD_STREAM_OPEN.

O driver A2DP salva os valores SIOP em uma coleção de SIOPs do fornecedor de configuração de fluxo. O driver A2DP envia essa coleção para o controlador Bluetooth (usando HCI_VS_MSFT_Avdtp_Open) ao lidar com IOCTL_SBAUD_STREAM_OPEN. Todos os parâmetros de interface de áudio retornados pelo controlador Bluetooth também são armazenados na coleção de SIOPs do fornecedor de configuração de fluxo. O driver de áudio pode obter esses valores a qualquer momento após a conclusão do IOCTL.

O driver A2DP limpa a coleção de SIOPs do fornecedor de configuração de fluxo ao processar IOCTL_SBAUD_STREAM_CLOSE. (Ele não limpa a coleção de SIOPs do fornecedor de configuração do sistema.)

Interface de banda lateral do A2DP

O sideband A2DP usa solicitações IOCTL_SBAUD_* genéricas. Consulte o cabeçalho sidebandaudio.h para obter uma lista completa das IOCTLs. Esta seção fornece informações específicas do A2DP.

Classe de interface PnP

A classe de interface é GUID_DEVINTERFACE_A2DP_SIDEBAND_AUDIO para áudio Bluetooth de sideband A2DP.

IOCTLs usados para transições de estado de pin KS

O driver de áudio envia essas solicitações em determinadas transições de estado de pino KS.

Extensões de HCI Bluetooth definidas pela Microsoft para descarregamento do A2DP

Consulte as extensões de HCI Bluetooth definidas pela Microsoft para as extensões definidas no momento.

HCI_VS_MSFT_Read_Supported_Features

O descarregamento de sideband de áudio A2DP aprimora o comando HCI_VS_MSFT_Read_Supported_Features definindo outro bit no parâmetro de retorno Supported_features para indicar suporte para comandos de descarregamento do AVDTP. Quando esse bit é retornado configurado como ativo, os comandos restantes nesta seção deverão ser suportados.

Para obter uma descrição do comando e dos parâmetros de retorno, consulte HCI_VS_MSFT_Read_Supported_Features.

Para os valores de Supported_features (8 octetos), consulte também HCI_VS_MSFT_Read_Supported_Features. Um valor adicional é usado para indicar que o Controlador dá suporte ao descarregamento AVDTP e aos comandos HCI_VS_MSFT_Avdtp_* descritos em eventos de HCI Bluetooth AVDTP definidos pela Microsoft.

O HCI (Bluetooth Host-Controller Interface) especifica todas as interações entre um host e um controlador de rádio Bluetooth. As especificações de Bluetooth permitem que os comandos e eventos HCI definidos pelo fornecedor habilitem a interação não padronizada entre hosts e controladores. A Microsoft define os comandos e eventos HCI específicos do fornecedor que são consumidos pelo Windows. A Microsoft define os comandos HCI usados para offload de sideband de áudio.

Os comandos HCI do AVDTP a seguir são descritos no tópico Bluetooth – eventos de HCI Bluetooth AVDTP definidos pela Microsoft.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

Valor de opcode de subcomando: 7

Configura a interface de transporte de áudio e retorna recursos codec do controlador Bluetooth, que é uma lista de blocos de informações codec. Cada bloco de informações codec descreve um codec com suporte. Para obter mais informações, consulte HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

HCI_VS_MSFT_Avdtp_Open

Valor de opcode de subcomando: 8

Aloca e configura os recursos de descarregamento do AVDTP dentro do controlador. Para obter mais informações, consulte HCI_VS_MSFT_Avdtp__Open.

HCI_VS_MSFT_Avdtp_Start

Valor de opcode de subcomando: 9

Esse comando inicia o streaming de áudio do transporte de áudio para pacotes de mídia AVDTP transmitidos. Para obter mais informações, consulte HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Valor de opcode de subcomando: 0xA

Interrompe a atividade de streaming iniciada por HCI_VS_MSFT_Avdtp_Start. Para obter mais informações, consulte HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Valor de opcode de subcomando: 0xB

Libera os recursos de descarregamento do AVDTP alocados por HCI_VS_MSFT_Avdtp_Open. Para obter mais informações, consulte HCI_VS_MSFT_Avdtp_Close.

Codecs Bluetooth em DSP de áudio ou controlador Bluetooth

A implementação acomoda codecs Bluetooth hospedados no controlador de áudio DSP e/ou Bluetooth. O codecs-SIOP fornece um mecanismo para que o driver de áudio indique uma lista de codecs com suporte. Da mesma forma, o comando HCI_VS_MS_Avdtp_Capabilities_Configuration permite que o controlador Bluetooth retorne uma lista de codecs com suporte. Observe que pelo menos um do driver A2DP e o controlador Bluetooth devem retornar uma lista de codecs com suporte.

O driver A2DP não consegue de forma confiável cruzar ou mesclar a lista de codecs A2DP compatíveis tanto com o driver de áudio quanto com o controlador Bluetooth. Se ambos retornarem codecs compatíveis com A2DP, o Windows usará apenas a lista retornada pelo driver de transporte Bluetooth.

Se a solução IHV exigir a intersecção ou fusão de capacidades relacionadas ao codec do DSP de áudio e dos recursos do controlador Bluetooth, o driver de áudio poderá indicar suas capacidades por meio do codecs-SIOP (se a representação padrão for suficiente) ou de um SIOP de fornecedor. O driver A2DP passa SIOPs para o controlador Bluetooth, que pode então cruzar os recursos e retornar o conjunto resultante de codecs com suporte de HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Consulte também

Extensões de HCI Bluetooth definidas pela Microsoft

Diretrizes de Bypass Bluetooth para Drivers de Áudio

Diretrizes de tratamento do controle de energia do driver do barramento de transporte para Bluetooth

A2DP 1.3.1 (Especificação bluetooth)

AVDTP 1.3 (Especificação bluetooth)