HIDL Audio HAL

In Android 13 und niedriger ist die Audio-HAL-Schnittstelle definiert mit HIDL in HIDL HAL-Dateien (mit dem Erweiterung .hal) und XSD-Schemas für wie im Folgenden dargestellt.

Audio-Hall

Abbildung 1: Audio-HAL-Schnittstelle.

Konfigurationsdateien

XML-Konfigurationsdateien für Audiorichtlinien und Audioeffekte werden als Teil betrachtet der Audio HIDL HAL-Schnittstelle. Diese Dateien müssen ihrem Schema entsprechen. die Konformität durch VTS-Tests überprüft wird.

Als Teil der Implementierung des Audio-HIDL HAL müssen Sie ein Konfigurationsdatei für Audiorichtlinie der die Audiotopologie beschreibt. Audio-HAL-Funktionen müssen deklariert werden in in der Datei audio_policy_configuration.xml, damit das Framework sie verwenden kann.

Audio HIDL HAL API

In diesem Abschnitt werden die Core, Effects und Common HAL APIs für HIDL beschrieben.

Core-HAL

Im Folgenden sind einige der wichtigsten Schnittstellen von Core HAL unter Verwendung von HIDL aufgeführt:

  • IDeviceFactory.hal ist der Einstiegspunkt in die API.
  • IDevice.hal und IPrimaryDevice.hal enthalten Methoden wie setMasterVolume oder openInputStream.
  • Streams sind unidirektional und werden von AudioFlinger zum Senden oder Empfangen von Audio zum und vom HAL über IStream.hal, IStreamOut.hal und IStreamIn.hal

In der folgenden Tabelle sind die Speicherorte nützlicher Core HAL HIDL-Komponenten aufgeführt:

HAL-Hauptkomponente Standort
Neueste Version der API /hardware/interfaces/audio/6.0
Für die neueste Core HAL API spezifische Typen /hardware/interfaces/audio/6.0/types.hal
XSD-Schema für die Konfigurationsdatei für die Audiorichtlinie /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

Die Standardimplementierung der Core HAL API (/hardware/interfaces/audio/core/all-versions/default/) ist ein Wrapper um die HAL-Implementierung vor Höhen mithilfe von alte gemeinsam genutzte Bibliotheken. Die Standardimplementierung kann auch als Referenz betrachtet werden, wenn Implementierung neuer Versionen von Audio-HALs, die mit Kernel-Treibern interagieren .

Effekt HAL

In der folgenden Tabelle ist aufgeführt, wo sich nützliche Effekt-HAL-Komponenten mithilfe von HIDL:

HAL-Komponente für Effekte Standort
Neueste Version der API /hardware/interfaces/audio/effect/6.0/
Effektkonfigurationsdatei XSD-Schema /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

Weitere Informationen finden Sie in der Beispielimplementierung des Effects HAL API unter /hardware/interfaces/audio/effect/all-versions/default/ und im Abschnitt Audioeffekte.

Allgemeine HAL

Das Common HAL API mit HIDL enthält Folgendes:

  • Definitionen (/hardware/interfaces/audio/common/6.0/types.hal), die von die Core API und die Effect API.
  • Zur Unterstützung verwendete Dienstprogramme (/hardware/interfaces/audio/common/all-versions) HIDL APIs für Implementierungen, Clients und Tests.

Updates für Audio HAL V7

Es wurden wesentliche Änderungen an Version 7 des Audio-HAL in Android 12, wie in diesem Abschnitt beschrieben. Das Audio HAL V7 hat folgende Eigenschaften:

  • Vereinheitlicht die vom Framework und HAL verwendeten Datenmodelle.
  • Minimiert die Duplikation zwischen HIDL-Datentypen (Enums) und dem XML-Schema für die Konfiguration der Audiorichtlinie.

Insbesondere werden Änderungen in den folgenden Bereichen in Audio HAL V7 vorgenommen:

Diese Änderungen werden in den entsprechenden Abschnitten ausführlicher erörtert.

Aufzählungen

Ab Audio HAL V7 werden bei der Konfiguration der Audiorichtlinie verwendete Aufzählungstypen verwendet nur im XSD-Schema und nicht im HIDL definiert werden.

In Audio HAL V6 sind Werte von enum-Typen (z. B. AudioFormat) in types.hal wie folgt: auch in der Konfigurationsdatei der Audiorichtlinie im XSD-Schema definiert. Duplikation. Um dies in V7 zu vermeiden, werden die enum-Typen in string geändert und Stattdessen werden alle möglichen Aufzählungswerte im XSD-Schema aufgelistet.

