Perbandingan AIDL dan HIDL Audio HAL

Mulai Android 14, partner, dan vendor SoC disarankan untuk mengganti implementasi HIDL HAL saat ini dengan AIDL HAL terlepas dari implementasi layanan.

Untuk memfasilitasi transisi yang lancar dari HIDL Audio HAL ke HAL Audio AIDL, beberapa perbedaan utama akan disoroti di laman 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 karena berikut ini:

  • Di AIDL Audio Core HAL, Antarmuka IConfig diperkenalkan sebagai pengganti untuk seluruh sistem parameter dalam file XML di HIDL HAL. Kerangka kerja ini membaca parameter ini dari Core HAL bukan dari file konfigurasi vendor. Sebagai contoh, daftar format surround yang ditampilkan untuk kontrol pengguna disediakan oleh IConfig.getSurroundSoundConfig di Core HAL.

    Di AIDL Audio Effects HAL, logika effectProxy yang ditentukan dalam file XML di HIDL Effects HAL dipindahkan ke kerangka kerja audio. Framework audio mengkueri semua instance efek di sistem yang menggunakan IFactory.queryEffects, dan semua pemrosesan efek yang menggunakan IFactory.queryProcessing.

  • Agar tidak bingung dengan penggunaan istilah device untuk jenis perangkat audio, IDevice di HIDL Audio HAL diganti namanya menjadi IModule di HAL Audio AIDL.

  • IPrimaryDevice diganti di AIDL Audio HAL. Info terbaru tentang audio saat ini mode dan rotasi layar dikirim ke setiap instance IModule. Parameter terkait dengan Bluetooth Sinkronkan Connection Berorientasi (BT SCO) dan Hands-Free Profil (HFP) ditangani oleh IBluetooth khusus dalam antarmuka berbasis web yang sederhana. Antarmuka ITelephony khusus menyediakan khusus telepon kontrol. Instance dari kedua antarmuka ini dapat diambil dari instance utama dari antarmuka IModule. Lihat tabel perbandingan di Core HAL dan Fungsi terkait fitur untuk informasi selengkapnya.

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

Pemetaan AIDL dan HIDL Audio HAL

Tabel di bagian berikut menunjukkan pemetaan antara HIDL dan AIDL Antarmuka HAL audio. Lihat File README HAL Audio untuk informasi lebih lanjut 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 android.hardware.audio.core.

File konfigurasi dan antarmuka 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 Menggunakan 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 buffer minimal adalah bagian dari struktur AudioPatch yang dikembalikan oleh HAL. Ukuran buffer yang sebenarnya dalam frame adalah bagian dari StreamDescriptor , bersama dengan ukuran {i>frame<i} dalam byte. Ukuran buffer dalam byte dapat dihitung dengan kalikan kedua angka tersebut.

Koneksi Efek Audio

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 sistem

Konfigurasi seluruh sistem yang sebelumnya ditentukan dalam XML kebijakan audio file konfigurasi (yaitu, audio_policy_configuration.xml dan audio_policy_engine_configuration.xml) harus diberikan melalui IConfig. Namun, untuk memudahkan transisi ke AIDL, vendor masih memiliki opsi untuk file XML yang sama yang sebelumnya mereka gunakan untuk mengatur konfigurasi tingkat sistem. Tujuan implementasi referensi untuk IConfig berisi kode yang diperlukan untuk yang mewakili informasi dari file XML menggunakan tipe 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 sebagai item konfigurasi ini tidak digunakan dalam sistem. Semua perangkat harus memiliki DRC diaktifkan.<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 sendiri dengan ServiceManager hanya pada inisialisasi berhasil. Pada saat itu, permintaan tersebut dianggap permanen dan tidak dapat ditutup.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Dukungan untuk patch, jeda, lanjutkan, dan pengosongan harus dilakukan.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Tidak berlaku lagi.

Ekstensi vendor

Di HIDL API, ekstensi vendor diimplementasikan menggunakan getParameters atau Metode setParameters dari antarmuka IDevice dan IStream. Ini menerima string arbitrer. Di 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 {i>debugging<i} yang digunakan oleh pengujian VTS dan tersedia melalui ModuleDebug parcelable. Opsi ini menginstruksikan HAL untuk mengemulasi fungsi tertentu (misalnya, koneksi perangkat eksternal), yang memerlukan intervensi manual dan penggunaan pengujian eksternal peralatan.

  2. Layanan HAL perlu dimulai ulang saat nilai properti sistem sys.audio.restart.hal disetel ke 1. Proses mulai ulang dilakukan melalui audioserver.rc Saat mengimplementasikan HAL, gunakan nama layanan HAL yang sesuai seperti yang tercantum dalam file audioserver.rc. Di Android 14, nama ini vendor.audio-hal-aidl ditambahkan secara khusus untuk versi AIDL dari HAL.

HAL Efek

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

File konfigurasi dan antarmuka 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 Petakan ke IEffect.command,
IEffect.setParameter, atau
IEffect.getParameter berdasarkan jenis HIDL lama perintah
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 dalam Effects AIDL HAL
EFFECT_CMD_SET_PARAM_COMMIT Tidak digunakan lagi dalam Effects 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, tombol mode pengurangan beban dan non-offload ditangani di Google Workspace for Education.
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 tertentu

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