Condividi tramite


Offload A2DP della banda audio

Questo argomento descrive l'offload A2DP della banda audio, disponibile a partire da Windows 11, build 10.0.22000 per Bluetooth.

L'obiettivo principale dell'offload A2DP della banda audio è ridurre il consumo di energia, ad esempio durante la riproduzione musicale di esempio.

Questo documento presuppone una certa familiarità con la soluzione esistente di banda sideband HF. Vedi Linee guida per il bypass Bluetooth per i driver audio e le specifiche Bluetooth A2DP a cui si fa riferimento nella sezione vedere anche di questo argomento.

Progettazione dell'architettura sideband

L'offload A2DP della banda audio si basa su progettazioni comprovate esistenti per ridurre il consumo di energia durante la riproduzione di contenuti audio lineari tramite altoparlanti integrati (incorporati) o cuffie analogiche connesse. In breve, queste progettazioni scoppiano grandi quantità di dati audio (nell'ordine di un secondo) in un DSP audio tramite un driver audio specifico del fornitore. I processori principali e la maggior parte degli altri circuiti entrano in uno stato di basso consumo mentre il DSP audio trasmette i dati audio con burst attraverso gli altoparlanti incorporati. Quando i dati audio sono quasi esauriti, il DSP genera un interrupt al driver audio che segnala al sistema operativo di eseguire il burst di più dati audio tramite il driver audio al DSP.

I componenti grigio chiaro nel diagramma seguente vengono forniti dal IHV.

Stack di driver audio Bluetooth con un driver IHV usando IOCTLs DDI sideband, un core Bluetooth e un driver di trasporto facoltativo con un controller DSP e Bluetooth nella parte inferiore dello stack

L'offload A2DP della banda audio si basa anche su una progettazione comune per il percorso audio Bluetooth SCO, in cui lo stesso DSP audio è connesso direttamente al controller Bluetooth.

Questa connessione è spesso un'interfaccia I2S o PCM, ma può anche essere un bus più ricco e più complesso, ad esempio SLIMbus. Microsoft fa riferimento a questa architettura come audio sideband, riflettendo il fatto che l'audio trasferisce nel controller Bluetooth (o altro) attraverso un percorso alternativo anziché l'interfaccia del controller normale (HCI). In questo caso, il driver audio trasferisce i dati audio dal sistema operativo al DSP audio, il DSP audio trasferisce i dati sulla connessione sideband al controller del bus hardware e il controller trasmette i dati audio al dispositivo connesso. Per l'audio bidirezionale, si verifica anche la direzione inversa. Anche se sono coinvolti più componenti, questo può avere vantaggi rispetto alla normale interfaccia del controller. In alcuni casi d'uso (principalmente chiamate cellulari), l'intero percorso del segnale audio end-to-end viene gestito dal firmware, scaricato dai processori principali. Può anche fornire un'interfaccia migliore per il trasferimento di dati audio in tempo reale/isocroni da e verso il software host. Per questa connessione sideband, Microsoft definisce un DDI sideband usato dal driver audio per supportare gli endpoint audio con questa progettazione fisica.

Componenti

Driver audio IHV (driver DSP audio)

Questo driver controlla endpoint audio integrati, audio cellulare e HFP/SCO sideband/offload. Questa funzionalità richiede che il driver supporti anche l'offload A2DP. Le responsabilità del conducente sono come quelle per HFP/SCO.

Driver e controller di trasporto Bluetooth IHV

L'offload A2DP non è definito in uno standard SIG Bluetooth. Questa funzionalità migliora e aggiunge comandi HCI Bluetooth definiti da Microsoft. Per supportare questa funzionalità, il controller Bluetooth IHV o un driver IHV supporterà questi comandi.

Driver del profilo A2DP

Questo driver viene fornito da Windows. Le funzioni includono quanto segue.

  • Implementa le specifiche A2DP e AVDTP
  • Espone le istanze dell'interfaccia del dispositivo PnP (interfaccia sideband A2DP) per il driver audio IHV per individuare, aprire e inviare richieste
  • Supporta le richieste IOCTL sideband definite in questo documento
  • Invia comandi HCI Bluetooth definiti da Microsoft per l'offload A2DP

