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 olehIConfig.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 menggunakanIFactory.queryEffects
, dan semua pemrosesan efek yang menggunakanIFactory.queryProcessing
.Agar tidak bingung dengan penggunaan istilah device untuk jenis perangkat audio,
IDevice
di HIDL Audio HAL diganti namanya menjadiIModule
di HAL Audio AIDL.IPrimaryDevice
diganti di AIDL Audio HAL. Info terbaru tentang audio saat ini mode dan rotasi layar dikirim ke setiap instanceIModule
. Parameter terkait dengan Bluetooth Sinkronkan Connection Berorientasi (BT SCO) dan Hands-Free Profil (HFP) ditangani olehIBluetooth
khusus dalam antarmuka berbasis web yang sederhana. AntarmukaITelephony
khusus menyediakan khusus telepon kontrol. Instance dari kedua antarmuka ini dapat diambil dari instance utama dari antarmukaIModule
. 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
ataur_submix
. Satu-satunya pengecualian adalah modulprimary
yang terdaftar dengan nama instancedefault
.
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.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> <call_screen_mode_supported>
<engine_library> |
Dipisah menjadi dua metode berbeda:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> , ATAU
<volumeGroups> , <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
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:
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.Layanan HAL perlu dimulai ulang saat nilai properti sistem
sys.audio.restart.hal
disetel ke1
. Proses mulai ulang dilakukan melaluiaudioserver.rc
Saat mengimplementasikan HAL, gunakan nama layanan HAL yang sesuai seperti yang tercantum dalam fileaudioserver.rc
. Di Android 14, nama inivendor.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 |