No Android 14 e versões mais recentes, parceiros e fornecedores de SoC são incentivados a substituir a implementação atual da HAL de HIDL por uma HAL da AIDL implementação.
Para facilitar a transição da HAL de áudio HIDL para uma HAL de áudio AIDL, algumas das principais diferenças estão destacadas nesta página. Esta página também mostra o mapeamento entre as interfaces AIDL e HIDL para o HAL de áudio.
Diferença entre a implementação da HAL de áudio AIDL e HIDL
As principais diferenças entre a estrutura HIDL e a AIDL são segue:
Na HAL de núcleo de áudio AIDL, a A interface
IConfig
foi introduzida para substituir a interface em arquivos XML na HAL de HIDL. O framework lê esses parâmetros da HAL principal em vez do arquivo de configuração do fornecedor. Por exemplo, a lista de formatos de som surround que são exibidos para controle do usuário é fornecido pelaIConfig.getSurroundSoundConfig
na HAL principal.Em HAL de efeitos de áudio da AIDL, a lógica
effectProxy
definida em arquivos XML na HAL de efeitos HIDL é movida para a estrutura de áudio. A estrutura de áudio consulta todas as instâncias de efeito na usandoIFactory.queryEffects
, e todos os processamentos de efeito usandoIFactory.queryProcessing
.Para evitar confusão com o uso do termo dispositivo para tipos de dispositivos de áudio, O
IDevice
na HAL de áudio HIDL foi renomeado comoIModule
na HAL de áudio AIDL.O
IPrimaryDevice
foi substituído na HAL de áudio AIDL. Atualizações sobre o áudio atual modo e rotação de tela são enviados a cada instância deIModule
. Parâmetros relacionadas à conexão síncrona orientada por Bluetooth (BT SCO) e ao Hands-Free Os perfis (HFP) são gerenciados por umIBluetooth
dedicado interface gráfica do usuário. Uma interfaceITelephony
dedicada oferece recursos específicos para controles de segurança. Instâncias de ambas as interfaces podem ser recuperadas do instância principal da interfaceIModule
. Consulte as tabelas de comparação HAL de núcleo e Funcionalidades relacionadas a recursos para mais informações.IDevicesFactory
foi removido na HAL de áudio AIDL para evitar redundância. HAL módulos (ou seja, instâncias de interfaceIModule
) agora são registrados diretamente com o Service Manager usando os nomes delas nos nomes de instâncias, comobluetooth
our_submix
. A única exceção é o móduloprimary
, que é registrada com o nome de instânciadefault
.
Mapeamento de HAL de áudio AIDL e HIDL
As tabelas nas seções a seguir mostram o mapeamento entre o HIDL e a AIDL Interfaces HAL de áudio. Consulte Arquivo README da HAL de áudio para saber mais sobre a estrutura de diretórios.
HAL principal
Todas as interfaces HIDL estão dentro do pacote android.hardware.audio@N.M
, em que
N.M
indica a versão Major.Minor. Todas as interfaces AIDL estão
android.hardware.audio.core
.
Interfaces e arquivos de configuração da API HIDL | Interfaces da API AIDL |
---|---|
IDevicesFactory |
Registro do domínio IModule no ServiceManager . |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
Arquivos de política de áudio configuráveis | Usar a implementação HIDL para o Android 14. |
Portas de áudio, perfis dinâmicos, rotas e patches
Nesta tabela, os elementos de arquivos XML são designados por sinais de maior e menor.
Métodos de interface da API HIDL e elementos de arquivos de configuração | Métodos de interface da 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
Especificação do dispositivo em IDevice.openInputStream
IDevice.openOutputStream |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
Streams e configurações de porta de áudio
Métodos de interface da API HIDL | Métodos de interface da 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 e IStreamIn.getCapturePosition
IStreamOut.getLatency
e 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 , latência nominal e buffer mínimo
fazem parte da estrutura AudioPatch retornada pela HAL.
O tamanho real do buffer em frames faz parte do StreamDescriptor
com o tamanho do frame em bytes. O tamanho do buffer em bytes pode ser
calculada multiplicando esses dois números. |
Conexão de efeitos de áudio
Métodos de interface da API HIDL | Métodos de interface da API AIDL |
---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
Configuração do sistema
Configuração geral do sistema definida anteriormente no XML da política de áudio
arquivos de configuração (ou seja, audio_policy_configuration.xml
e
audio_policy_engine_configuration.xml
) precisam ser fornecidas pelo app IConfig
.
No entanto, para facilitar a transição para AIDL, os fornecedores ainda têm a opção de usar
os mesmos arquivos XML usados anteriormente para definir a configuração de todo o sistema. O
implementação de referência para IConfig
contém o código necessário para
que representam informações do arquivo XML usando tipos de dados AIDL,
facilita a conversão de XML para AIDL.
Elementos do arquivo de configuração HIDL | Métodos de interface da API AIDL |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
Separado em dois métodos diferentes:
ITelephony.getSupportedAudioModes
: IConfig.getEngineConfig |
<volumes> OU
<volumeGroups> de <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled
é removido do arquivo de configuração como este item de configuração não é usado no sistema. Todos os dispositivos devem ter DRC ativada.<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
Funcionalidades relacionadas a recursos
Métodos de interface da API HIDL | Interface da 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 (os callbacks são combinados em
IStreamOutEventCallback ) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
Métodos obsoletos
Métodos de interface da API HIDL | Comentários |
---|---|
IDevice.initCheck IDevice.close |
O módulo HAL publica a si mesmo com o ServiceManager apenas em
inicialização bem-sucedida. O conteúdo é considerado permanente
e não pode ser fechado. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
O suporte para patches, pausa, retomada e drenagem é obrigatório. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
Obsoleto. |
Extensões do fornecedor
Na API HIDL, as extensões do fornecedor são implementadas usando as APIs getParameters
ou
setParameters
das interfaces IDevice
e IStream
. Esses
métodos aceitam strings arbitrárias.
Na API AIDL, há métodos correspondentes, como getVendorParameters
ou setVendorParameters
, que tomam instâncias de Parcelable
arbitrárias usando
em ParcelableHolders
.
Outras mudanças
Outras mudanças gerais são as seguintes:
Para melhorar a capacidade de teste das APIs da HAL, na versão AIDL, nós apresentar opções de depuração usadas pelos testes VTS e disponíveis pelo parcelable
ModuleDebug
. Essas opções instruem a HAL a emular determinados recursos (por exemplo, a conexão de dispositivos externos), o que requer intervenção manual e uso de testes externos equipamentos.Os serviços de HAL precisam ser reiniciados quando o valor da propriedade do sistema
sys.audio.restart.hal
é definido como1
. O reinício é feito comaudioserver.rc
Ao implementar a HAL, use o nome de serviço da HAL apropriado listado o arquivoaudioserver.rc
. No Android 14, o nome Ovendor.audio-hal-aidl
foi adicionado especificamente para a versão AIDL do HAL
HAL de efeitos
Todas as interfaces HIDL estão dentro do android.hardware.audio.effect@N.M*
em que N.M
é a versão Major.Minor. Todas as interfaces AIDL são
no pacote android.hardware.audio.effect
.
Interfaces e arquivos de configuração da API HIDL | Interfaces da API AIDL |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Fábrica de efeitos
Interfaces da API HIDL (android.hardware.audio.effect@X.X) |
Interfaces da API AIDL (android.hardware.audio.Effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects com parâmetro UUID nulo |
IEffectsFactory.getDescriptor |
IFactory.queryEffects com parâmetro UUID |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
Interfaces de efeito
Interfaces da API HIDL (android.hardware.audio.effect@X.X) |
Interfaces da 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 |
Mapear para IEffect.command ,
IEffect.setParameter ou
IEffect.getParameter com base no tipo de HIDL legado
comando
|
N/A | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
Comandos de efeito
Interfaces da API HIDL (android.hardware.audio.effect@X.X) |
Interfaces da 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 |
Descontinuada na HAL de efeitos AIDL |
EFFECT_CMD_SET_PARAM_COMMIT |
Descontinuada na HAL de efeitos AIDL |
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 a VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
Obsoleto.
Na AIDL, as chaves do modo de descarga e de não descarga são tratadas na de análise de dados em nuvem. |
EFFECT_CMD_DUMP |
Processada pela transação de vinculação integrada AIBinder_dump . |
Definição dos parâmetros de efeito comum
Definição de HIDL (android.hardware.audio.effect@X.X) |
Definição de AIDL |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
Definição de efeitos específicos
Interfaces da API HIDL (android.hardware.audio.effect@X.X) |
Interfaces da API AIDL (android.hardware.audio.Effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |