Dimulai dengan Android 14, partner dan vendor SoC didorong untuk mengganti implementasi HIDL HAL saat ini dengan implementasi AIDL HAL.
Untuk memfasilitasi kelancaran transisi dari HIDL Audio HAL ke AIDL Audio HAL, beberapa perbedaan utama disorot di halaman ini. Halaman ini juga menunjukkan pemetaan antara antarmuka AIDL dan HIDL untuk Audio HAL.
Perbedaan antara implementasi AIDL dan HIDL Audio HAL
Perbedaan utama antara struktur HIDL dan struktur AIDL adalah sebagai berikut:
Di AIDL Audio Core HAL , antarmuka
IConfig
diperkenalkan sebagai pengganti parameter seluruh sistem dalam file XML di HIDL HAL. Kerangka kerja membaca parameter ini dari Core HAL, bukan dari file konfigurasi vendor. Sebagai contoh, daftar format surround yang muncul untuk kontrol pengguna disediakan oleh metodeIConfig.getSurroundSoundConfig
di Core HAL.Di AIDL Audio Effects HAL , logika
effectProxy
yang ditentukan dalam file XML di HIDL Effects HAL dipindahkan ke kerangka audio. Kerangka kerja audio menanyakan semua contoh efek dalam sistem menggunakanIFactory.queryEffects
, dan semua pemrosesan efek menggunakanIFactory.queryProcessing
.Untuk menghindari kebingungan dengan penggunaan istilah perangkat untuk jenis perangkat audio,
IDevice
di HIDL Audio HAL diubah namanya menjadiIModule
di AIDL Audio HAL.IPrimaryDevice
diganti di AIDL Audio HAL. Pembaruan tentang mode audio saat ini dan rotasi layar dikirim ke setiap instanceIModule
. Parameter yang terkait dengan berorientasi koneksi sinkron Bluetooth (BT SCO) dan Profil Bebas Genggam (HFP) ditangani oleh antarmukaIBluetooth
khusus. AntarmukaITelephony
khusus menyediakan kontrol khusus telepon. Contoh dari kedua antarmuka ini dapat diambil dari contoh utama antarmukaIModule
. Lihat tabel perbandingan pada Core HAL dan fungsionalitas terkait Fitur untuk informasi lebih lanjut.IDevicesFactory
dihapus di AIDL Audio HAL untuk menghindari redundansi. Modul HAL (yaitu, instans antarmukaIModule
) kini didaftarkan langsung ke Manajer Layanan menggunakan namanya misalnya nama instans, seperti,bluetooth
ataur_submix
. Satu-satunya pengecualian adalah modulprimary
yang mendaftar dengan nama instancedefault
.
Pemetaan AIDL dan HIDL Audio HAL
Tabel di bagian berikut menunjukkan pemetaan antara antarmuka HIDL dan AIDL Audio HAL. Lihat file Audio HAL README untuk informasi lebih lanjut tentang struktur direktori.
Inti HAL
Semua antarmuka HIDL berada dalam paket android.hardware.audio@NM
, dengan NM
menunjukkan versi Major.Minor . Semua antarmuka AIDL berada dalam paket android.hardware.audio.core
.
Antarmuka HIDL API dan file konfigurasi | Antarmuka API AIDL |
---|---|
IDevicesFactory | Pendaftaran IModule dengan 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 Kebijakan Audio yang dapat dikonfigurasi | Gunakan implementasi HIDL untuk Android 14. |
Port audio, profil dinamis, rute, dan patch
Dalam tabel ini, elemen file XML ditentukan menggunakan tanda kurung sudut.
Metode antarmuka HIDL API dan elemen file konfigurasi | Metode antarmuka 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 Spesifikasi perangkat di IDevice.openInputStream IDevice.openOutputStream | IModule.setAudioPatch IModule.setAudioPortConfig IModule.resetAudioPatch |
Konfigurasi dan streaming port audio
Metode antarmuka HIDL API | Metode antarmuka 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 dan 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 , latensi nominal, dan ukuran buffer minimal adalah bagian dari struktur AudioPatch yang dikembalikan oleh HAL. Ukuran buffer sebenarnya dalam frame adalah bagian dari struktur StreamDescriptor , bersama dengan ukuran frame dalam byte. Ukuran buffer dalam byte dapat dihitung dengan mengalikan kedua angka tersebut. |
Koneksi Efek Audio
Metode antarmuka HIDL API | Metode antarmuka API AIDL |
---|---|
IDevice.addDeviceEffect IDevice.removeDeviceEffect | IModule.addDeviceEffect IModule.removeDeviceEffect |
IStream.addEffect IStream.removeEffect | IStreamCommon.addEffect IStreamCommon.removeEffect |
Konfigurasi seluruh sistem
Konfigurasi seluruh sistem yang sebelumnya ditentukan dalam file konfigurasi XML kebijakan audio (yaitu, audio_policy_configuration.xml
dan audio_policy_engine_configuration.xml
) harus disediakan melalui IConfig
. Namun, untuk memudahkan transisi ke AIDL, vendor masih memiliki opsi untuk menggunakan file XML yang sama yang sebelumnya mereka gunakan untuk mengatur konfigurasi seluruh sistem. Implementasi referensi untuk IConfig
berisi kode yang diperlukan untuk merepresentasikan informasi dari file XML menggunakan tipe data AIDL, yang memfasilitasi konversi dari XML ke AIDL.
Elemen file konfigurasi HIDL | Metode antarmuka API AIDL |
---|---|
<globalConfiguration> <speaker_drc_enabled> <call_screen_mode_supported> <engine_library> | Dipisahkan menjadi dua metode berbeda:ITelephony.getSupportedAudioModes IConfig.getEngineConfig |
<volumes> , ATAU<volumeGroups> , <ProductStrategies> | IConfig.getEngineConfig |
<surroundSound> | IConfig.getSurroundSoundConfig |
speaker_drc_enabled
dihapus dari file konfigurasi karena item konfigurasi ini tidak digunakan dalam sistem. Semua perangkat harus mengaktifkan DRC.
Fungsionalitas terkait fitur
Metode antarmuka HIDL API | Antarmuka 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 (panggilan balik digabungkan menjadi IStreamOutEventCallback ) |
IDevice.get/setParameters IStream.get/setParameters | IModule.get/setVendorParameters IStreamCommon.get/setVendorParameters |
Metode yang ketinggalan jaman
Metode antarmuka HIDL API | Komentar |
---|---|
IDevice.initCheck IDevice.close | Modul HAL menerbitkan dirinya sendiri dengan ServiceManager hanya pada inisialisasi yang berhasil. Pada saat itu dianggap permanen dan tidak dapat ditutup. |
IDevice.supportsAudioPatches IStreamOut.supportsPauseAndResume IStreamOut.supportsDrain | Dukungan untuk patch, jeda, lanjutkan, dan tiriskan adalah wajib. |
IStreamOut.getRenderPosition IStreamOut.getNextWriteTimestamp | Usang. |
Ekstensi vendor
Dalam HIDL API, ekstensi vendor diimplementasikan menggunakan metode getParameters
atau setParameters
dari antarmuka IDevice
dan IStream
. Metode ini menerima string arbitrer. Di API AIDL, terdapat metode terkait, seperti getVendorParameters
atau setVendorParameters
, yang mengambil instance Parcelable
secara arbitrer dengan menggunakan enkapsulasi dalam ParcelableHolders
.
Perubahan lainnya
Perubahan umum lainnya adalah sebagai berikut:
Untuk meningkatkan kemampuan pengujian API HAL, dalam versi AIDL, kami memperkenalkan opsi debugging yang digunakan oleh pengujian VTS dan tersedia melalui paket
ModuleDebug
. Opsi ini menginstruksikan HAL untuk meniru fungsi tertentu (misalnya, koneksi perangkat eksternal), yang memerlukan intervensi manual dan penggunaan peralatan pengujian eksternal.Layanan HAL diperlukan untuk memulai ulang ketika nilai properti sistem
sys.audio.restart.hal
diatur ke1
. Restart dilakukan melaluiaudioserver.rc
. Saat mengimplementasikan HAL, gunakan nama layanan HAL yang sesuai yang tercantum dalam fileaudioserver.rc
. Di Android 14, namavendor.audio-hal-aidl
ditambahkan khusus untuk HAL versi AIDL.
Efek HAL
Semua antarmuka HIDL berada dalam paket android.hardware.audio.effect@NM*
, dengan NM
adalah versi Major.Minor . Semua antarmuka AIDL berada dalam paket android.hardware.audio.effect
.
Antarmuka HIDL API dan file konfigurasi | Antarmuka API AIDL |
---|---|
IEffectsFactory | IFactory |
IEffect | IEffect |
audio_effects.xml | IEffect |
Pabrik Efek
Antarmuka API HIDL (android.hardware.audio.effect@XX) | Antarmuka API AIDL (android.hardware.audio.efek) |
---|---|
IEffectsFactory.getAllDescriptors | IFactory.queryEffects dengan parameter UUID nol |
IEffectsFactory.getDescriptor | IFactory.queryEffects dengan parameter UUID |
IEffectsFactory.createEffect | IFactory.createEffect |
audio_effects.xml | IFactory.queryProcessing IFactory.queryEffects |
Antarmuka efek
Antarmuka API HIDL (android.hardware.audio.effect@XX) | Antarmuka API AIDL (android.hardware.audio.efek) |
---|---|
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 | Petakan ke IEffect.command ,IEffect.setParameter , atauIEffect.getParameter berdasarkan jenis perintah HIDL lama |
T/A | IEffect.getState |
IEffect.setParameter | IEffect.setParameter |
IEffect.getParameter | IEffect.getParameter |
Perintah Efek
Antarmuka API HIDL (android.hardware.audio.effect@XX) | Antarmuka API AIDL (android.hardware.audio.efek) |
---|---|
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 | Tidak digunakan lagi di Efek AIDL HAL |
EFFECT_CMD_SET_PARAM_COMMIT | Tidak digunakan lagi di Efek 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 (sama seperti VISUALIZER_CMD_CAPTURE ) | IEffect.getParameter |
EFFECT_CMD_OFFLOAD | Tidak digunakan lagi. Di AIDL, sakelar mode offload dan non-offload ditangani dalam kerangka kerja. |
EFFECT_CMD_DUMP | Ditangani oleh transaksi pengikat bawaan AIBinder_dump . |
Definisi parameter Efek Umum
Definisi HIDL (android.hardware.audio.effect@XX) | Definisi AIDL |
---|---|
Types.hal | Flags.aidl Parameter.aidl |
Definisi Efek Khusus
Antarmuka API HIDL (android.hardware.audio.effect@XX) | Antarmuka API AIDL (android.hardware.audio.efek) |
---|---|
I $EffectType$ .hal | $EffectType$ .aidl |