In Abbildung 2 werden einige der Änderungen am Enum-Typ AudioFormat in V7 verglichen:

Audioformat-Änderung

Abbildung 2: Vergleich einiger Änderungen an der Aufzählung „AudioFormat“

In der folgenden Liste sind die enum-Typen aufgeführt, die in string:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice: Anbieter erweiterbar
  • AudioFormat: Anbieter erweiterbar
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

Enum-Werte von Strings übergeben

Stringwerte werden zum Übertragen von Informationen als Aufzählungswerte zwischen der HAL-Schnittstelle ein. Sowohl das Framework als auch das HAL-Wrapper verwenden ganzzahlige Aufzählungswerte für die Implementierung der Geschäftslogik und verwenden der in Abbildung 3 dargestellten Conversion-Ansatz:

Werte für die Audioweitergabe

Abbildung 3: String-Enum-Werte übergeben.

Um beispielsweise einen Wert des Audioformattyps vom Framework an den Anbieter:

  1. Der ENUM-Wert AudioFormat wird in einen Stringwert in libaudiohal und wird an den HAL übergeben.
  2. Auf der HAL-Seite wandelt der Standard-Wrapper die Zeichenfolge in eine Aufzählung um. der an das alte HAL übergeben wird.

Änderungen am XML-Schema

Eine vollständige Liste der Aufzählungswerte in der XML-Schemadefinition (XSD) ermöglicht für eine bessere Validierung der XML-Datei für die Konfiguration der Audiorichtlinien durch VTS. Wir haben Änderungen an der Konfigurationsdatei der Audiorichtlinie, die mit HAL V7 verwendet wird, um XSD

In V7 wird das Standardzeichen (Leerzeichen) zum Trennen von Wertelisten in Attribute (wie Stichprobenraten, Kanalmasken und Flags) anstelle des Attributs , (Komma) und | (vertikaler Strich) in V6 und niedriger. Wie in den Im folgenden Beispiel wird die Liste der Werte für channelMasks:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Verwenden Sie zum Ändern des Symbols ein automatisches Konvertierungsskript namens update_audio_policy_config.sh Mit folgendem Befehl können Sie eine V6-Datei konvertieren Konfigurationsdatei der Audiorichtlinie in eine V7-Version für das Pixel 5 (Redfin):

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

Datentypen

Wir haben einige Datenstrukturen in V7 neu definiert, um doppelte Definitionen. Wiederverwendbare Tupel von Datenelementen werden zu einem Strukturen. Diese Datenstrukturen nutzen die neuesten HIDL-Funktionen wie sichere Unions.

In V6 und niedriger ist beispielsweise ein Dreifach von <format, sampling rate, channel mask> wird häufig in den HIDL-Schnittstellen und -Typen verwendet. Um diese Redundanz zu entfernen, V7 werden der Datentyp AudioConfigBase und andere Datentypen so definiert:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    verwendet von AudioConfig, AudioOffloadInfo, AudioPortConfig

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    ersetzt lose Sammlungen in AudioPort/PortConfig

  • AudioPortExtendedInfo := device | mix | session

    ersetzt Unions in AudioPort/PortConfig

Anbieter-Tags

Neben Gerätetypen und -formaten können Anbieter benutzerdefinierte Tags für Audioanzeigen hinzufügen, Metadaten zu verfolgen.

Anbieter können für Wiedergabe- und Aufzeichnungstitel-Metadaten ihre eigenen Tags, mit denen Attribute zu Audio-E/A-Streams hinzugefügt werden, von den Apps zum HAL.

Anbieter-Tags für die Metadaten von Wiedergabe-Tracks werden wie unten dargestellt hinzugefügt. Beispiel:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

Die RecordTrackMetadata-Struktur wird auf ähnliche Weise implementiert, indem Spezifische Tags für die Metadaten des Aufnahme-Tracks hinzufügen.

Namenstaktung für Anbietererweiterungen

Ab HAL V7 ist für Anbietererweiterungen ein zusätzliches {vendor}-Präfix erforderlich. die in Version 6 nicht erforderlich ist. Damit das Präfix {vendor} gültig ist, muss es: mindestens drei alphanumerische Zeichen.

Verwenden Sie in V7 das folgende Format:

VX_{vendor}_{letters/numbers}

Im Folgenden finden Sie einige Beispiele für gültige V7-Anbietererweiterungen:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

Versionsinformationen

In der folgenden Tabelle ist die HAL-Versionsnummer für jede Android-Version aufgeführt:

Android-Version HIDL HAL-Version
Android 13 7.1
Android 12 7
Android 11 6.0
Android 10 5
Android 9 4.0
Android 8 2