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.
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
audio_policy_configuration.xml
-Datei für das Framework, damit sie verwendet werden können.
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
undIPrimaryDevice.hal
enthalten Methoden wiesetMasterVolume
oderopenInputStream
.- Streams sind unidirektional und werden von AudioFlinger zum Senden oder Empfangen von
Audio zum und vom HAL über
IStream.hal
,IStreamOut.hal
undIStreamIn.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 nutzen. - 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 lauten die Werte von enum-Typen (z. B. AudioFormat
) in types.hal
wie folgt:
auch im XSD-Schema der Konfigurationsdatei für die Audiorichtlinie 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:
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 erweiterbarAudioFormat
: Anbieter erweiterbarAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Enum-Werte von Strings übergeben
Stringwerte werden zum Übertragen von Informationen als Aufzählungswerte zwischen der HAL-Schnittstelle. 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:
Abbildung 3: String-Enum-Werte übergeben.
Um beispielsweise einen Wert des Audioformattyps vom Framework an den Anbieter:
- Der ENUM-Wert
AudioFormat
wird in einen Stringwert inlibaudiohal
und wird an den HAL übergeben. - Auf der HAL-Seite wandelt der Standard-Wrapper die Zeichenfolge in eine Aufzählung um. der an den alten 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 der Symbole ein automatisches Conversion-Skript 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, die Metadaten.
Anbieter können für Wiedergabe- und Aufzeichnungs-Track-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 |