Requisito del driver audio IHV (driver DSP audio)

Se un driver audio in un sistema è configurato per lo streaming sideband A2DP, pubblica un'interfaccia del dispositivo con GUID di classe impostata su GUID_SIDEBANDAUDIO_A2DP_SUPPORT_INTERFACE {2BC51EE4-07AF-49CF-B04B-FB3F1C26AADC}. Questa interfaccia del dispositivo deve essere presente non più tardi dell'avvio PnP del driver audio.

Strutture di dati sideband

Si noti che alcune strutture di dati e costanti usate dal driver audio sono definite nell'intestazione sidebandaudio.h .

Le strutture di dati seguenti vengono usate per l'offload A2DP per la banda audio.

Descrittore di dispositivo - SIDEBANDAUDIO_DEVICE_DESCRIPTOR

Elemento Descrizione
NumberOfEndpoints Indica il numero di endpoint in un dispositivo connesso

Il dispositivo connesso può essere un dispositivo composito contenente più endpoint audio (altoparlante, microfono e così via). Il driver audio può eseguire l'iterazione per ogni endpoint e ottenere altri dettagli per compilare filtri KS per ogni endpoint.

Descrittore endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR

Il SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR viene definito come segue.

Elemento Descrizione
CbSize Dimensioni totali del descrittore endpoint. Questo include il buffer per l'archiviazione delle stringhe.
ContainerId GUID per gli endpoint. Un GUID comune per più endpoint indica che tali endpoint sono contenuti nello stesso contenitore fisico. Il sistema operativo può facilmente associare tali endpoint per diversi scenari.
Categoria KSPIN_DESCRIPTOR. Categoria per indicare il fattore di forma per ogni endpoint.
Direzione Indica la direzione del flusso di dati Capture o Render.
Capabilities (Vedere la tabella seguente)
FriendlyName Nome descrittivo per l'endpoint da applicare al DEVPKEY_DeviceInterface_FriendlyName nell'interfaccia filtro endpoint KS.
VolumePropertyValuesSize Dimensioni della struttura di KSPROPERTY_DESCRIPTION che descrive le istruzioni del volume e l'intervallo per ogni canale.
SidetoneVolumePropertyValueSize Dimensioni della struttura di KSPROPERTY_DESCRIPTION che descrive l'esecuzione del volume e l'intervallo per ogni canale per Sidetone.

Descrittore di endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR - Funzionalità

Le funzionalità sono definite come segue.

Elemento Descrizione
Volume Endpoint supporta il controllo volume
Muto L'endpoint supporta il controllo Disattiva audio
Sidetone Endpoint supporta il controllo Sidetone
Commenti L'endpoint ha associato un canale di feedback

SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2

La banda laterale A2DP usa una versione aggiornata della struttura di SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR esistente per fornire ulteriori informazioni necessarie al sistema audio Windows per l'identificazione degli endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2.

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

Il driver audio ottiene questa struttura di dati usando la nuova richiesta di IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2 . Al termine della richiesta, il driver audio aggiunge queste proprietà del dispositivo all'interfaccia del filtro audio della topologia.

Parametri dell'interfaccia audio

La scelta e la progettazione del trasporto audio tra il dispositivo audio e il controller Bluetooth è specifica del fornitore. Questo trasporto audio è spesso un'interfaccia I2S o PCM, ma può anche essere un bus più ricco e più complesso, ad esempio SLIMbus o potenzialmente SoundWire. Questa progettazione di funzionalità non pone requisiti specifici per il trasporto audio. Tuttavia, se il codec Bluetooth viene implementato nel DSP audio, il controller Bluetooth sarà in grado di estrarre i fotogrammi codificati dai dati trasmessi attraverso il trasporto audio per inserire questi fotogrammi in pacchetti multimediali AVDTP per la trasmissione.

