Comparaison entre AIDL et HIDL Audio HAL

À partir d'Android 14, partenaires et fournisseurs de SoC sont encouragés à remplacer l'implémentation actuelle de HIDL HAL par une HAL AIDL la mise en œuvre.

Pour faciliter la transition depuis HIDL Audio HAL à un 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 les HAL audio.

Différence entre l'implémentation d'AIDL et de HIDL Audio HAL

Les principales différences entre la structure HIDL et la structure AIDL sont les suivantes : ce qui suit:

  • Dans AIDL Audio Core HAL, le paramètre Introduction de l'interface IConfig pour remplacer l'interface à l'échelle du système dans les fichiers XML de HIDL HAL. Le framework ces paramètres depuis le HAL principal au lieu du fichier de configuration du fournisseur. Par exemple, la liste des formats surround qui sont proposés pour le contrôle de l'utilisateur est fourni par IConfig.getSurroundSoundConfig dans l'HAL principal.

    Dans AIDL Audio Effects HAL, procédez comme suit : la logique effectProxy définie dans les fichiers XML dans HIDL Effects HAL est déplacée vers le framework audio. Le framework audio interroge toutes les instances d'effet système utilisant IFactory.queryEffects, et tous les traitements d'effet IFactory.queryProcessing

  • Pour éviter toute confusion lors de l'utilisation du terme appareil pour les types d'appareils audio, IDevice dans HIDL Audio HAL est renommé IModule dans le HAL audio AIDL.

  • Remplacement de IPrimaryDevice dans AIDL Audio HAL. Informations sur l'audio actuel et la rotation de l'écran sont envoyées à chaque instance IModule. Paramètres liés au Bluetooth orienté connexion synchrone (BT SCO) et au mode mains libres Les profils (HFP) sont gérés par un IBluetooth dédié de commande. Une interface ITelephony dédiée fournit des données . Vous pouvez récupérer les instances de ces deux interfaces instance principale de l'interface IModule. Consultez les tableaux comparatifs Core HAL et Fonctionnalités liées aux fonctionnalités pour en savoir plus.

  • IDevicesFactory est supprimé dans AIDL Audio HAL pour éviter toute redondance. CARTE les modules (c'est-à-dire les instances d'interface IModule) sont désormais enregistrés directement avec le gestionnaire de services en utilisant leurs noms pour les noms d'instances, tels que bluetooth ou r_submix. La seule exception est le module primary, qui s'enregistre sous le nom d'instance default.

Mappage HAL audio AIDL et HIDL

Les tableaux des sections suivantes présentent le mappage entre HIDL et AIDL Interfaces audio HAL Voir Fichier README audio HAL pour en savoir plus sur la structure des répertoires.

HAL principal

Toutes les interfaces HIDL sont dans le package android.hardware.audio@N.M, où N.M indique la version 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 de l'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 chevrons.

Méthodes d'interface et éléments des fichiers de configuration de l'API HIDL Méthodes d'interface de l'API AIDL
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts>
IModule.getAudioPorts
IDevice.getAudioPort
IDevice.setConnectedState
IModule.getAudioPort
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 en IDevice.openInputStream
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Configurations de ports audio et flux

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, latence nominale et tampon minimal font partie de la structure AudioPatch renvoyée par le HAL. La taille réelle de la mémoire tampon en frames fait partie de StreamDescriptor la structure, ainsi que la taille de la trame en octets. La taille de la mémoire tampon en octets peut être calculé 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

Configuration à l'échelle du système précédemment définie dans le fichier XML des règles audio des fichiers de configuration (à savoir, audio_policy_configuration.xml et audio_policy_engine_configuration.xml) doit être fourni 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 la configuration à l'échelle du système. La l'implémentation de référence pour IConfig contient le code nécessaire pour représentant les informations du fichier XML à l'aide de types de données AIDL, qui facilite la conversion du format XML vers AIDL.

Éléments du fichier de configuration HIDL Méthodes d'interface de l'API AIDL
<globalConfiguration>
<speaker_drc_enabled>1

<call_screen_mode_supported>
<engine_library>
Deux méthodes distinctes sont disponibles:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> OU <volumeGroups>
<ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. speaker_drc_enabled est supprimé du fichier de configuration en tant que cet élément de configuration n'est pas utilisé dans le système. Tous les appareils doivent avoir DRC activé.<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">

les fonctionnalités liées aux fonctionnalités ;

Méthodes d'interface de l'API HIDL Interface 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 se publie avec le ServiceManager uniquement sur une initialisation réussie. À ce stade, la demande est considérée comme permanente. et ne peut pas être fermé.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
La prise en charge des correctifs, de la pause, de la reprise et du drainage est obligatoire.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Obsolète.

Extensions de fournisseur

Dans l'API HIDL, les extensions de fournisseur sont implémentées à l'aide de getParameters ou setParameters à partir des interfaces IDevice et IStream. Ces méthodes acceptent des 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 encapsulation dans ParcelableHolders.

Autres modifications

Voici les autres modifications générales:

  1. Pour améliorer la testabilité des API HAL, nous introduisent des options de débogage qui sont utilisées par les tests VTS et qui sont disponibles dans le parcelable ModuleDebug. Ces options indiquent au HAL de Émuler certaines fonctionnalités (par exemple, la connexion d'appareils externes) ce qui nécessite une intervention manuelle et le recours à des tests externes de l'équipement.

  2. Les services HAL doivent redémarrer lorsque la valeur de la propriété système sys.audio.restart.hal est défini sur 1. Le redémarrage se fait via audioserver.rc Lors de l'implémentation du HAL, utilisez le nom de service HAL approprié indiqué dans le fichier audioserver.rc. Sous Android 14, le nom vendor.audio-hal-aidl a été ajouté spécifiquement à la version AIDL CARL.

Effets HAL

Toutes les interfaces HIDL se trouvent dans le android.hardware.audio.effect@N.M*N.M correspond à la version Major.Minor. Toutes les interfaces AIDL sont dans le package android.hardware.audio.effect.

Interfaces et fichiers de configuration de l'API HIDL Interfaces de l'API AIDL
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Effect Factory

Interfaces de l'API HIDL
(android.hardware.audio.effect@X.X)
Interfaces de l'API AIDL
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects avec un paramètre d'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 Carte pour IEffect.command,
IEffect.setParameter ou
IEffect.getParameter en fonction du type d'ancien HIDL commande
N/A IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

Commandes d'effet

Interfaces de l'API HIDL
(android.hardware.audio.effect@X.X)
Interfaces de l'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 effets AIDL HAL
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 interrupteurs des modes de déchargement et sans décharge sont gérés dans d'infrastructure.
EFFECT_CMD_DUMP Géré 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