Porównanie AIDL i HIDL Audio HAL

Od Androida 14 oraz partnerów i dostawców układów SOC zachęcamy do zastąpienia obecnej implementacji HIDL HAL przez AIDL HAL. implementacji.

Ułatwienie płynnego przejścia z HiDL Audio HAL na interfejs AIDL Audio HAL, wyróżniliśmy na tej stronie kilka najważniejszych różnic. Na tej stronie znajduje się również mapowanie między interfejsami AIDL i HIDL dla HAL audio.

Różnica między implementacją AIDL i HIDL Audio HAL

Główne różnice między strukturą HIDL a AIDL są następujące: następujące:

  • W pakiecie AIDL Audio Core HAL Interfejs IConfig został wprowadzony jako zamiennik całego systemu w plikach XML w HIDL HAL. Platforma odczytuje te parametry z Core HAL, a nie z pliku konfiguracji dostawcy. Przykładem może być lista formatów surround wyświetlanych użytkownikom w celu kontrolowania jest świadczona przez IConfig.getSurroundSoundConfig w Core HAL.

    W panelu HAL AIDL Audio Effects: logika effectProxy zdefiniowana w plikach XML w tabeli HIDL Effects HAL została przeniesiona do platformę audio. Platforma audio wysyła zapytania do wszystkich instancji efektów w w systemie przy użyciu IFactory.queryEffects, a wszystkie procesy przetwarzania efektów IFactory.queryProcessing

  • Aby uniknąć nieporozumień z użyciem terminu urządzenie w odniesieniu do typów urządzeń audio, Nazwa IDevice w HIDL Audio HAL została zmieniona na IModule w AIDL Audio HAL.

  • Element IPrimaryDevice został zastąpiony w AIDL Audio HAL. Aktualizacje dotyczące bieżącego dźwięku tryb i obrót ekranu są wysyłane do każdej instancji IModule. Parametry związane z orientacją synchroniczną Bluetooth (BT SCO) i zestawem głośnomówiącym Profil (HFP) jest obsługiwany przez dedykowany IBluetooth za pomocą prostego interfejsu online. Specjalny interfejs ITelephony umożliwia specyficzne dla telefonii elementów sterujących. Instancje obu tych interfejsów można pobrać z instancji głównej interfejsu IModule. Zobacz tabele porównawcze na Podstawowe HAL i Funkcje związane z funkcjami .

  • Kod IDevicesFactory został usunięty z interfejsu AIDL Audio HAL, aby uniknąć nadmiarowości. HAL, moduły (czyli IModule instancje interfejsu) są teraz rejestrowane bezpośrednio z menedżerem usług, używając ich nazw na przykład nazw instancji, takich jak bluetooth lub r_submix. Jedynym wyjątkiem jest moduł primary, jest zarejestrowany pod nazwą instancji default.

Mapowanie AIDL i HIDL Audio HAL

Tabele w kolejnych sekcjach przedstawiają mapowanie między HIDL a AIDL Interfejsy audio HAL. Zobacz Plik audio HAL README .

Podstawowa HAL

Wszystkie interfejsy HIDL znajdują się w pakiecie android.hardware.audio@N.M, gdzie N.M oznacza wersję Major.Minor. Wszystkie interfejsy AIDL znajdują się w android.hardware.audio.core pakiet.

Interfejsy API HIDL i pliki konfiguracji Interfejsy API AIDL
IDevicesFactory Rejestracja domeny IModule w: ServiceManager.
IDevice IModule
IPrimaryDevice ITelephony
IBluetooth
IStream
IStreamIn
IStreamOut
StreamDescriptor
IStreamIn
IStreamCommon
IStreamOut
audio_policy_configuration.xml
audio_policy_engine_configuration.xml
IConfig
IModule
Konfigurowalne pliki zasad dotyczących dźwięku Używaj implementacji HIDL w Androidzie 14.

Porty audio, profile dynamiczne, trasy i poprawki

W tej tabeli elementy plików XML są oznaczone za pomocą nawiasów kątowych.

Metody interfejsu API HIDL i elementy plików konfiguracji Metody interfejsu API AIDL
<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
Specyfikacja urządzenia w: IDevice.openInputStream
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Konfiguracje portu audio i strumienie audio

Metody interfejsu HIDL API Metody interfejsu 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 i 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, nominalne opóźnienie i minimalny bufor rozmiary są częścią struktury AudioPatch zwróconej przez HAL. Rzeczywisty rozmiar bufora w ramkach jest częścią StreamDescriptor i jej rozmiar w bajtach. Rozmiar bufora w bajtach może być obliczamy, mnożąc te dwie liczby.

Połączenie z efektami audio

Metody interfejsu HIDL API Metody interfejsu API AIDL
IDevice.addDeviceEffect
IDevice.removeDeviceEffect
IModule.addDeviceEffect
IModule.removeDeviceEffect
IStream.addEffect
IStream.removeEffect
IStreamCommon.addEffect
IStreamCommon.removeEffect

