Perbandingan AIDL dan HIDL Audio HAL

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 metode IConfig.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 menggunakan IFactory.queryEffects , dan semua pemrosesan efek menggunakan IFactory.queryProcessing .

  • Untuk menghindari kebingungan dengan penggunaan istilah perangkat untuk jenis perangkat audio, IDevice di HIDL Audio HAL diubah namanya menjadi IModule di AIDL Audio HAL.

  • IPrimaryDevice diganti di AIDL Audio HAL. Pembaruan tentang mode audio saat ini dan rotasi layar dikirim ke setiap instance IModule . Parameter yang terkait dengan berorientasi koneksi sinkron Bluetooth (BT SCO) dan Profil Bebas Genggam (HFP) ditangani oleh antarmuka IBluetooth khusus. Antarmuka ITelephony khusus menyediakan kontrol khusus telepon. Contoh dari kedua antarmuka ini dapat diambil dari contoh utama antarmuka IModule . 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 antarmuka IModule ) kini didaftarkan langsung ke Manajer Layanan menggunakan namanya misalnya nama instans, seperti, bluetooth atau r_submix . Satu-satunya pengecualian adalah modul primary yang mendaftar dengan nama instance default .

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.getAudioPort
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> 1

<call_screen_mode_supported>
<engine_library>
Dipisahkan menjadi dua metode berbeda:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> , ATAU
<volumeGroups> , <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. 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:

  1. 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.

  2. Layanan HAL diperlukan untuk memulai ulang ketika nilai properti sistem sys.audio.restart.hal diatur ke 1 . Restart dilakukan melalui audioserver.rc . Saat mengimplementasikan HAL, gunakan nama layanan HAL yang sesuai yang tercantum dalam file audioserver.rc . Di Android 14, nama vendor.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 , atau
IEffect.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