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 przezIConfig.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życiuIFactory.queryEffects
, a wszystkie procesy przetwarzania efektówIFactory.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 naIModule
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 instancjiIModule
. Parametry związane z orientacją synchroniczną Bluetooth (BT SCO) i zestawem głośnomówiącym Profil (HFP) jest obsługiwany przez dedykowanyIBluetooth
za pomocą prostego interfejsu online. Specjalny interfejsITelephony
umożliwia specyficzne dla telefonii elementów sterujących. Instancje obu tych interfejsów można pobrać z instancji głównej interfejsuIModule
. 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 (czyliIModule
instancje interfejsu) są teraz rejestrowane bezpośrednio z menedżerem usług, używając ich nazw na przykład nazw instancji, takich jakbluetooth
lubr_submix
. Jedynym wyjątkiem jest modułprimary
, jest zarejestrowany pod nazwą instancjidefault
.
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.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> <call_screen_mode_supported>
<engine_library> |
Dostępne są dwie metody:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> LUB
<volumeGroups> <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
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:
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.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 waudioserver.rc
. W Androidzie 14 nazwa Usługavendor.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 |