Sur Android 13 et versions antérieures, l'interface HAL audio est
défini à l'aide de HIDL dans les fichiers HIDL HAL (avec le paramètre
extension .hal
) et
des schémas XSD pour
les fichiers de configuration, comme indiqué ci-dessous.
Figure 1 : Interface audio HAL.
Fichiers de configuration
Les fichiers de configuration XML des règles audio et des effets audio sont considérés comme faisant partie de l'interface Audio HIDL HAL. Ces fichiers doivent être conformes à leurs schémas. la conformité est vérifiée par des tests VTS.
Dans le cadre de l'implémentation du mécanisme HIDL HAL audio, vous devez créer un
fichier de configuration des règles audio
décrivant la topologie audio. Les fonctionnalités HAL audio doivent être déclarées dans
le fichier audio_policy_configuration.xml
pour que le framework les utilise.
API Audio HIDL HAL
Cette section décrit les API principales, effets et HAL courantes pour HIDL.
HAL principal
Voici quelques-unes des principales interfaces de Core HAL utilisant HIDL:
IDeviceFactory.hal
est le point d'entrée de l'API.IDevice.hal
etIPrimaryDevice.hal
contiennent des méthodes telles quesetMasterVolume
ouopenInputStream
.- Les flux sont unidirectionnels et permettent à AudioFlinger d'envoyer ou de recevoir
les fichiers audio vers et depuis le HAL, via
IStream.hal
,IStreamOut.hal
etIStreamIn.hal
Le tableau suivant indique l'emplacement des composants HIDL Core HAL utiles:
Composant HAL principal | Position |
---|---|
Dernière version de l'API | /hardware/interfaces/audio/6.0
|
Types spécifiques à la dernière API Core HAL | /hardware/interfaces/audio/6.0/types.hal
|
Schéma XSD du fichier de configuration des règles audio | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd
|
L'implémentation par défaut de l'API principale HAL (/hardware/interfaces/audio/core/all-versions/default/
)
est un wrapper pour l'implémentation HAL pré-aiguës à l'aide de
anciennes bibliothèques partagées.
L'implémentation par défaut peut également être considérée comme une référence lorsque
Implémenter de nouvelles versions de HAL audio qui interagissent avec les pilotes du noyau
directement.
Effets HAL
Le tableau suivant indique l'emplacement des composants HAL d'effets utiles à l'aide de HIDL:
Composant "Effets HAL" | Position |
---|---|
Dernière version de l'API | /hardware/interfaces/audio/effect/6.0/
|
Schéma XSD du fichier de configuration des effets | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
Pour en savoir plus, consultez un exemple d'implémentation de la classe
API HAL des effets sur /hardware/interfaces/audio/effect/all-versions/default/
et dans la section Effets audio.
HAL commun
L'API Common HAL utilisant HIDL contient les éléments suivants:
- Définitions (
/hardware/interfaces/audio/common/6.0/types.hal
) partagées par les API Core et Effect. - Services publics (
/hardware/interfaces/audio/common/all-versions
) utilisés pour aider coder avec des API HIDL pour les implémentations, les clients et les tests.
Mises à jour du HAL audio V7
Des modifications importantes ont été apportées à la version 7 de la HAL audio dans Android 12, comme indiqué dans cette section. Le HAL audio V7 effectue les opérations suivantes:
- Unifie les modèles de données utilisés par le framework et l'HAL.
- Minimise la duplication entre les types de données HIDL (énumérations) et le schéma XML utilisée pour configurer les règles audio.
Plus précisément, les modifications suivantes sont apportées dans le HAL audio V7:
- Types d'énumération
- Types de données
- Tags de fournisseur
- Espace de noms des extensions des fournisseurs
Ces modifications sont abordées plus en détail dans leurs sections respectives.
Énumérations
À partir de Audio HAL V7, types énumérés utilisés dans la configuration de la règle audio sont définis uniquement dans le schéma XSD et non dans le HIDL.
Dans Audio HAL V6, les valeurs des types d'énumération (comme AudioFormat
) dans types.hal
sont les suivantes :
également défini dans le schéma XSD du fichier de configuration de la règle audio, ce qui crée
la duplication. Pour éviter cela dans la version 7, les types d'énumération sont remplacés par string
et
toutes les valeurs d'énumération possibles
sont répertoriées dans le schéma XSD à la place.
La figure 2 compare certaines des modifications apportées au type d'énumération AudioFormat
dans V7:
Figure 2. Comparaison de certaines des modifications apportées à l'énumération AudioFormat.
Reportez-vous à la liste suivante pour connaître les types d'énumération qui ont été convertis en
string
:
AudioChannelMask
AudioContentType
AudioDevice
: fournisseur extensibleAudioFormat
: fournisseur extensibleAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Transmettre des valeurs d'énumération de chaîne
Les valeurs de chaîne permettent de transférer les informations sous forme de valeurs d'énumération les limites de l'interface HAL. Le framework et le Le wrapper HAL utilise des valeurs d'énumération entières pour implémenter la logique métier la méthode de conversion illustrée dans la Figure 3:
Figure 3. Transmettre des valeurs d'énumération de chaîne.
Par exemple, pour transmettre une valeur de type de format audio du framework au fournisseur:
- La valeur d'énumération de
AudioFormat
est convertie en valeur de chaîne danslibaudiohal
et est transmis au HAL. - Du côté du HAL, le wrapper par défaut convertit la chaîne en une énumération transmise à l'ancien HAL.
Modifications du schéma XML
Disposer de listes complètes de valeurs d'énumération dans la définition de schéma XML (XSD) permet pour une meilleure validation du fichier XML de configuration des règles audio par VTS. Nous avons fait les modifications du fichier de configuration des règles audio utilisé avec HAL V7 pour assurer la conformité avec XSD
Dans la version 7, un caractère d'espacement ␣
standard permet de délimiter les listes de valeurs dans
(taux d'échantillonnage, masques de chaîne et signalements, par exemple) au lieu de ,
.
(virgule) et |
(barre verticale) utilisés dans les versions 6 et antérieures. Comme vous pouvez le voir dans
l'exemple suivant, un espace est utilisé pour délimiter la liste de valeurs pour
channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
Pour modifier les symboles, utilisez un script de conversion automatique appelé
update_audio_policy_config.sh
Reportez-vous à la commande suivante pour convertir un
vers une version V7 pour l'appareil Pixel 5 (Redfin) :
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
Types de données
Nous avons redéfini certaines structures de données dans la version 7 afin de limiter les doublons et définitions. Les tuples répétés d'éléments de données sont regroupés dans différentes. Ces structures de données utilisent les dernières fonctionnalités HIDL telles que les unions sécurisées.
Par exemple, dans les versions 6 et antérieures, un triple de <format, sampling rate, channel mask>
est souvent utilisé dans les interfaces
et les types HIDL. Pour supprimer cette redondance, dans
V7, le type de données AudioConfigBase
et les autres types de données sont définis comme suit:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
utilisé par
AudioConfig
,AudioOffloadInfo
,AudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
remplace des collections non modifiables dans
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
remplace les unions dans
AudioPort/PortConfig
Tags de fournisseur
En plus des types et formats d'appareils, les fournisseurs peuvent ajouter des tags personnalisés pour l'audio. des métadonnées de la piste.
Pour les métadonnées des pistes de lecture et d'enregistrement, les fournisseurs peuvent transmettre leurs propres tags, qui sont utilisés pour ajouter des attributs aux flux d'E/S audio, depuis les applications vers le HAL.
Les tags des fournisseurs pour les métadonnées des pistes de lecture sont ajoutés comme illustré ci-dessous. Exemple:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
La structure RecordTrackMetadata
est implémentée de la même manière
en ajoutant des tags spécifiques aux métadonnées
de la piste d'enregistrement.
Espace de noms des extensions des fournisseurs
À partir de HAL V7, les extensions de fournisseur nécessitent un préfixe {vendor}
supplémentaire
ce qui n'est pas obligatoire dans V6. Pour que le préfixe {vendor}
soit valide, il doit être
comportant au moins trois caractères alphanumériques.
Utilisez le format suivant dans la version 7:
VX_{vendor}_{letters/numbers}
Voici quelques exemples d'extensions de fournisseur V7 valides:
VX_GOOGLE_VR
VX_QCI_AMBIENT_MIC
Informations sur la version
Le tableau suivant présente le numéro de version HAL pour chaque version d'Android:
Version d'Android | Version HIDL HAL |
---|---|
Android 13 | 7.1 |
Android 12 | 7.0 |
Android 11 | 6.0 |
Android 10 | 5,0 |
Android 9 | 4.0 |
Android 8 | 2.0 |