Na urządzeniach z Androidem 13 i starszym interfejsem HAL Audio
zdefiniowane za pomocą HIDL w plikach HIDL HAL (z parametrem
rozszerzenie .hal
) i
Schematy XSD dla
w plikach konfiguracji, jak pokazano poniżej.
Rysunek 1. Interfejs audio HAL.
Pliki konfiguracji
Pliki konfiguracji XML zasad dotyczących dźwięku i efektów audio są uważane za część interfejsu Audio HIDL HAL. Pliki te muszą być zgodne ze schematami. zgodność jest weryfikowana w ramach testów VTS.
W ramach implementacji kodu HAL audio HIDL musisz utworzyć
plik konfiguracji zasad audio
opisujący topologię audio. Możliwości HAL muszą być zadeklarowane w
audio_policy_configuration.xml
, aby platforma z nich mogła korzystać.
Interfejs Audio HIDL HAL API
W tej sekcji opisano Core, Effects i Common HAL API dla HIDL.
Podstawowa HAL
Oto niektóre z najważniejszych interfejsów Core HAL, które korzystają z HIDL:
IDeviceFactory.hal
to punkt wejścia do interfejsu API.IDevice.hal
iIPrimaryDevice.hal
zawierają metody takie jaksetMasterVolume
lubopenInputStream
.- Strumienie są jednokierunkowe i wykorzystywane przez AudioFlinger do wysyłania i odbierania
dźwięk do i z HAL przez
IStream.hal
,IStreamOut.hal
orazIStreamIn.hal
W poniższej tabeli znajdują się lokalizacje przydatnych komponentów Core HAL HIDL:
Podstawowy komponent HAL | Lokalizacja |
---|---|
Najnowsza wersja interfejsu API | /hardware/interfaces/audio/6.0
|
Typy związane z najnowszą wersją interfejsu Core HAL API | /hardware/interfaces/audio/6.0/types.hal
|
Schemat XSD pliku konfiguracji zasady audio | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd
|
Domyślna implementacja interfejsu Core HAL API (/hardware/interfaces/audio/core/all-versions/default/
)
to otokę obejmującą implementację HAL sprzed Treble, wykorzystując
starszych bibliotek udostępnionych.
Implementację domyślną można też traktować jako wskazówkę, gdy:
wdrożenie nowych wersji HAL audio, które współdziałają ze sterownikami jądra systemu operacyjnego.
bezpośrednio.
HAL efektów
W poniższej tabeli znajdziesz lokalizację przydatnych komponentów HAL efektów, które wykorzystują HIDL:
Komponent HAL efektów | Lokalizacja |
---|---|
Najnowsza wersja interfejsu API | /hardware/interfaces/audio/effect/6.0/
|
Schemat XSD pliku konfiguracji efektu | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
Więcej informacji znajdziesz w przykładowej implementacji
Efekty HAL API na stronie /hardware/interfaces/audio/effect/all-versions/default/
i w sekcji Efekty audio.
Wspólna wartość HAL
Oto elementy interfejsu Common HAL API korzystającego z HIDL:
- Definicje (
/hardware/interfaces/audio/common/6.0/types.hal
) udostępnione przez Core and Effect API. - Narzędzia (
/hardware/interfaces/audio/common/all-versions
) używane do pomocy kodowanie przy użyciu interfejsów HIDL na potrzeby implementacji, klientów i testów.
Aktualizacje audio HAL V7
W wersji 7 wprowadziliśmy istotne zmiany Android 12 zgodnie z opisem w tej sekcji. HAL V7 obsługuje te funkcje:
- Ujednolica modele danych używane przez platformę i HAL.
- Minimalizuje duplikowanie typów danych HIDL (wyliczenia) i schematu XML używany do konfiguracji zasad audio.
Wprowadzamy zmiany w następujących obszarach w interfejsie Audio HAL 7:
Szczegółowo omawiamy te zmiany w poszczególnych sekcjach.
Wyliczenia
Począwszy od Audio HAL w wersji 7, typy wymienione w konfiguracji zasad audio są zdefiniowane tylko w schemacie XSD, a nie w HIDL.
W audio HAL V6 wartości typów wyliczeniowych (np. AudioFormat
) w types.hal
to:
zdefiniowane również w schemacie XSD pliku konfiguracji zasad audio, tworząc
i powielaniu. Aby tego uniknąć w wersji 7, typy wyliczenia zostały zmienione na string
oraz
wszystkie możliwe wartości wyliczenia są zamiast tego wymienione w schemacie XSD.
Rysunek 2 porównuje niektóre zmiany z typem wyliczenia AudioFormat
w wersji 7:
Rysunek 2. Porównanie niektórych zmian w wyliczeniu AudioFormat.
Na liście poniżej znajdziesz typy wyliczeniowe, które zostały przekonwertowane na
string
:
AudioChannelMask
AudioContentType
AudioDevice
: możliwość rozszerzania dostawcyAudioFormat
: możliwość rozszerzania dostawcyAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Przekazywanie wartości wyliczeniowych w ciągu znaków
Wartości ciągów znaków służą do przenoszenia informacji jako wartości wyliczeniowych między do granicy interfejsu HAL. Zarówno platforma, jak i narzędzie Kod HAL używa wartości wyliczeniowych całkowitych do implementacji logiki biznesowej podejście do konwersji przedstawione na Rys. 3:
Rysunek 3. Przekazywanie wartości wyliczeniowych w postaci ciągów tekstowych.
Aby na przykład przekazać wartość typu formatu audio z platformy do dostawca:
- Wartość wyliczenia
AudioFormat
jest konwertowana na wartość ciągu znaków wlibaudiohal
i jest przekazywany do HAL. - Po stronie HAL domyślny kod konwertuje ciąg znaków na wyliczenie która jest przekazywana do starszej wersji HAL.
Zmiany schematu XML
Posiadanie pełnych list wartości wyliczeniowych w definicji schematu XML (XSD) umożliwia w celu uzyskania lepszej weryfikacji pliku XML konfiguracji zasad audio przez VTS. Stworzyliśmy zmian w pliku konfiguracji zasad audio używanym w kodzie HAL V7, aby zapewnić zgodność XSD.
W wersji 7 do oddzielania list wartości w␣
(takie jak częstotliwość próbkowania, maski kanału czy flagi) zamiast atrybutu ,
(przecinek) oraz |
(pionowa kreska) używane w wersji 6 i starszych. Zgodnie z tabelą
W poniższym przykładzie spacja służy do ograniczania listy wartości argumentu
channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
Aby zmienić symbol, użyj skryptu automatycznej konwersji o nazwie
update_audio_policy_config.sh
Aby przekonwertować wersję 6, skorzystaj z następującego polecenia
pliku konfiguracji zasad audio do wersji V7 na urządzeniu Pixel 5 (Redfin):
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
Typy danych
Na nowo zdefiniowaliśmy niektóre struktury danych w wersji 7, aby zminimalizować liczbę duplikatów definicji. Powtarzające się krotki elementów danych są grupowane jako wielokrotnego użytku w różnych strukturach. Te struktury danych wykorzystują najnowsze funkcje HIDL, takie jak bezpieczne związki.
Na przykład w wersji 6 i starszych to potrójna wartość <format, sampling rate, channel mask>
.
jest często używany w interfejsach i typach HIDL. Aby usunąć tę nadmiarowość, w polu
W wersji 7 AudioConfigBase
typy danych i inne typy danych są zdefiniowane tak:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
używane przez:
AudioConfig
,AudioOffloadInfo
,AudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
zastępuje luźne kolekcje w
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
zastępuje związki w regionie
AudioPort/PortConfig
Tagi dostawcy
Oprócz typów i formatów urządzeń dostawcy mogą dodawać niestandardowe tagi audio metadanych utworu.
W przypadku metadanych odtwarzania i nagrywania ścieżek dostawcy mogą przekazać własne tagi, które służą do dodawania atrybutów do strumieni I/O audio, od aplikacji po HAL.
Tagi dostawców metadanych ścieżki odtwarzania są dodawane w następujący sposób: przykład:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
Struktura RecordTrackMetadata
jest implementowana w podobny sposób przez
dodając tagi przeznaczone specjalnie dla metadanych utworu nagranego na żywo.
Tempo nazw rozszerzeń dostawców
Począwszy od wersji HAL w wersji 7 rozszerzenia dostawców wymagają dodatkowego prefiksu {vendor}
które nie jest wymagane w wersji 6. Aby prefiks {vendor}
był prawidłowy, musi to być
co najmniej trzy znaki alfanumeryczne.
W wersji 7 użyj następującego formatu:
VX_{vendor}_{letters/numbers}
Oto kilka przykładów prawidłowych rozszerzeń dostawców V7:
VX_GOOGLE_VR
VX_QCI_AMBIENT_MIC
Informacje o wersji
W tabeli poniżej znajdziesz numery wersji HAL poszczególnych wersji Androida:
Wersja Androida | Wersja HAL HIDL |
---|---|
Android 13 | 7.1 |
Android 12 | 7,0 |
Android 11 | 6.0 |
Android 10 | 5,0 |
Android 9 | 4.0 |
Android 8 | 2,0 |