Vergleich von AIDL und HIDL Audio HAL

Ab Android 14 können Partner und SoC-Anbieter wird empfohlen, die aktuelle HIDL HAL-Implementierung durch eine AIDL HAL- Implementierung.

Für einen reibungslosen Übergang von HIDL Audio HAL zu einem AIDL Audio HAL verwenden, werden auf dieser Seite einige der wichtigsten Unterschiede erläutert. Diese Seite zeigt auch die Zuordnung zwischen den AIDL- und HIDL-Schnittstellen für die Audio-HAL.

Unterschied zwischen AIDL- und HIDL Audio HAL-Implementierung

Die Hauptunterschiede zwischen der HIDL-Struktur und der AIDL-Struktur sind folgende: folgt:

  • In AIDL Audio Core HAL Die IConfig-Oberfläche wurde als Ersatz für die systemweite -Parameter in XML-Dateien in HIDL HAL. Das Framework liest diese Parameter aus dem Core-HAL anstelle der Konfigurationsdatei des Anbieters. Die Liste der Surround-Formate, die zur Steuerung durch den Nutzer angezeigt werden, wird vom IConfig.getSurroundSoundConfig im Core-HAL.

    Gehen Sie in AIDL Audio Effects HAL so vor: wird die in den XML-Dateien in HIDL Effects HAL definierte effectProxy-Logik verschoben nach Audio-Framework entwickelt. Das Audio-Framework fragt alle Effektinstanzen im System mit IFactory.queryEffects und alle Effektverarbeitungen mit IFactory.queryProcessing.

  • Um Verwechslungen mit dem Begriff Gerät für Audiogerätetypen zu vermeiden, IDevice in HIDL Audio HAL wird in AIDL Audio HAL in IModule umbenannt.

  • IPrimaryDevice wird in AIDL Audio HAL ersetzt. Updates zum aktuellen Audioinhalt Modus und Bildschirmdrehung werden an jede IModule-Instanz gesendet. Parameter zu Bluetooth synchrone Verbindung orientiert (BT SCO) und Freisprechfunktion Profil (HFP) wird von einem speziellen IBluetooth verwaltet . Eine dedizierte ITelephony-Schnittstelle bietet Telefoniespezifische Steuerelementen. Instanzen dieser beiden Schnittstellen können aus dem primäre Instanz der IModule-Schnittstelle. Siehe die Vergleichstabellen auf Core-HAL und Funktionsbezogene Funktionen .

  • IDevicesFactory wird in AIDL Audio HAL entfernt, um Redundanz zu vermeiden. Hal Module (d. h. IModule Schnittstelleninstanzen) sind jetzt direkt registriert mit dem Service Manager. Verwenden Sie dabei die Namen für Instanznamen, z. B. bluetooth oder r_submix. Die einzige Ausnahme ist das Modul primary, wird unter dem Instanznamen default registriert.

AIDL- und HIDL Audio-HAL-Zuordnung

Die Tabellen in den folgenden Abschnitten zeigen die Zuordnung zwischen HIDL und AIDL Audio-HAL-Schnittstellen Weitere Informationen finden Sie unter Audio-HAL-README-Datei finden Sie weitere Informationen zur Verzeichnisstruktur.

Core-HAL

Alle HIDL-Schnittstellen befinden sich im Paket android.hardware.audio@N.M, wobei N.M gibt die Major.Minor-Version an. Alle AIDL-Schnittstellen befinden sich im android.hardware.audio.core-Paket.

HIDL API-Schnittstellen und Konfigurationsdateien AIDL API-Schnittstellen
IDevicesFactory Registrierung von IModule bei ServiceManager.
IDevice IModule
IPrimaryDevice ITelephony
IBluetooth
IStream
IStreamIn
IStreamOut
StreamDescriptor
IStreamIn
IStreamCommon
IStreamOut
audio_policy_configuration.xml
audio_policy_engine_configuration.xml
IConfig
IModule
Konfigurierbare Audiorichtliniendateien Verwende die HIDL-Implementierung für Android 14.

Audioports, dynamische Profile, Routen und Patches

In dieser Tabelle werden Elemente von XML-Dateien mit spitzen Klammern gekennzeichnet.

HIDL API-Schnittstellenmethoden und Elemente der Konfigurationsdateien AIDL API-Schnittstellenmethoden
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts>
IModule.getAudioPorts
IDevice.getAudioPort
IDevice.setConnectedState
IModule.getAudioPort
IModule.connectExternalDevice
IModule.disconnectExternalDevice
IStream.getSupportedProfiles IModule.connectExternalDevice
<routes> IModule.getAudioRoutes
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
Spezifikation des Geräts in IDevice.openInputStream
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Konfigurationen und Streams von Audioports

HIDL API-Schnittstellenmethoden AIDL API-Schnittstellenmethoden
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 und 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, nominale Latenz und minimaler Zwischenspeicher Größe sind Teil der AudioPatch-Struktur, die von HAL zurückgegeben wird. Die tatsächliche Puffergröße in Frames ist Teil der StreamDescriptor Struktur zusammen mit der Frame-Größe in Byte. Die Puffergröße in Byte kann durch Multiplikation dieser beiden Zahlen berechnet.

Verbindung für „Audioeffekte“