Konfiguracja w całym systemie

Konfiguracja w całym systemie, która została wcześniej zdefiniowana w pliku XML zasady dotyczącej dźwięku. plików konfiguracji (audio_policy_configuration.xml oraz audio_policy_engine_configuration.xml) należy przesyłać za pośrednictwem IConfig. Jednak, aby ułatwić przejście na AIDL, dostawcy nadal mogą tych samych plików XML, które były wcześniej używane do konfigurowania całej systemu. implementacja referencyjna dla IConfig zawiera kod niezbędny do reprezentujące informacje z pliku XML za pomocą typów danych AIDL, które ułatwia konwersję z kodu XML na AIDL.

Elementy pliku konfiguracji HIDL Metody interfejsu API AIDL
<globalConfiguration>
<speaker_drc_enabled>1

<call_screen_mode_supported>
<engine_library>
Dostępne są dwie metody:
ITelephony.getSupportedAudioModes IConfig.getEngineConfig
<volumes> LUB
<volumeGroups> <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. Rozszerzenie speaker_drc_enabled zostało usunięte z pliku konfiguracji jako ten element konfiguracji nie jest używany w systemie. Wszystkie urządzenia muszą mieć Włączono DRC.<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">

Funkcje związane z funkcjami

Metody interfejsu HIDL API Interfejs AIDL API
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 (wywołania zwrotne są łączone w IStreamOutEventCallback).
IDevice.get/setParameters
IStream.get/setParameters
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters

Przestarzałe metody

Metody interfejsu HIDL API Komentarze
IDevice.initCheck
IDevice.close
Moduł HAL jest publikowany przy użyciu tagu ServiceManager tylko pomyślnej inicjalizacji. W tym momencie są one uznawane za nieodwracalne. i nie można ich zamknąć.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Obsługa poprawek, wstrzymywania, wznawiania i opróżniania jest obowiązkowa.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Przestarzały.

Rozszerzenia dostawców

W interfejsie HIDL API rozszerzenia dostawców są zaimplementowane za pomocą interfejsu getParameters lub Metody setParameters z interfejsów IDevice i IStream. Te akceptują dowolne ciągi znaków. W interfejsie AIDL API dostępne są odpowiednie metody, takie jak getVendorParameters lub setVendorParameters, które pobierają dowolne Parcelable instancje za pomocą funkcji enkapulację w obrębie ParcelableHolders.

Inne zmiany

Inne ogólne zmiany są następujące:

  1. Aby poprawić możliwość testowania interfejsów HAL API, w wersji AIDL Przedstawimy opcje debugowania, które są używane w testach VTS i są dostępne przez ModuleDebug paczkę. Te opcje powodują, że HAL ma emulować określone funkcje (np. podłączanie urządzeń zewnętrznych); które w innym wypadku wymagają ręcznej interwencji i korzystania z testów zewnętrznych sprzętu.

  2. Usługi HAL muszą ponownie uruchomić się, gdy wartość właściwości systemowej sys.audio.restart.hal ma wartość 1. Ponowne uruchomienie następuje za pomocą audioserver.rc Podczas wdrażania HAL użyj odpowiedniej nazwy usługi HAL wymienionej w audioserver.rc. W Androidzie 14 nazwa Usługa vendor.audio-hal-aidl została dodana specjalnie dla wersji AIDL HAL.

HAL efektów

Wszystkie interfejsy HIDL znajdują się w: android.hardware.audio.effect@N.M* pakiet, gdzie N.M to wersja Major.Minor. Wszystkie interfejsy AIDL są w pakiecie android.hardware.audio.effect.

Interfejsy API HIDL i pliki konfiguracji Interfejsy API AIDL
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Fabryka efektów

Interfejsy HIDL API
(android.hardware.audio.effect@X.X)
Interfejsy AIDL API
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects z pustym parametrem UUID
IEffectsFactory.getDescriptor IFactory.queryEffects z parametrem UUID
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.queryEffects

Interfejsy efektów

Interfejsy HIDL API
(android.hardware.audio.effect@X.X)
Interfejsy AIDL API
(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 Mapa do: IEffect.command,
IEffect.setParameter lub
IEffect.getParameter na podstawie typu starszego HIDL polecenie
Nie dotyczy IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

Polecenia dotyczące efektów

Interfejsy HIDL API
(android.hardware.audio.effect@X.X)
Interfejsy 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 Nieużywany w Efektach AIDL HAL
EFFECT_CMD_SET_PARAM_COMMIT Nieużywany w Efektach 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
(tak samo jak VISUALIZER_CMD_CAPTURE)
IEffect.getParameter
EFFECT_CMD_OFFLOAD Wycofano.
W AIDL przełączniki trybu odciążania i nieodciążania są obsługiwane platformy.
EFFECT_CMD_DUMP Obsługiwane przez wbudowaną transakcję powiązania AIBinder_dump.

Definicja wspólnych parametrów efektu

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

Definicja konkretnych efektów

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