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 metodeIConfig.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 menggunakanIFactory.queryEffects
, dan semua pemrosesan efek menggunakanIFactory.queryProcessing
.Untuk menghindari kebingungan dengan penggunaan istilah perangkat untuk jenis perangkat audio,
IDevice
di HIDL Audio HAL diganti namanya menjadiIModule
di AIDL Audio HAL.IPrimaryDevice
diganti di AIDL Audio HAL. Pembaruan tentang mode audio dan rotasi layar saat ini dikirim ke setiap instanceIModule
. Parameter yang terkait dengan Bluetooth sinkron connection oriented (BT SCO) dan Hands-Free Profile (HFP) ditangani oleh antarmukaIBluetooth
khusus. AntarmukaITelephony
khusus menyediakan kontrol khusus telepon. Instance dari kedua antarmuka ini dapat diambil dari instance utama antarmukaIModule
. 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 antarmukaIModule
) kini terdaftar langsung dengan Pengelola Layanan menggunakan namanya untuk nama instance, seperti,bluetooth
ataur_submix
. Satu-satunya pengecualian adalah modulprimary
yang didaftarkan dengan nama instancedefault
.
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.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> <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 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:
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.Layanan HAL harus dimulai ulang saat nilai properti sistem
sys.audio.restart.hal
ditetapkan ke1
. Mulai ulang dilakukan melaluiaudioserver.rc
. Saat menerapkan HAL, gunakan nama layanan HAL yang sesuai yang tercantum dalam fileaudioserver.rc
. Di Android 14, namavendor.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 |