A partir de Android 14, los socios y proveedores de SoC se recomienda reemplazar la implementación actual de la HAL del HIDL por una HAL del AIDL para implementarlos.
Para facilitar una transición fluida desde la HAL de audio del HIDL a una HAL de audio del AIDL, en esta página se destacan algunas de las diferencias clave. Esta página también muestra la asignación entre las interfaces AIDL y HIDL para HAL de audio
Diferencia entre la implementación de la HAL de audio del AIDL y la HAL del HIDL
Las principales diferencias entre la estructura del HIDL y la del AIDL son las siguientes: sigue:
En la HAL de AIDL Audio Core, el elemento Se presenta la interfaz
IConfig
como reemplazo de la interfaz de todo el sistema. parámetros en archivos XML en la HAL de HIDL. El framework lee estos parámetros de la HAL principal en lugar del archivo de configuración del proveedor. Por ejemplo, la lista de formatos envolventes que se muestran para el control del usuario proporcionado por elIConfig.getSurroundSoundConfig
en la HAL principal.En la HAL de efectos de audio del AIDL, haz lo siguiente: La lógica
effectProxy
definida en los archivos en formato XML en la HAL de efectos de HIDL se mueve a el framework de audio. El framework de audio consulta todas las instancias de efectos en la conIFactory.queryEffects
y todos los procesamientos de efectos conIFactory.queryProcessing
Para evitar confusiones en el uso del término dispositivo para los tipos de dispositivos de audio, Se cambió el nombre de
IDevice
en la HAL de audio del HIDL aIModule
en la HAL de audio del AIDL.Se reemplazó
IPrimaryDevice
en la HAL de audio del AIDL. Actualizaciones sobre el audio actual y la rotación de pantalla se envían a cada instancia deIModule
. Parámetros relacionadas con la conexión Bluetooth síncrona orientada (BT SCO) y el modo de manos libres UnIBluetooth
dedicado controla el perfil (HFP) interfaz de usuario. Una interfazITelephony
dedicada brinda funciones específicas de telefonía, controles de seguridad. Las instancias de ambas interfaces pueden recuperarse desde el La instancia principal de la interfazIModule
Consulta las tablas de comparación en HAL principal y Funcionalidad relacionada con las funciones para obtener más información.Se quita
IDevicesFactory
de la HAL de audio del AIDL para evitar la redundancia. HAL módulos (es decir, instancias de interfazIModule
) ahora se registran directamente con el administrador de servicios usando sus nombres como instancias,bluetooth
or_submix
. La única excepción es el móduloprimary
, que se registra con el nombre de instanciadefault
.
Asignación de HAL de audio de AIDL y HIDL
En las tablas de las siguientes secciones, se muestra la correspondencia entre el HIDL y el AIDL Interfaces de HAL de audio Consulta Archivo README de audio de la HAL para obtener más información sobre la estructura del directorio.
HAL principal
Todas las interfaces HIDL se encuentran dentro del paquete android.hardware.audio@N.M
, donde
N.M
denota la versión Major.Minor. Todas las interfaces del AIDL se encuentran dentro del
android.hardware.audio.core
.
Interfaces y archivos de configuración de la API de HIDL | Interfaces de la API de AIDL |
---|---|
IDevicesFactory |
Registro de IModule en ServiceManager . |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
Archivos de política de audio configurables | Usa la implementación de HIDL para Android 14. |
Puertos de audio, perfiles dinámicos, rutas y parches
En esta tabla, los elementos de los archivos en formato XML se designan usando corchetes angulares.
Métodos de interfaz de la API de HIDL y elementos de archivos de configuración | Métodos de interfaz de la API de 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
Especificación del dispositivo en IDevice.openInputStream
( IDevice.openOutputStream ) |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
Configuraciones y transmisiones de puertos de audio
Métodos de interfaz de la API de HIDL | Métodos de interfaz de la API de 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 y 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 , latencia nominal y búfer mínimo
son parte de la estructura AudioPatch que muestra la HAL.
El tamaño real del búfer en fotogramas forma parte de StreamDescriptor .
junto con el tamaño del marco en bytes. El tamaño del búfer en bytes puede ser
se calcula multiplicando estos dos números. |
Conexión de efectos de audio
Métodos de interfaz de la API de HIDL | Métodos de interfaz de la API de AIDL |
---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
Configuración de todo el sistema
Configuración en todo el sistema que se definió anteriormente en el XML de la política de audio
de configuración de Terraform (es decir, audio_policy_configuration.xml
y
audio_policy_engine_configuration.xml
) debe proporcionarse a través de IConfig
.
Sin embargo, para facilitar la transición al AIDL, los proveedores aún tienen la opción de usar
los mismos archivos XML que usaron antes para establecer la configuración de todo el sistema. El
la implementación de referencia para IConfig
contiene el código necesario para
que representan información del archivo en formato XML con los tipos de datos AIDL, que
y facilita la conversión de XML a AIDL.
Elementos del archivo de configuración HIDL | Métodos de interfaz de la API de AIDL |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
Se divide en dos métodos diferentes:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig de |
<volumes> , O
<volumeGroups> y <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled
se quita del archivo de configuración como este elemento de configuración no se usa en el sistema. Todos los dispositivos deben tener DRC habilitado<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
Funcionalidad relacionada con las funciones
Métodos de interfaz de la API de HIDL | Interfaz de la API de 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 (las devoluciones de llamada se combinan en
IStreamOutEventCallback ) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
Métodos obsoletos
Métodos de interfaz de la API de HIDL | Comentarios |
---|---|
IDevice.initCheck IDevice.close |
El módulo de HAL se publica solo con el ServiceManager en
una inicialización exitosa. En ese momento, se considera permanente.
y no se puede cerrar. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
La compatibilidad con parches, pausa, reanudación y desvío es obligatoria. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
Obsoleto. |
Extensiones de proveedores
En la API de HIDL, las extensiones de proveedores se implementan usando getParameters
o
Métodos setParameters
de las interfaces IDevice
y IStream
Estos
aceptan cadenas arbitrarias.
En la API de AIDL, hay métodos correspondientes, como getVendorParameters
o setVendorParameters
, que toman instancias de Parcelable
arbitrarias con
encapsulamiento en ParcelableHolders
.
Otros cambios
Estos son otros cambios generales:
Para mejorar la capacidad de prueba de las APIs de HAL, en la versión del AIDL, presentar opciones de depuración que se usan en las pruebas de VTS y que están disponibles a través del objeto parcelable
ModuleDebug
. Estas opciones le indican a la HAL emular ciertas funcionalidades (por ejemplo, conexión de dispositivos externos) que, de lo contrario, requieren la intervención manual y el uso de pruebas externas o equipamiento.Los servicios HAL deben reiniciarse cuando el valor de la propiedad del sistema
sys.audio.restart.hal
se configura como1
. El reinicio se logra a través deaudioserver.rc
Cuando implementes la HAL, usa el nombre de servicio de HAL que corresponda el archivoaudioserver.rc
. En Android 14, el nombre Se agregóvendor.audio-hal-aidl
específicamente para la versión del AIDL del HAL.
HAL de efectos
Todas las interfaces HIDL se encuentran dentro del android.hardware.audio.effect@N.M*
paquete, en el que N.M
es la versión de Major.Minor. Todas las interfaces del AIDL están
dentro del paquete android.hardware.audio.effect
.
Interfaces y archivos de configuración de la API de HIDL | Interfaces de la API de AIDL |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Fábrica de efectos
Interfaces de la API de HIDL (android.hardware.audio.effect@X.X) |
Interfaces de la API de AIDL (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects con parámetro UUID nulo |
IEffectsFactory.getDescriptor |
IFactory.queryEffects con el parámetro UUID |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
Interfaces de efectos
Interfaces de la API de HIDL (android.hardware.audio.effect@X.X) |
Interfaces de la API de 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 |
Mapa a IEffect.command ,
IEffect.setParameter o
IEffect.getParameter según el tipo de HIDL heredado
comando
|
N/A | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
Comandos de efectos
Interfaces de la API de HIDL (android.hardware.audio.effect@X.X) |
Interfaces de la API de 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 |
Obsoleto en la HAL del AIDL de Effects |
EFFECT_CMD_SET_PARAM_COMMIT |
Obsoleto en la HAL del AIDL de Effects |
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 )
(igual que VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
Obsoleto.
En el AIDL, los interruptores de modo de descarga y sin descarga se controlan en la en un framework de nube. |
EFFECT_CMD_DUMP |
Controlado por la transacción de Binder integrada AIBinder_dump . |
Definición de parámetros comunes de Effect
Definición de HIDL (android.hardware.audio.effect@X.X) |
Definición de AIDL |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
Definición de efectos específicos
Interfaces de la API de HIDL (android.hardware.audio.effect@X.X) |
Interfaces de la API de AIDL (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |