À 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 parIConfig.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 utilisantIFactory.queryEffects
, et tous les traitements d'effetIFactory.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 instanceIModule
. Paramètres liés au Bluetooth orienté connexion synchrone (BT SCO) et au mode mains libres Les profils (HFP) sont gérés par unIBluetooth
dédié de commande. Une interfaceITelephony
dédiée fournit des données . Vous pouvez récupérer les instances de ces deux interfaces instance principale de l'interfaceIModule
. 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'interfaceIModule
) sont désormais enregistrés directement avec le gestionnaire de services en utilisant leurs noms pour les noms d'instances, 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 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.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> <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 |
-
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:
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.Les services HAL doivent redémarrer lorsque la valeur de la propriété système
sys.audio.restart.hal
est défini sur1
. Le redémarrage se fait viaaudioserver.rc
Lors de l'implémentation du HAL, utilisez le nom de service HAL approprié indiqué dans le fichieraudioserver.rc
. Sous Android 14, le nomvendor.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*
où 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 |