Confronto tra AIDL e HIDL Audio HAL

A partire da Android 14, partner e fornitori di SoC si consiglia di sostituire l'attuale implementazione HIDL HAL con un AIDL HAL implementazione.

Per facilitare una transizione fluida da HIDL Audio HAL a un AIDL Audio HAL, alcune delle differenze principali sono evidenziate in questa pagina. Questa pagina mostra anche la mappatura tra le interfacce AIDL e HIDL per la HAL audio.

Differenza tra l'implementazione di AIDL e HIDL Audio HAL

Le principali differenze tra la struttura HIDL e quella AIDL sono: che segue:

  • Nell'AIDL Audio Core HAL, Viene introdotta l'interfaccia IConfig in sostituzione dell'interfaccia a livello di sistema nei file XML in HIDL HAL. Il framework legge questi parametri dell'HAL principale anziché del file di configurazione del fornitore. Ad esempio, l'elenco di formati surround che vengono visualizzati per il controllo dell'utente è fornito IConfig.getSurroundSoundConfig nel Core HAL.

    In AIDL Audio Effects HAL (Effetti audio AIDL), la logica effectProxy definita nei file XML nell'HAL degli effetti HIDL viene spostata il framework audio. Il framework audio esegue query su tutte le istanze degli effetti nel utilizzando IFactory.queryEffects e tutte le elaborazioni degli effetti IFactory.queryProcessing.

  • Per evitare confusione con l'uso del termine device per i tipi di dispositivi audio, IDevice in HIDL Audio HAL viene rinominato in IModule nell'AIDL Audio HAL.

  • IPrimaryDevice è stato sostituito in AIDL Audio HAL. Aggiornamenti sull'audio corrente e la rotazione dello schermo vengono inviate a ogni istanza di IModule. Parametri relative alla connessione sincrona Bluetooth (BT SCO) e a mani libere Il profilo (HFP) è gestito da un IBluetooth dedicato a riga di comando. Un'interfaccia ITelephony dedicata fornisce funzionalità specifiche i controlli di sicurezza. Le istanze di entrambe le interfacce possono essere recuperate principale dell'interfaccia IModule. Visualizza le tabelle di confronto su HAL principale e Funzionalità correlate alle caratteristiche per ulteriori informazioni.

  • IDevicesFactory viene rimosso in AIDL Audio HAL per evitare la ridondanza. HAL moduli (ossia IModule istanze di interfaccia) vengono ora registrati direttamente con il gestore del servizio utilizzando i propri nomi per le istanze, come bluetooth o r_submix. L'unica eccezione è il modulo primary, che con il nome istanza default.

Mappatura AIDL e HIDL Audio HAL

Le tabelle nelle sezioni seguenti mostrano il mapping tra HIDL e AIDL Interfacce audio HAL. Consulta: File audio HAL README per ulteriori informazioni sulla struttura della directory.

HAL principale

Tutte le interfacce HIDL si trovano all'interno del pacchetto android.hardware.audio@N.M, in cui N.M indica la versione Major.Minor. Tutte le interfacce AIDL si trovano all'interno android.hardware.audio.core pacchetto.

Interfacce e file di configurazione dell'API HIDL Interfacce API AIDL
IDevicesFactory Registrazione di IModule con ServiceManager.
IDevice IModule
IPrimaryDevice ITelephony
IBluetooth
IStream
IStreamIn
IStreamOut
StreamDescriptor
IStreamIn
IStreamCommon
IStreamOut
audio_policy_configuration.xml
audio_policy_engine_configuration.xml
IConfig
IModule
File di criteri audio configurabili Utilizza l'implementazione HIDL per Android 14.

Porte audio, profili dinamici, route e patch

In questa tabella, gli elementi dei file XML sono indicati tra parentesi angolari.

Metodi di interfaccia dell'API HIDL ed elementi dei file di configurazione Metodi di interfaccia dell'API AIDL
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts>
IModule.getAudioPorts
IDevice.getAudioPort
IDevice.setConnectedState
IModule.getAudioPort
IModule.connectExternalDevice
IModule.disconnectExternalDevice
IStream.getSupportedProfiles IModule.connectExternalDevice
&lt;routes&gt; IModule.getAudioRoutes
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
Specifica del dispositivo in IDevice.openInputStream
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Stream e configurazioni delle porte audio

Metodi di interfaccia dell'API HIDL Metodi di interfaccia dell'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
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, latenza nominale e buffer minimo fanno parte della struttura AudioPatch restituita dall'HAL. La dimensione effettiva del buffer nei frame fa parte di StreamDescriptor struttura, insieme alle dimensioni del frame in byte. La dimensione del buffer in byte può essere calcolato moltiplicando questi due numeri.

Connessione a Effetti audio

Metodi di interfaccia dell'API HIDL Metodi di interfaccia dell'API AIDL
IDevice.addDeviceEffect
IDevice.removeDeviceEffect
IModule.addDeviceEffect
IModule.removeDeviceEffect
IStream.addEffect
IStream.removeEffect
IStreamCommon.addEffect
IStreamCommon.removeEffect

