HAL audio HIDL

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.

audio_hal

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 e IPrimaryDevice.hal contengono metodi come setMasterVolume o openInputStream.
  • Gli stream sono unidirezionali e vengono utilizzati da AudioFlinger per inviare o ricevere audio da e verso l'HAL tramite IStream.hal, IStreamOut.hal e IStreamIn.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:

modifica-formato-audio

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 estensibile
  • AudioFormat: fornitore estensibile
  • AudioGainMode
  • 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:

valori-trasmissione-audio

Figura 3. Trasmettere valori enum della stringa.

Ad esempio, per passare un valore del tipo di formato audio dal framework alla fornitore:

  1. Il valore enum di AudioFormat viene convertito in un valore stringa in libaudiohal e viene passato all'HAL.
  2. Sul lato HAL, il wrapper predefinito converte la stringa in un'enumerazione che viene passato all'HAL precedente.
di Gemini Advanced.

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 AudioConfigBasee 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