Dans l'audio Android, audio_devices_t est utilisé pour représenter le type d'appareil audio. Il est largement utilisé dans le code source audio en tant que champ de bits pour filtrer ou sélectionner un ou plusieurs appareils spécifiés. Avant Android 11, il existait une limite de 30 types d'appareils d'entrée/sortie audio, et aucun emplacement libre pour ajouter de nouveaux types d'appareils audio. Nous avons supprimé la limite du nombre de types d'appareils audio pour permettre l'ajout de nouveaux types d'appareils audio.
Pour supprimer la limite du nombre de types d'appareils audio, les types d'appareils audio sont désormais des valeurs énumérées au lieu de masques de bits.
Tous les types d'appareils audio existants sont conservés tels quels. AUDIO_DEVICE_BIT_IN est toujours utilisé pour distinguer les appareils d'entrée ou de sortie. Lorsque vous ajoutez de nouveaux types d'appareils audio, il s'agit de valeurs énumérées dans les espaces entre les valeurs existantes.
Les OEM ne doivent pas utiliser audio_devices_t comme masque de bits, car cela peut entraîner des résultats inattendus lorsque de nouveaux types d'appareils audio énumérés sont ajoutés.
Exemples et source
Avant Android 11, il existait deux utilisations typiques des types d'appareils audio en tant que masques de bits.
- Utiliser la valeur
audio_devices_tpour représenter plusieurs appareils audio. - Vérifier si la valeur
audio_devices_tcontient des types d'appareils audio d'une catégorie spécifiée.
Pour représenter plusieurs types d'appareils audio, une classe nommée DeviceTypeSet dans le
/libaudiofoundation/include/media/AudioContainers.h
est utilisée. Il s'agit d'un conteneur std::set de audio_devices_t. La
classe est déclarée dans la bibliothèque
libaudiofoundation disponible auprès du fournisseur. Pour représenter plusieurs types d'appareils audio dans le code C, vous pouvez utiliser un tableau ou une liste de audio_devices_t.
Pour vérifier si un seul type d'appareil appartient à une catégorie spécifiée, utilisez les fonctions d'assistance
audio_is_.*_device dans
/system/media/audio/include/system/audio.h.
Dans le cas de plusieurs types d'appareils audio, utilisez les fonctions d'assistance dans libaudiofoundation. Par
exemple, utilisez
areAllOfSameDeviceType (DeviceTypeSet, std::function
dans
AudioContainers.h pour vérifier si tous les types d'appareils audio donnés
sont du même type.
Implémentation
Les OEM doivent supprimer la représentation du champ de bits du type d'appareil audio de l'implémentation HAL audio.
- Supprimez tout le stockage des appareils sur un champ de bits.
audio_devices_tne doit pas être utilisé pour représenter plusieurs types d'appareils audio. Utilisez plutôt une liste ou un vecteur. - Arrêtez d'utiliser des opérations au niveau du bit pour comparer les types d'appareils.
Avant Android 11, les types d'appareils audio pouvaient être utilisés comme champ de bits. Dans ce cas, il est courant d'utiliser des opérations au niveau du bit pour comparer les types d'appareils. Lorsque de nouveaux types d'appareils audio énumérés sont ajoutés, les opérations au niveau du bit peuvent entraîner des résultats inattendus. Utilisez plutôt des fonctions d'assistance. S'il n'existe qu'un seul type d'appareil audio, utilisez la comparaison directe pour comparer les deux valeurs. Pour vérifier si un type d'appareil audio appartient à une catégorie spécifiée, utilisez les fonctions d'assistance dans
/system/media/audio/include/system/audio.h. Par exemple,audio_is_output_device(audio_devices_t device). - Arrêtez d'utiliser des valeurs prédéfinies pour les groupes de types d'appareils audio.
Il existe des valeurs prédéfinies pour les groupes de types d'appareils audio,
AUDIO_DEVICE_OUT_ALL, danssystem/media/audio/include/system/audio-base-utils.h. Toutes ces valeurs sont réservées, mais peuvent être obsolètes, car elles ne seront pas correctes lorsque de nouveaux types d'appareils audio énumérés seront ajoutés. De nouveaux groupes de types d'appareils audio sont définis dansaudio-base-utils.h. Il s'agit de tableaux de types d'appareils audio, tels queAUDIO_DEVICE_OUT_ALL_ARRAY. - Implémentez les méthodes
create_audio_patch()etrelease_audio_patch()pour le routage au lieu deset_parameters.La méthode
set_parametersutilise les types d'appareils audio comme champ de bits. Des résultats inattendus peuvent donc se produire si de nouveaux types d'appareils audio énumérés sont ajoutés.Actuellement, deux types de correctifs audio sont requis :
- Correctifs de mixage vers l'appareil, pour la lecture
- Correctifs d'appareil vers mixage, pour l'enregistrement
Dans les mises à jour ultérieures, des correctifs supplémentaires peuvent être nécessaires pour les appareils.
Lors de la création d'un correctif audio, si le descripteur de correctif n'est pas spécifié, le HAL audio doit générer un descripteur de correctif unique permettant d'identifier le correctif audio. Sinon, le HAL audio doit utiliser le descripteur de correctif audio donné pour mettre à jour le correctif audio.
Si vous utilisez un HAL audio hérité et le wrapper HIDL AOSP, le HAL audio hérité doit définir la version HAL principale sur 3.0.
Pour activer la fonctionnalité de correctif audio, le HAL audio doit définir la version HAL principale sur 3.0 ou une version ultérieure. Pour en savoir plus, consultez
Device::supportsAudioPatches()dans l'implémentation HIDL par défaut , qui est également disponible sur le HAL audio pour Cuttlefish.
Personnalisation
Il n'est pas possible de désactiver la fonctionnalité ni de rétablir le refactoring de l'appareil audio dans le framework, ce qui permet d'ajouter des types d'appareils audio.
Tous les types d'appareils audio ajoutés permettent de représenter un type d'appareil avec un seul bit défini. Les implémentations HAL actuelles fonctionnent donc toujours.
Si de nouveaux types d'appareils audio sont ajoutés et que les OEM souhaitent les utiliser, ils doivent mettre à niveau leur implémentation HAL audio et passer à la version HIDL 6.0 ou ultérieure. Il est obligatoire de mettre à niveau la version HAL principale vers la version 3.0 et d'implémenter les méthodes create_audio_patch et release_audio_patch, car l'utilisation de set_parameters pour router le flux peut entraîner des résultats inattendus lorsque de nouveaux types d'appareils audio sont ajoutés.
Validation
Les OEM doivent mettre à jour leurs implémentations HAL. Vous pouvez utiliser VTS pour le HAL audio afin de vérifier si l'implémentation fonctionne comme prévu. Tous les tests sont disponibles dans les fichiers VTS.