HIDL API-Schnittstellenmethoden AIDL API-Schnittstellenmethoden
IDevice.addDeviceEffect
IDevice.removeDeviceEffect
IModule.addDeviceEffect
IModule.removeDeviceEffect
IStream.addEffect
IStream.removeEffect
IStreamCommon.addEffect
IStreamCommon.removeEffect

Systemweite Konfiguration

Systemweite Konfiguration, die zuvor in der XML-Datei der Audiorichtlinien definiert wurde Konfigurationsdateien (audio_policy_configuration.xml und audio_policy_engine_configuration.xml) muss über IConfig bereitgestellt werden. Um die Umstellung auf AIDL zu erleichtern, können Anbieter jedoch weiterhin die Möglichkeit haben, XML-Dateien, mit denen sie zuvor die systemweite Konfiguration festgelegt haben. Die Referenzimplementierung für IConfig enthält den Code, der für Informationen aus der XML-Datei mithilfe von AIDL-Datentypen darstellen, die erleichtert die Konvertierung von XML in AIDL.

Elemente der HIDL-Konfigurationsdatei AIDL API-Schnittstellenmethoden
<globalConfiguration>
<speaker_drc_enabled>1

<call_screen_mode_supported>
<engine_library>
Auf zwei unterschiedliche Methoden aufgeteilt:
ITelephony.getSupportedAudioModes IConfig.getEngineConfig
<volumes> ODER <volumeGroups>.
<ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. speaker_drc_enabled wird aus der Konfigurationsdatei entfernt als dieses Konfigurationselements nicht im System verwendet wird. Alle Geräte müssen DRC aktiviert.<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">

Funktionsbezogene Funktionen

HIDL API-Schnittstellenmethoden AIDL API-Schnittstelle
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 (Callbacks werden kombiniert in IStreamOutEventCallback)
IDevice.get/setParameters
IStream.get/setParameters
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters

Veraltete Methoden

HIDL API-Schnittstellenmethoden Kommentare
IDevice.initCheck
IDevice.close
Das HAL-Modul wird mit dem ServiceManager nur auf erfolgreichen Initialisierung bei. Ab diesem Zeitpunkt gilt sie als dauerhaft. und können nicht geschlossen werden.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Unterstützung für Patches, Pause, Fortsetzen und Beenden ist obligatorisch.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Veraltet.

Anbietererweiterungen

In der HIDL API werden Anbietererweiterungen mithilfe der getParameters oder setParameters-Methoden von den Schnittstellen IDevice und IStream. Diese -Methoden akzeptieren beliebige Zeichenfolgen. In der AIDL API gibt es entsprechende Methoden wie getVendorParameters oder setVendorParameters, die beliebige Parcelable-Instanzen mithilfe von Datenkapselung innerhalb von ParcelableHolders.

Sonstige Änderungen

Weitere allgemeine Änderungen:

  1. Um die Testbarkeit von HAL APIs zu verbessern, haben wir in der AIDL-Version Es werden Optionen zur Fehlerbehebung vorgestellt, die bei VTS-Tests verwendet werden über das Paket ModuleDebug. Mit diesen Optionen wird der HAL angewiesen, bestimmte Funktionen emulieren (z. B. das Verbinden externer Geräte), die ansonsten manuelles Eingreifen und externe Tests erfordern. Ausrüstung.

  2. HAL-Dienste müssen neu gestartet werden, wenn der Wert der Systemeigenschaft sys.audio.restart.hal ist auf 1 gesetzt. Der Neustart erfolgt durch audioserver.rc Verwenden Sie bei der Implementierung des HAL den entsprechenden HAL-Dienstnamen, der in die Datei audioserver.rc. In Android 14 ist der Name vendor.audio-hal-aidl wurde speziell für die AIDL-Version der HAL.

Effekt HAL

Alle HIDL-Schnittstellen befinden sich im android.hardware.audio.effect@N.M*- -Paket, wobei N.M die Major.Minor-Version ist. Alle AIDL-Schnittstellen sind im android.hardware.audio.effect-Paket.

HIDL API-Schnittstellen und Konfigurationsdateien AIDL API-Schnittstellen
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Effect-Fabrik

HIDL API-Schnittstellen
(android.hardware.audio.effect@X.X)
AIDL API-Schnittstellen
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects mit null UUID-Parameter
IEffectsFactory.getDescriptor IFactory.queryEffects mit UUID-Parameter
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.queryEffects

Effektoberflächen

HIDL API-Schnittstellen
(android.hardware.audio.effect@X.X)
AIDL API-Schnittstellen
(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 Karte zu IEffect.command,
IEffect.setParameter oder
IEffect.getParameter basierend auf dem Typ des alten HIDL Befehl
IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

Effektbefehle

HIDL API-Schnittstellen
(android.hardware.audio.effect@X.X)
AIDL API-Schnittstellen
(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 Eingestellt in AIDL HAL für Effekte
EFFECT_CMD_SET_PARAM_COMMIT Eingestellt in AIDL HAL für Effekte
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
(wie VISUALIZER_CMD_CAPTURE)
IEffect.getParameter
EFFECT_CMD_OFFLOAD Eingestellt.
In AIDL werden Auslagerungsmodus und Nicht-Auslagerungsmodus in der Framework.
EFFECT_CMD_DUMP Wird von der integrierten Binder-Transaktion AIBinder_dump verarbeitet.

Definition der Parameter für den gemeinsamen Effekt

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

Spezifische Effekte – Definition

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