Perbandingan AIDL dan HIDL Audio HAL

Mulai Android 14, partner dan vendor SoC dianjurkan untuk mengganti implementasi HAL HIDL saat ini dengan implementasi HAL AIDL.

Untuk memfasilitasi transisi yang lancar dari HIDL Audio HAL ke HAL Audio AIDL, beberapa perbedaan utama ditandai pada halaman ini. Halaman ini juga menunjukkan pemetaan antara antarmuka AIDL dan HIDL untuk HAL Audio.

Perbedaan antara penerapan 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. Framework membaca parameter ini dari Core HAL, bukan file konfigurasi vendor. Misalnya, daftar format surround yang ditampilkan 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 framework audio. Framework audio membuat kueri semua instance efek di 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 diganti namanya menjadi IModule di AIDL Audio HAL.

  • IPrimaryDevice diganti di AIDL Audio HAL. Pembaruan tentang mode audio dan rotasi layar saat ini dikirim ke setiap instance IModule. Parameter yang terkait dengan Bluetooth sinkron connection oriented (BT SCO) dan Hands-Free Profile (HFP) ditangani oleh antarmuka IBluetooth khusus. Antarmuka ITelephony khusus menyediakan kontrol khusus telepon. Instance dari kedua antarmuka ini dapat diambil dari instance utama antarmuka IModule. Lihat tabel perbandingan tentang HAL Inti dan Fungsi terkait fitur untuk mengetahui informasi selengkapnya.

  • IDevicesFactory dihapus di AIDL Audio HAL untuk menghindari redundansi. Modul HAL (yaitu, instance antarmuka IModule) kini terdaftar langsung dengan Pengelola Layanan menggunakan namanya untuk nama instance, seperti, bluetooth atau r_submix. Satu-satunya pengecualian adalah modul primary yang didaftarkan dengan nama instance default.

Pemetaan HAL Audio AIDL dan HIDL

Tabel di bagian berikut menunjukkan pemetaan antara antarmuka HAL Audio HIDL dan AIDL. Lihat file README Audio HAL untuk mengetahui informasi selengkapnya tentang struktur direktori.

HAL Inti

Semua antarmuka HIDL berada dalam paket android.hardware.audio@N.M, dengan N.M menunjukkan versi Major.Minor. Semua antarmuka AIDL berada dalam paket android.hardware.audio.core.

Antarmuka dan file konfigurasi HIDL API Antarmuka AIDL API
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 AIDL API
<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 AIDL API
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 minimum adalah bagian dari struktur AudioPatch yang ditampilkan 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 ini.

Koneksi Audio Effects

Metode antarmuka HIDL API Metode antarmuka AIDL API
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 dengan yang sebelumnya digunakan untuk menetapkan konfigurasi seluruh sistem. Penerapan referensi untuk IConfig berisi kode yang diperlukan untuk mewakili informasi dari file XML menggunakan jenis data AIDL, yang memfasilitasi konversi dari XML ke AIDL.

Elemen file konfigurasi HIDL Metode antarmuka AIDL API
<globalConfiguration>
<speaker_drc_enabled>1

<call_screen_mode_supported>
<engine_library>
Dipisah 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. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">

Fungsi terkait fitur

Metode antarmuka HIDL API Antarmuka 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 (callback digabungkan menjadi IStreamOutEventCallback)
IDevice.get/setParameters
IStream.get/setParameters
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters

Metode tidak digunakan lagi

Metode antarmuka HIDL API Komentar
IDevice.initCheck
IDevice.close
Modul HAL memublikasikan dirinya dengan ServiceManager hanya pada inisialisasi yang berhasil. Pada saat itu, sengketa dianggap bersifat permanen dan tidak dapat ditutup.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Dukungan untuk patch, jeda, lanjutkan, dan habiskan daya bersifat wajib.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Tidak berlaku lagi.

Ekstensi vendor

Di HIDL API, ekstensi vendor diterapkan menggunakan metode getParameters atau setParameters dari antarmuka IDevice dan IStream. Metode ini menerima string arbitrer. Dalam AIDL API, ada metode yang sesuai, seperti getVendorParameters atau setVendorParameters, yang mengambil instance Parcelable arbitrer menggunakan enkapsulasi dalam ParcelableHolders.

Perubahan lainnya

Perubahan umum lainnya adalah sebagai berikut:

  1. Untuk meningkatkan kemampuan pengujian HAL API, dalam versi AIDL, kami memperkenalkan opsi proses debug yang digunakan oleh pengujian VTS dan tersedia melalui parcelable ModuleDebug. Opsi ini menginstruksikan HAL untuk mengemulasikan fungsi tertentu (misalnya, koneksi perangkat eksternal), yang jika tidak memerlukan intervensi manual dan penggunaan peralatan pengujian eksternal.

  2. Layanan HAL harus dimulai ulang saat nilai properti sistem sys.audio.restart.hal ditetapkan ke 1. Mulai ulang dilakukan melalui audioserver.rc. Saat menerapkan HAL, gunakan nama layanan HAL yang sesuai yang tercantum dalam file audioserver.rc. Di Android 14, nama vendor.audio-hal-aidl ditambahkan secara khusus untuk versi AIDL HAL.

HAL Efek

Semua antarmuka HIDL berada dalam paket android.hardware.audio.effect@N.M*, dengan N.M adalah versi Major.Minor. Semua antarmuka AIDL ada dalam paket android.hardware.audio.effect.

Antarmuka dan file konfigurasi HIDL API Antarmuka AIDL API
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Pabrik Efek

Antarmuka HIDL API
(android.hardware.audio.effect@X.X)
Antarmuka AIDL API
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects dengan parameter UUID null
IEffectsFactory.getDescriptor IFactory.queryEffects dengan parameter UUID
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.queryEffects

Antarmuka efek

Antarmuka HIDL API
(android.hardware.audio.effect@X.X)
Antarmuka 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 Memetakan 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 HIDL API
(android.hardware.audio.effect@X.X)
Antarmuka AIDL API
(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 Tidak digunakan lagi di HAL AIDL Efek
EFFECT_CMD_SET_PARAM_COMMIT Tidak digunakan lagi di HAL AIDL Efek
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 dengan VISUALIZER_CMD_CAPTURE)
IEffect.getParameter
EFFECT_CMD_OFFLOAD Tidak digunakan lagi.
Di AIDL, pengalihan mode offload dan non-offload ditangani dalam framework.
EFFECT_CMD_DUMP Ditangani oleh transaksi binder bawaan AIBinder_dump.

Definisi parameter Efek Umum

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

Definisi Efek Khusus

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