Configurazione a livello di sistema

Configurazione a livello di sistema definita in precedenza nel file XML dei criteri audio di configurazione dei deployment (vale a dire audio_policy_configuration.xml e audio_policy_engine_configuration.xml) deve essere fornita tramite IConfig. Tuttavia, per facilitare la transizione all'AIDL, i fornitori hanno comunque la possibilità di utilizzare gli stessi file XML utilizzati in precedenza per impostare la configurazione a livello di sistema. La l'implementazione del riferimento per IConfig contiene il codice necessario che rappresentano informazioni dal file XML utilizzando i tipi di dati AIDL, che facilita la conversione da XML a AIDL.

Elementi del file di configurazione HIDL Metodi di interfaccia dell'API AIDL
<globalConfiguration>
<speaker_drc_enabled>1

<call_screen_mode_supported>
<engine_library>
Suddividi in due metodi diversi:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> O <volumeGroups>
<ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. L'elemento speaker_drc_enabled è stato rimosso dal file di configurazione come questo elemento di configurazione non viene utilizzato all'interno del sistema. Tutti i dispositivi devono avere DRC attivato.<ahref="#fnref1" rev="footnote"> </a href="#fnref1">

Funzionalità correlate alle caratteristiche

Metodi di interfaccia dell'API HIDL Interfaccia 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 (i callback vengono combinati in IStreamOutEventCallback)
IDevice.get/setParameters
IStream.get/setParameters
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters

Metodi obsoleti

Metodi di interfaccia dell'API HIDL Commenti
IDevice.initCheck
IDevice.close
Il modulo HAL si pubblica con l'ServiceManager solo su un'inizializzazione riuscita. A quel punto, è considerato permanente e non può essere chiuso.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Il supporto per patch, pausa, ripristino e svuotamento è obbligatorio.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Obsoleto.

Estensioni del fornitore

Nell'API HIDL, le estensioni dei fornitori vengono implementate utilizzando lo getParameters o setParameters dalle interfacce IDevice e IStream. Questi accettano stringhe arbitrarie. Nell'API AIDL esistono metodi corrispondenti, come getVendorParameters o setVendorParameters, che prendono istanze Parcelable arbitrarie usando incapsulamento all'interno di ParcelableHolders.

Altre modifiche

Altre modifiche generali sono le seguenti:

  1. Per migliorare la testabilità delle API HAL, nella versione AIDL, introdurre le opzioni di debug disponibili e utilizzate dai test VTS tramite il pacchetto ModuleDebug. Queste opzioni indicano all'HAL di emulare determinate funzionalità (ad esempio, connessione di dispositivi esterni), che altrimenti richiedono un intervento manuale e l'uso di test esterni apparecchiature.

  2. I servizi HAL devono essere riavviati quando il valore della proprietà di sistema sys.audio.restart.hal impostata su 1. Il riavvio viene eseguito tramite audioserver.rc Durante l'implementazione dell'HAL, utilizza il nome del servizio HAL appropriato elencato in il file audioserver.rc. In Android 14, il nome L'elemento vendor.audio-hal-aidl viene aggiunto appositamente per la versione AIDL dell' HAL

Effetti HAL

Tutte le interfacce HIDL si trovano all'interno di android.hardware.audio.effect@N.M* in cui N.M è la versione Major.Minor. Tutte le interfacce AIDL sono all'interno del pacchetto android.hardware.audio.effect.

Interfacce e file di configurazione dell'API HIDL Interfacce API AIDL
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Fabbrica effetti

Interfacce API HIDL
(android.hardware.audio.effect@X.X)
Interfacce API AIDL
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects con parametro UUID nullo
IEffectsFactory.getDescriptor IFactory.queryEffects con parametro UUID
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.queryEffects

Interfacce degli effetti

Interfacce API HIDL
(android.hardware.audio.effect@X.X)
Interfacce 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 Mappa con: IEffect.command,
IEffect.setParameter, oppure
IEffect.getParameter in base al tipo di HIDL legacy comando
N/D IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

Comandi degli effetti

Interfacce API HIDL
(android.hardware.audio.effect@X.X)
Interfacce 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 Deprecato in Effetti AIDL HAL
EFFECT_CMD_SET_PARAM_COMMIT Deprecato in Effetti 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
(uguale a VISUALIZER_CMD_CAPTURE)
IEffect.getParameter
EFFECT_CMD_OFFLOAD Obsoleta.
In AIDL, gli interruttori delle modalità offload e non offload vengono gestiti il modello di machine learning.
EFFECT_CMD_DUMP Gestito dalla transazione binder integrato AIBinder_dump.

Definizione dei parametri degli effetti comuni

Definizione HIDL
(android.hardware.audio.effect@X.X)
Definizione di AIDL
Types.hal Flags.aidl
Parameter.aidl

Definizione di effetti specifici

Interfacce API HIDL
(android.hardware.audio.effect@X.X)
Interfacce API AIDL
(android.hardware.audio.effect)
I$EffectType$.hal $EffectType$.aidl