L'installazione e la configurazione (se presenti) del trasporto audio sono considerate attività specifiche del fornitore. Questo è facilitato dai parametri dell'interfaccia audio specifici del fornitore passati tra i componenti in questa funzionalità. I parametri specifici del fornitore sono definiti comunemente dal fornitore del driver audio e dal controller Bluetooth e/o dal fornitore del driver di trasporto. I parametri vengono usati dal dispositivo audio e dal controller Bluetooth per configurare il trasporto audio tra il DSP audio e il controller Bluetooth.

Ad esempio, questi dati possono includere un ID di trasporto se sono presenti più connessioni fisiche o logiche, configurando l'uso di segnali di un'interfaccia PCM o il formato dei dati audio nel trasporto.

Il driver audio imposta e ottiene parametri di interfaccia audio specifici del fornitore usando SIOPs, che identificano i dati usando un GUID e un numero intero. Tuttavia, per mantenere un set di comandi HCI Bluetooth più naturale, i comandi HCI definiti da Microsoft passano parametri di interfaccia audio specifici del fornitore usando la struttura seguente.

Parametro dell'interfaccia audio

Campo Ottetto
ID fornitore 0..3
ID parametro specifico fornitore 4..5
Lunghezza del valore specifico fornitore = (n-9) 6
Valore specifico fornitore 7.. n

Un ID fornitore è definito in Numeri assegnati Bluetooth: https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers.

Il driver A2DP esegue una conversione diretta tra fornitori-SIOPs, che sono una struttura di dati più naturale per il driver audio e un parametro di interfaccia audio più naturale per l'HCI Bluetooth. Il GUID SIOP fornitore viene costruito da un GUID di base più l'ID fornitore Bluetooth a 4 caratteri. Solo l'ID fornitore (non l'intero GUID) passa attraverso l'HCI Bluetooth.

Il GUID di base è SIDEBANDAUDIO_PARAMS_SET_A2DP.

SIOPs A2DP definiti da Microsoft

Microsoft definisce due SIOPs per A2DP che forniscono informazioni sul codec. I fornitori possono definire SIOPs aggiuntivi per supportare l'implementazione.

Codec (codec-SIOP)

Il driver audio esprime il proprio elenco di codec A2DP supportati (se presenti) che usano questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP vengono impostati come segue.

Campo valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODECS (1)
Dimensione Elenco delle dimensioni totali delle funzionalità codec che segue questa intestazione

I dati che seguono questa intestazione sono una sequenza di strutture di funzionalità codec di dimensioni variabili, come descritto in Informazioni sulle funzionalità codec riportate sopra.

Per il resto di questo argomento, questo parametro viene definito codecs-SIOP.

Codec configurato (configured-codec-SIOP)

Il driver audio può recuperare il codec A2DP attualmente configurato usando questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP sono impostati come segue.

Campo valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEANDAUDIO_PARAM_A2DP_CONFIGURED_CODEC (2)
Dimensione Dimensioni totali della funzionalità codec che segue questa intestazione

I dati che seguono questa intestazione sono una singola struttura di funzionalità codec di dimensioni variabili, come descritto nelle informazioni sulle funzionalità del codec riportate in precedenza.

Questo SIOP è aggiornabile, il che significa che il driver audio deve usare la richiesta di IOCTL_SBAUD_GET_SIOP_UPDATE per rimanere informati delle modifiche nel codec configurato.

Per il resto di questo argomento, questo parametro viene definito configurato-codec-SIOP.

Modalità di latenza attiva codec (codec-latency-mode-SIOP)

Il driver audio può recuperare la modalità di latenza attiva del codec A2DP attualmente configurato usando questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP sono impostati come segue.

Campo valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_LATENCY_MODE
Dimensione 1 byte

I dati che seguono questa intestazione sono un singolo byte interpretato come intero senza segno a 8 bit. Il valore SIDEBANDAUDIO_CODEC_MODE_HIGH_QUALITY indica che il codec attualmente configurato funziona in modalità di alta qualità, mentre il valore SIDEBANDAUDIO_CODEC_MODE_LOW_LATENCY indica che il codec funziona in modalità a bassa latenza. Questo SIOP è aggiornabile, il che significa che il driver audio deve usare la richiesta di IOCTL_SBAUD_GET_SIOP_UPDATE per rimanere informati delle modifiche nella modalità di latenza.

Attualmente, questo SIOP viene usato solo quando il codec adattivo aptX è attivo. Per altre informazioni su aptX, vedi Qualcomm aptX Adaptive Audio.

Per il resto di questo argomento, questo parametro viene definito codec-latency-mode-SIOP.

Codec L2CAP MTU size (mtu-size-SIOP)

Il driver audio può recuperare le dimensioni correnti di MTU L2CAP (in byte) usando questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP sono impostati come segue.

Campo valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_MTU_SIZE
Dimensione 2 byte

I dati che seguono questa intestazione sono 2 byte interpretati come un intero senza segno a 16 bit. Questo SIOP è aggiornabile, il che significa che il driver audio deve usare la richiesta di IOCTL_SBAUD_GET_SIOP_UPDATE per rimanere informati delle modifiche apportate alle dimensioni MTU.

Attualmente, questo SIOP viene usato solo quando il codec adattivo aptX è attivo. Per altre informazioni su aptX, vedi Qualcomm aptX Adaptive Audio.

Per il resto di questo argomento, questo parametro viene definito mtu-size-SIOP.

Uso di SIOP definiti dal fornitore

Il driver audio può impostare SIOPs definiti dal fornitore.

Vendor-SIOPs impostata dopo l'apertura dell'interfaccia sideband e prima di IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR

Il driver A2DP salva i valori SIOP in una raccolta di SIOPs del fornitore della configurazione di sistema. Il driver A2DP invia questa raccolta al controller Bluetooth (usando HCI_VS_MSFT_Avdtp_Capabilities_Configuration) durante la gestione IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Tutti i parametri dell'interfaccia audio restituiti dal controller Bluetooth vengono archiviati anche nella raccolta di SIOP del fornitore della configurazione del sistema. Il driver audio può ottenere questi valori in qualsiasi momento al termine dell'IOCTL.

SIOP fornitore impostato dopo IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2

Il driver A2DP ha esito negativo qualsiasi SIOPs inviato dal driver audio dopo IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2.

SIOP fornitore impostato dopo IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR e prima di IOCTL_SBAUD_STREAM_OPEN

Il driver A2DP salva i valori SIOP in una raccolta di SIOPs del fornitore di configurazione di flusso. Il driver A2DP invia questa raccolta al controller Bluetooth (usando HCI_VS_MSFT_Avdtp_Open) durante la gestione IOCTL_SBAUD_STREAM_OPEN. Tutti i parametri dell'interfaccia audio restituiti dal controller Bluetooth vengono archiviati anche nella raccolta di SIOPs del fornitore della configurazione di flusso. Il driver audio può ottenere questi valori in qualsiasi momento al termine dell'IOCTL.

Il driver A2DP cancella la raccolta di SIOP del fornitore di configurazione di flusso durante la gestione di IOCTL_SBAUD_STREAM_CLOSE. Non cancella la raccolta di SIOPs del fornitore della configurazione del sistema.

Interfaccia sideband A2DP

La banda laterale A2DP usa le richieste generiche IOCTL_SBAUD_*. Vedi l'intestazione sidebandaudio.h per un elenco completo dei file IOCTL. In questa sezione vengono fornite informazioni specifiche di A2DP.

Classe di interfaccia PnP

La classe di interfaccia è GUID_DEVINTERFACE_A2DP_SIDEBAND_AUDIO per l'audio Bluetooth a banda laterale A2DP.

IOCTLs usati per le transizioni di stato pin KS

Il driver audio invia queste richieste su determinate transizioni di stato pin KS.

Estensioni HCI Bluetooth definite da Microsoft per l'offload A2DP

Vedere Estensioni HCI Bluetooth definite da Microsoft per le estensioni attualmente definite.

HCI_VS_MSFT_Read_Supported_Features

L'offload A2DP della banda sideband audio migliora il comando HCI_VS_MSFT_Read_Supported_Features definendo un altro bit nel parametro restituito Supported_features per indicare il supporto per i comandi di offload AVDTP. Quando viene restituito questo bit, i comandi rimanenti in questa sezione saranno supportati.

Per una descrizione del comando e dei parametri restituiti, vedere HCI_VS_MSFT_Read_Supported_Features.

Per i valori Supported_features (8 ottetti), vedere anche HCI_VS_MSFT_Read_Supported_Features. Viene usato un valore aggiuntivo per indicare che il controller supporta l'offload AVDTP e i comandi HCI_VS_MSFT_Avdtp_* descritti negli eventi HCI Bluetooth AVDTP definiti da Microsoft.

Bluetooth Host-Controller Interface (HCI) specifica tutte le interazioni tra un host e un controller di radio Bluetooth. Le specifiche Bluetooth consentono ai comandi e agli eventi HCI definiti dal fornitore di abilitare l'interazione non standardizzata tra host e controller. Microsoft definisce comandi ed eventi HCI specifici del fornitore utilizzati da Windows. Il seguente Microsoft definisce i comandi HCI usati per l'offload della banda audio.

I comandi HCI AVDTP seguenti sono descritti nell'argomento Bluetooth - Eventi AvDTP Bluetooth HCI definiti da Microsoft.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

Sottocomando valore del codice operativo: 7

Configura l'interfaccia di trasporto audio e restituisce le funzionalità codec del controller Bluetooth, che è un elenco di blocchi di informazioni sui codec. Ogni blocco di informazioni sul codec descrive un codec supportato. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

HCI_VS_MSFT_Avdtp_Open

Sottocomando valore opcode: 8

Alloca e configura le risorse di offload AVDTP all'interno del controller. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp__Open.

HCI_VS_MSFT_Avdtp_Start

Sottocomando valore del codice operativo: 9

Questo comando avvia lo streaming audio dal trasporto audio ai pacchetti multimediali AVDTP trasmessi. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Valore opcode sottocomando: 0xA

Arresta l'attività di streaming avviata da HCI_VS_MSFT_Avdtp_Start. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Valore opcode sottocomando: 0xB

Rilascia le risorse di offload AVDTP allocate da HCI_VS_MSFT_Avdtp_Open. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Close.

Codec Bluetooth nel controller DSP audio o Bluetooth

L'implementazione supporta codec Bluetooth ospitati nel controller DSP audio e/o Bluetooth. Codec-SIOP fornisce un meccanismo per il driver audio per indicare un elenco di codec supportati. Analogamente, il comando HCI_VS_MS_Avdtp_Capabilities_Configuration consente al controller Bluetooth di restituire un elenco di codec supportati. Nota, almeno uno dei driver A2DP e il controller Bluetooth restituiranno un elenco di codec supportati.

Il driver A2DP non può intersecare o unire in modo affidabile elenchi di codec A2DP supportati sia dal driver audio che dal controller Bluetooth. Se entrambi restituiscono codec supportati da A2DP, Windows usa solo l'elenco restituito dal driver di trasporto Bluetooth.

Se la soluzione IHV richiede l'intersecazione o l'unione di funzionalità correlate al codec delle funzionalità del controller DSP audio e Bluetooth, il driver audio può indicare le sue funzionalità tramite codec-SIOP (se la rappresentazione standard è sufficiente) o un FORNITORE-SIOP. Il driver A2DP passa SIOPs al controller Bluetooth che può quindi intersecare le funzionalità e restituire il set risultante di codec supportati da HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Vedi anche

Estensioni HCI Bluetooth definite da Microsoft

Linee guida per il bypass Bluetooth per i driver audio

Linee guida per la gestione del controllo alimentazione Bluetooth del bus di trasporto

A2DP 1.3.1 (specifica Bluetooth)

AVDTP 1.3 (specifica Bluetooth)