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 vomIConfig.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 mitIFactory.queryEffects
und alle Effektverarbeitungen mitIFactory.queryProcessing
.Um Verwechslungen mit dem Begriff Gerät für Audiogerätetypen zu vermeiden,
IDevice
in HIDL Audio HAL wird in AIDL Audio HAL inIModule
umbenannt.IPrimaryDevice
wird in AIDL Audio HAL ersetzt. Updates zum aktuellen Audioinhalt Modus und Bildschirmdrehung werden an jedeIModule
-Instanz gesendet. Parameter zu Bluetooth synchrone Verbindung orientiert (BT SCO) und Freisprechfunktion Profil (HFP) wird von einem speziellenIBluetooth
verwaltet . Eine dedizierteITelephony
-Schnittstelle bietet Telefoniespezifische Steuerelementen. Instanzen dieser beiden Schnittstellen können aus dem primäre Instanz derIModule
-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
oderr_submix
. Die einzige Ausnahme ist das Modulprimary
, wird unter dem Instanznamendefault
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.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> <call_screen_mode_supported>
<engine_library> |
Auf zwei unterschiedliche Methoden aufgeteilt:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> ODER
<volumeGroups> . <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
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:
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.HAL-Dienste müssen neu gestartet werden, wenn der Wert der Systemeigenschaft
sys.audio.restart.hal
ist auf1
gesetzt. Der Neustart erfolgt durchaudioserver.rc
Verwenden Sie bei der Implementierung des HAL den entsprechenden HAL-Dienstnamen, der in die Dateiaudioserver.rc
. In Android 14 ist der Namevendor.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 |