À partir d'Android 14, les partenaires et les fournisseurs de SoC sont invités à remplacer l'implémentation HAL HIDL actuelle par une implémentation HAL AIDL.
Pour faciliter la transition de la HAL audio HIDL vers une HAL audio AIDL, certaines des principales différences sont mises en évidence sur cette page. Cette page montre également le mappage entre les interfaces AIDL et HIDL pour le HAL audio.
Différence entre l'implémentation de l'HAL audio AIDL et HIDL
Voici les principales différences entre la structure HIDL et la structure AIDL:
Dans AIDL Audio Core HAL, l'interface
IConfig
est introduite en remplacement des paramètres système dans les fichiers XML de HIDL HAL. Le framework lit ces paramètres à partir du HAL Core au lieu du fichier de configuration du fournisseur. Par exemple, la liste des formats surround disponibles pour le contrôle de l'utilisateur est fournie par la méthodeIConfig.getSurroundSoundConfig
dans le HAL principal.Dans le HAL Audio Effects AIDL, la logique
effectProxy
définie dans les fichiers XML du HAL Effects HIDL est déplacée vers le framework audio. Le framework audio interroge toutes les instances d'effets du système à l'aide deIFactory.queryEffects
et tous les traitements d'effets à l'aide deIFactory.queryProcessing
.Pour éviter toute confusion avec l'utilisation du terme device (appareil) pour les types d'appareils audio,
IDevice
dans le HAL audio HIDL est renomméIModule
dans le HAL audio AIDL.IPrimaryDevice
est remplacé dans le HAL audio AIDL. Les informations sur le mode audio et la rotation de l'écran actuels sont envoyées à chaque instanceIModule
. Les paramètres liés à la technologie Bluetooth SCO (Bluetooth synchronous connection oriented) et au profil mains libres (HFP) sont gérés par une interfaceIBluetooth
dédiée. Une interfaceITelephony
dédiée fournit des commandes spécifiques à la téléphonie. Les instances de ces deux interfaces peuvent être récupérées à partir de l'instance principale de l'interfaceIModule
. Pour en savoir plus, consultez les tableaux de comparaison sur Core HAL et sur les fonctionnalités liées aux fonctionnalités.IDevicesFactory
est supprimé dans le HAL audio AIDL pour éviter la redondance. Les modules HAL (c'est-à-dire les instances d'interfaceIModule
) sont désormais enregistrés directement auprès du Gestionnaire de services en utilisant leurs noms pour les noms d'instance, tels quebluetooth
our_submix
. La seule exception est le moduleprimary
, qui s'enregistre sous le nom d'instancedefault
.
Mappage HAL audio AIDL et HIDL
Les tableaux des sections suivantes montrent le mappage entre les interfaces HIDL et AIDL de l'HAL audio. Pour en savoir plus sur la structure de répertoire, consultez le fichier README de l'HAL audio.
HAL principal
Toutes les interfaces HIDL se trouvent dans le package android.hardware.audio@N.M
, où N.M
indique la version de Major.Minor. Toutes les interfaces AIDL se trouvent dans le package android.hardware.audio.core
.
Interfaces et fichiers de configuration de l'API HIDL | Interfaces API AIDL |
---|---|
IDevicesFactory |
Enregistrement de IModule auprès de ServiceManager . |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
Fichiers de règles audio configurables | Utilisez l'implémentation HIDL pour Android 14. |
Ports audio, profils dynamiques, routes et correctifs
Dans ce tableau, les éléments des fichiers XML sont désignés à l'aide de crochets angulaires.
Méthodes d'interface de l'API HIDL et éléments de fichiers de configuration | Méthodes d'interface de l'API AIDL |
---|---|
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts> |
IModule.getAudioPorts |
IDevice.getAudioPort
IDevice.setConnectedState |
IModule.connectExternalDevice
IModule.disconnectExternalDevice |
IStream.getSupportedProfiles |
IModule.connectExternalDevice |
<routes > |
IModule.getAudioRoutes |
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
Spécifications de l'appareil dans IDevice.openInputStream
IDevice.openOutputStream |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
Configurations et flux des ports audio
Méthodes d'interface de l'API HIDL | Méthodes d'interface de l'API AIDL |
---|---|
IStream.getAudioProperties
IStream.setAudioProperties
IStreamIn.getAudioSource |
IModule.getAudioPortConfigs
IModule.setAudioPortConfig |
IDevice.openInputStream
IDevice.openOutputStream
IStreamIn.prepareForReading
IStreamOut.prepareForWriting
IStream.createMmapBuffer |
IModule.openInputStream
IModule.openOutputStream |
IStream.close |
IStreamCommon.close |
IStreamIn.updateSinkMetadata
IStreamOut.updateSourceMetadata |
IStreamIn.updateMetadata
IStreamOut.updateMetadata |
IStream.standby |
StreamDescriptor.Command.standby |
IStream.pause IStream.resume
IStream.start IStream.stop |
StreamDescriptor.Command.pause .start
.start .drain |
IStreamOut.drain IStreamOut.flush |
StreamDescriptor.Command.drain .flush |
IStreamOut.setCallback
IStreamOut.clearCallback |
IModule.openOutputStream
IStreamCommon.close |
IStreamOut.getPresentationPosition et IStreamIn.getCapturePosition
IStreamOut.getLatency
IStream.getMmapPosition
IStreamIn.getInputFramesLost |
StreamDescriptor.Reply.observable
StreamDescriptor.Reply.latencyMs
StreamDescriptor.Reply.hardware
StreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSize
IStreamOut.getLatency
IStream.getBufferSize
IStream.getFrameSize
IStream.getFrameCount |
IModule.setAudioPatch , la latence nominale et la taille minimale de la mémoire tampon font partie de la structure AudioPatch renvoyée par le HAL.
La taille réelle de la mémoire tampon en trames fait partie de la structure StreamDescriptor , ainsi que la taille de la trame en octets. La taille de la mémoire tampon en octets peut être calculée en multipliant ces deux nombres. |
Connexion avec des effets audio
Méthodes d'interface de l'API HIDL | Méthodes d'interface de l'API AIDL |
---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
Configuration à l'échelle du système
La configuration à l'échelle du système qui était précédemment définie dans les fichiers de configuration XML des règles audio (à savoir, audio_policy_configuration.xml
et audio_policy_engine_configuration.xml
) doit être fournie via IConfig
.
Toutefois, pour faciliter la transition vers AIDL, les fournisseurs ont toujours la possibilité d'utiliser les mêmes fichiers XML qu'ils utilisaient auparavant pour définir une configuration à l'échelle du système. L'implémentation de référence de IConfig
contient le code nécessaire pour représenter les informations du fichier XML à l'aide de types de données AIDL, ce qui facilite la conversion du format XML vers AIDL.
Éléments de fichier de configuration HIDL | Méthodes d'interface de l'API AIDL |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
Séparées en deux méthodes différentes :
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> OU <volumeGroups> <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled
est supprimé du fichier de configuration, car cet élément de configuration n'est pas utilisé sur le système. La fonction DRC doit être activée sur tous les appareils. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
les fonctionnalités liées aux fonctionnalités ;
Méthodes d'interface de l'API HIDL | Interface de l'API AIDL |
---|---|
IDevice.setMasterVolume
IDevice.getMasterVolume
IDevice.setMicMute
IDevice.getMicMute
IDevice.setMasterMute
IDevice.getMasterMute |
IModule.\* |
IPrimaryDevice.getTtyMode
IPrimaryDevice.setTtyMode
IPrimaryDevice.getHacEnabled
IPrimaryDevice.setHacEnabled
IPrimaryDevice.setVoiceVolume |
ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugName
IPrimaryDevice.getBtScoNrecEnabled
IPrimaryDevice.setBtScoNrecEnabled
IPrimaryDevice.getBtScoWidebandEnabled
IPrimaryDevice.setBtScoWidebandEnabled,
IPrimaryDevice.getBtHfpEnabled
IPrimaryDevice.setBtHfpEnabled
IPrimaryDevice.setBtHfpSampleRate
IPrimaryDevice.setBtHfpVolume |
IBluetooth.ScoConfig.\*
IBluetooth.HfpConfig.\* |
IPrimaryDevice.setMode
IPrimaryDevice.updateRotation |
ITelephony.switchAudioMode
IModule.updateAudioMode
IModule.updateScreenRotation |
IDevice.setScreenState
IDevice.getMicrophones |
IModule.updateScreenState
IModule.getMicrophones |
IDevice.getHwAvSync
IStream.setHwAvSync |
IModule.generateHwAvSyncId
IStreamCommon.updateHwAvSyncId |
IStreamIn.setGain IStreamIn.setMicrophoneDirection IStreamIn.setMicrophoneFieldDimension |
IStreamIn.setHwGain IStreamIn.setMicrophoneDirection IStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoMode
IStreamOut.setDualMonoMode
IStreamOut.getPlaybackRateParameters
IStreamOut.setPlaybackRateParameters
IStreamOut.selectPresentation
IStreamOut.getAudioDescriptionMixLevel
IStreamOut.setAudioDescriptionMixLevel
IStreamOut.setLatencyMode
IStreamOut.getRecommendedLatencyModes |
IStreamOut.\* |
IStreamOut.setEventCallback
IStreamOut.setLatencyModeCallback |
IModule.openOutputStream (les rappels sont combinés dans IStreamOutEventCallback ) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
Méthodes obsolètes
Méthodes d'interface de l'API HIDL | Commentaires |
---|---|
IDevice.initCheck IDevice.close |
Le module HAL ne se publie avec le ServiceManager qu'après l'initialisation réussie. À ce stade, elle est considérée comme définitive et ne peut pas être fermée. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
La prise en charge des correctifs, de la suspension, de la reprise et de l'épuisement est obligatoire. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
Obsolète. |
Extensions de fournisseurs
Dans l'API HIDL, les extensions du fournisseur sont implémentées à l'aide des méthodes getParameters
ou setParameters
des interfaces IDevice
et IStream
. Ces méthodes acceptent les chaînes arbitraires.
Dans l'API AIDL, il existe des méthodes correspondantes, telles que getVendorParameters
ou setVendorParameters
, qui acceptent des instances Parcelable
arbitraires en utilisant l'encapsulation dans ParcelableHolders
.
Autres modifications
Voici d'autres modifications générales:
Pour améliorer la testabilité des API HAL, nous présentons dans la version AIDL des options de débogage utilisées par les tests VTS et disponibles via le parcelable
ModuleDebug
. Ces options indiquent au HAL d'émuler certaines fonctionnalités (par exemple, la connexion d'appareils externes), ce qui nécessiterait autrement une intervention manuelle et l'utilisation d'équipements de test externes.Les services HAL doivent redémarrer lorsque la valeur de la propriété système
sys.audio.restart.hal
est définie sur1
. Le redémarrage est effectué viaaudioserver.rc
. Lors de l'implémentation du HAL, utilisez le nom de service HAL approprié indiqué dans le fichieraudioserver.rc
. Dans Android 14, le nomvendor.audio-hal-aidl
est ajouté spécifiquement pour la version AIDL du HAL.
HAL des effets
Toutes les interfaces HIDL se trouvent dans le package android.hardware.audio.effect@N.M*
, où N.M
correspond à la version Major.Minor. Toutes les interfaces AIDL font partie du package android.hardware.audio.effect
.
Interfaces et fichiers de configuration de l'API HIDL | Interfaces API AIDL |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Effect Factory
Interfaces d'API HIDL (android.hardware.audio.effect@X.X) |
Interfaces d'API AIDL (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects avec un paramètre UUID nul |
IEffectsFactory.getDescriptor |
IFactory.queryEffects avec le paramètre UUID |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
Interfaces d'effet
Interfaces de l'API HIDL (android.hardware.audio.effect@X.X) |
Interfaces de l'API AIDL (android.hardware.audio.effect) |
---|---|
IEffect.init |
IEffect.open |
IEffect.setConfig |
IEffect.setParameter |
IEffect.enable |
IEffect.command(CommandId::START) |
IEffect.disable |
IEffect.command(CommandId::STOP) |
IEffect.reset |
IEffect.command(CommandId::RESET) |
IEffect.getDescriptor |
IEffect.getDescriptor |
IEffect.command |
Mappage sur IEffect.command , IEffect.setParameter ou IEffect.getParameter en fonction du type de commande HIDL obsolète
|
N/A | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
Commandes d'effet
Interfaces d'API HIDL (android.hardware.audio.effect@X.X) |
Interfaces d'API AIDL (android.hardware.audio.effect) |
---|---|
EFFECT_CMD_INIT |
IEffect.open |
EFFECT_CMD_RESET |
CommandId.RESET |
EFFECT_CMD_ENABLE |
IEffect.command(CommandId::START) |
EFFECT_CMD_DISABLE |
IEffect.command(CommandId::STOP) |
EFFECT_CMD_SET_PARAM_DEFERRED |
Obsolète dans le HAL AIDL des effets |
EFFECT_CMD_SET_PARAM_COMMIT |
Obsolète dans effets AIDL HAL |
EFFECT_CMD_SET_CONFIG
EFFECT_CMD_SET_PARAM
EFFECT_CMD_SET_DEVICE
EFFECT_CMD_SET_VOLUME
EFFECT_CMD_SET_AUDIO_MODE
EFFECT_CMD_SET_CONFIG_REVERSE
EFFECT_CMD_SET_INPUT_DEVICE
EFFECT_CMD_SET_FEATURE_CONFIG
EFFECT_CMD_SET_AUDIO_SOURCE
| IEffect.setParameter |
EFFECT_CMD_GET_PARAM
EFFECT_CMD_GET_CONFIG
EFFECT_CMD_GET_CONFIG_REVERSE
EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
EFFECT_CMD_GET_FEATURE_CONFIG
VISUALIZER_CMD_MEASURE
EFFECT_CMD_FIRST_PROPRIETARY
(identique à VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
Obsolète.
Dans AIDL, les commutateurs de mode de déchargement et de non-déchargement sont gérés dans le framework. |
EFFECT_CMD_DUMP |
Gérée par la transaction de liaison intégrée AIBinder_dump . |
Définition des paramètres d'effet courants
Définition HIDL (android.hardware.audio.effect@X.X) |
Définition AIDL |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
Définition des effets spécifiques
Interfaces de l'API HIDL (android.hardware.audio.effect@X.X) |
Interfaces de l'API AIDL (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |