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 è fornitoIConfig.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 utilizzandoIFactory.queryEffects
e tutte le elaborazioni degli effettiIFactory.queryProcessing
.Per evitare confusione con l'uso del termine device per i tipi di dispositivi audio,
IDevice
in HIDL Audio HAL viene rinominato inIModule
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 diIModule
. Parametri relative alla connessione sincrona Bluetooth (BT SCO) e a mani libere Il profilo (HFP) è gestito da unIBluetooth
dedicato a riga di comando. Un'interfacciaITelephony
dedicata fornisce funzionalità specifiche i controlli di sicurezza. Le istanze di entrambe le interfacce possono essere recuperate principale dell'interfacciaIModule
. 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 (ossiaIModule
istanze di interfaccia) vengono ora registrati direttamente con il gestore del servizio utilizzando i propri nomi per le istanze, comebluetooth
or_submix
. L'unica eccezione è il moduloprimary
, che con il nome istanzadefault
.
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.connectExternalDevice
IModule.disconnectExternalDevice |
IStream.getSupportedProfiles |
IModule.connectExternalDevice |
<routes > |
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> <call_screen_mode_supported>
<engine_library> |
Suddividi in due metodi diversi:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> O
<volumeGroups> <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
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:
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.I servizi HAL devono essere riavviati quando il valore della proprietà di sistema
sys.audio.restart.hal
impostata su1
. Il riavvio viene eseguito tramiteaudioserver.rc
Durante l'implementazione dell'HAL, utilizza il nome del servizio HAL appropriato elencato in il fileaudioserver.rc
. In Android 14, il nome L'elementovendor.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 |