In Android 13 e versioni precedenti, l'interfaccia Audio HAL
definiti utilizzando HIDL nei file HIDL HAL (con il
.hal
) e
Schemi XSD per
di configurazione, come mostrato di seguito.
Figura 1. Interfaccia audio HAL.
File di configurazione
I file di configurazione XML dei criteri audio e degli effetti audio fanno parte dell'interfaccia Audio HIDL HAL. Questi file devono essere conformi ai rispettivi schemi e la conformità viene verificata tramite test VTS.
Come parte dell'implementazione dell'audio HIDL HAL, devi creare un
file di configurazione dei criteri audio
che descrive la topologia audio. Le funzionalità HAL audio devono essere dichiarate in
il file audio_policy_configuration.xml
affinché il framework possa utilizzarli.
API Audio HIDL HAL
Questa sezione descrive le API Core, Effetti e Common HAL per l'HIDL.
HAL principale
Di seguito sono riportate alcune interfacce chiave di Core HAL che utilizzano l'HIDL:
IDeviceFactory.hal
è il punto di accesso all'API.IDevice.hal
eIPrimaryDevice.hal
contengono metodi comesetMasterVolume
oopenInputStream
.- Gli stream sono unidirezionali e vengono utilizzati da AudioFlinger per inviare o ricevere
audio da e verso l'HAL tramite
IStream.hal
,IStreamOut.hal
eIStreamIn.hal
.
Nella tabella seguente viene elencata la posizione dei componenti HIDL principali dell'HAL:
Componente HAL principale | Posizione |
---|---|
Versione più recente dell'API | /hardware/interfaces/audio/6.0
|
Tipi specifici dell'ultima API Core HAL | /hardware/interfaces/audio/6.0/types.hal
|
Schema XSD del file di configurazione dei criteri audio | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd
|
L'implementazione predefinita dell'API Core HAL (/hardware/interfaces/audio/core/all-versions/default/
)
è un wrapper per l'implementazione dell'HAL pre-Treble utilizzando
librerie condivise legacy.
L'implementazione predefinita può essere considerata un riferimento anche quando
implementare nuove versioni degli HAL audio che interagiscono con i driver del kernel
.
Effetti HAL
La tabella seguente elenca la posizione di utili componenti HAL degli effetti utilizzando HIDL:
Componente HAL degli effetti | Posizione |
---|---|
Versione più recente dell'API | /hardware/interfaces/audio/effect/6.0/
|
Schema XSD del file di configurazione degli effetti | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
Per ulteriori informazioni, vedi un'implementazione di esempio del
API Effects HAL all'indirizzo /hardware/interfaces/audio/effect/all-versions/default/
e nella sezione Effetti audio.
HAL comune
L'API Common HAL che utilizza l'HIDL contiene quanto segue:
- Definizioni (
/hardware/interfaces/audio/common/6.0/types.hal
) condivise da le API Core ed Effect. - Utilità (
/hardware/interfaces/audio/common/all-versions
) usate per aiutarti codifica rispetto alle API HIDL per implementazioni, client e test.
Aggiornamenti ad Audio HAL V7
Sono state apportate modifiche significative alla versione 7 dell'HAL audio in: Android 12 come descritto in questa sezione. Audio HAL V7 effettua le seguenti operazioni:
- Unifica i modelli dei dati utilizzati dal framework e dall'HAL.
- Riduce al minimo la duplicazione tra i tipi di dati HIDL (enum) e lo schema XML. utilizzata per la configurazione dei criteri audio.
In particolare, le modifiche vengono apportate nelle seguenti aree di Audio HAL V7:
Queste modifiche vengono discusse in modo più dettagliato nelle rispettive sezioni.
Enumerazioni
A partire da Audio HAL V7, i tipi enumerati utilizzati nella configurazione dei criteri audio vengono definiti solo nello schema XSD e non nell'HIDL.
In Audio HAL V6, i valori dei tipi enum (come AudioFormat
) in types.hal
sono
definita anche nello schema XSD del file di configurazione dei criteri audio, creando un
duplicati. Per evitare questo problema nella V7, i tipi di enum vengono modificati in string
e
tutti i possibili valori di enumerazione sono invece elencati nello schema XSD.
La Figura 2 confronta alcune delle modifiche al tipo di enum AudioFormat
nella versione V7:
Figura 2. Confronto di alcune modifiche all'enumerazione Formato audio.
Consulta l'elenco seguente per i tipi di enum che sono stati convertiti in
string
:
AudioChannelMask
AudioContentType
AudioDevice
: fornitore estensibileAudioFormat
: fornitore estensibileAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Passare i valori enum della stringa
I valori stringa vengono utilizzati per trasferire informazioni come valori di enumerazione su al limite dell'interfaccia HAL. Sia il framework che Il wrapper HAL utilizza valori enum interi per l'implementazione della logica di business e impiega l'approccio alla conversione descritto nella Figura 3:
Figura 3. Trasmettere valori enum della stringa.
Ad esempio, per passare un valore del tipo di formato audio dal framework alla fornitore:
- Il valore enum di
AudioFormat
viene convertito in un valore stringa inlibaudiohal
e viene passato all'HAL. - Sul lato HAL, il wrapper predefinito converte la stringa in un'enumerazione che viene passato all'HAL precedente.
Modifiche allo schema XML
Avere elenchi completi di valori enum nella definizione di schema XML (XSD) consente per migliorare la convalida dei file XML di configurazione dei criteri audio da parte di VTS. Abbiamo realizzato modifiche nel file di configurazione dei criteri audio utilizzato con HAL V7 per rispettare le XSD.
Nella versione V7, viene utilizzato un carattere ␣
(spazio) standard per delimitare gli elenchi di valori in
(come frequenze di campionamento, maschere del canale e flag), anziché ,
(virgola) e |
(barra verticale) utilizzati nella versione V6 e precedenti. Come si vede nelle
nell'esempio seguente, uno spazio viene utilizzato per delimitare l'elenco di valori per
channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
Per apportare modifiche al simbolo, utilizza uno script di conversione automatico chiamato
update_audio_policy_config.sh
. Vedi il seguente comando per convertire una V6
di configurazione dei criteri audio in una versione V7 per il dispositivo Pixel 5 (Redfin):
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
Tipi di dati
Abbiamo ridefinito alcune strutture di dati nella versione 7 per ridurre al minimo i duplicati le tue definizioni. Tuple ripetute di elementi di dati vengono raggruppate insieme in elementi riutilizzabili strutture. Queste strutture di dati utilizzano le più recenti funzionalità HIDL, come le unioni sicure.
Ad esempio, nella versione V6 e precedenti, un triplo di <format, sampling rate, channel mask>
è spesso utilizzato nelle interfacce e nei tipi HIDL. Per rimuovere questa ridondanza, in
V7, il tipo di dati AudioConfigBase
e altri tipi di dati sono definiti come segue:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
usata da
AudioConfig
,AudioOffloadInfo
,AudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
sostituisce le raccolte libere in
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
sostituisce i sindacati in
AudioPort/PortConfig
Tag del fornitore
Oltre ai tipi e ai formati di dispositivi, i fornitori possono aggiungere tag personalizzati per l'audio traccia dei metadati.
Per i metadati delle tracce di riproduzione e registrazione, i fornitori possono trasmettere i propri tag, che vengono utilizzati per aggiungere attributi agli stream I/O audio dalle app all'HAL.
I tag dei fornitori per i metadati delle tracce di riproduzione vengono aggiunti come illustrato di seguito esempio:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
La struttura RecordTrackMetadata
viene implementata in modo simile
con l'aggiunta di tag specifici
per i metadati della traccia di registrazione.
Spaziatura dei nomi delle estensioni del fornitore
A partire dall'HAL V7, le estensioni del fornitore richiedono un prefisso {vendor}
aggiuntivo
non richiesto nella V6. Affinché il prefisso {vendor}
sia valido, questo deve essere
tre o più caratteri alfanumerici.
Utilizza il seguente formato in V7:
VX_{vendor}_{letters/numbers}
Di seguito sono riportati alcuni esempi di estensioni di fornitori V7 valide:
VX_GOOGLE_VR
VX_QCI_AMBIENT_MIC
Informazioni sulla versione
Nella tabella seguente sono elencati i numeri di versione dell'HAL per ogni release di Android:
Versione di Android | Versione HIDL HAL |
---|---|
Android 13 | 7.1 |
Android 12 | 7,0 |
Android 11 | 6.0 |
Android 10 | 5,0 |
Android 9 | 4.0 |
Android 8.0 | 2,0 |