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 AIDL Audio HAL, beberapa perbedaan utama akan disoroti di halaman ini. Halaman ini juga menunjukkan pemetaan antara antarmuka AIDL dan HIDL untuk HAL Audio.
Perbedaan antara penerapan HAL Audio AIDL dan HIDL
Perbedaan utama antara struktur HIDL dan struktur AIDL adalah sebagai berikut:
Di AIDL Audio Core HAL, antarmuka
IConfig
diperkenalkan sebagai pengganti parameter di seluruh sistem dalam file XML di HIDL HAL. Framework membaca parameter ini dari Core HAL, bukan file konfigurasi vendor. Sebagai contoh, 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 dalam 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 saat ini dan rotasi layar dikirim ke setiap instanceIModule
. Parameter yang terkait dengan Bluetooth synchronous connection oriented (BT SCO) dan Hands-Free Profile (HFP) ditangani oleh antarmukaIBluetooth
khusus. AntarmukaITelephony
khusus menyediakan kontrol khusus telepon. Instance kedua antarmuka ini dapat diambil dari instance utama antarmukaIModule
. Lihat tabel perbandingan di 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 didaftarkan langsung ke Pengelola Layanan menggunakan namanya untuk nama instance, seperti,bluetooth
ataur_submix
. Satu-satunya pengecualian adalah modulprimary
yang terdaftar 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 HAL Audio 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 HIDL API dan file konfigurasi | 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 ditetapkan 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 minimal
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 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 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 diberikan melalui IConfig
.
Namun, untuk mempermudah transisi ke AIDL, vendor masih memiliki opsi untuk menggunakan
file XML yang sama dengan yang mereka gunakan sebelumnya untuk menyetel konfigurasi di seluruh sistem. Implementasi referensi untuk IConfig
berisi kode yang diperlukan untuk merepresentasikan 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> |
Dipisahkan menjadi dua metode yang 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 ke dalam
IStreamOutEventCallback ) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
Metode yang tidak berlaku lagi
Metode antarmuka HIDL API | Komentar |
---|---|
IDevice.initCheck IDevice.close |
Modul HAL memublikasikan dirinya dengan ServiceManager hanya pada
inisialisasi yang berhasil. Pada saat itu, jendela dianggap permanen dan tidak dapat ditutup. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
Dukungan untuk patch, jeda, lanjutkan, dan pengurasan baterai bersifat wajib. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
Tidak lagi digunakan. |
Ekstensi vendor
Di HIDL API, ekstensi vendor diterapkan menggunakan metode getParameters
atau
setParameters
dari antarmuka IDevice
dan IStream
. Metode ini menerima string arbitrer.
Di AIDL API, ada metode yang sesuai, seperti getVendorParameters
atau setVendorParameters
, yang mengambil instance Parcelable
arbitrer dengan menggunakan
enkapsulasi dalam ParcelableHolders
.
Perubahan lainnya
Perubahan umum lainnya adalah sebagai berikut:
Untuk meningkatkan kemudahan pengujian API HAL, pada versi AIDL, kami memperkenalkan opsi pen-debug-an yang digunakan oleh pengujian VTS dan tersedia melalui
ModuleDebug
parcelable. Opsi ini menginstruksikan HAL untuk meniru 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 khusus untuk HAL versi AIDL.
HAL Efek
Semua antarmuka HIDL berada dalam paket android.hardware.audio.effect@N.M*
, dengan N.M
adalah versi Major.Minor. Semua antarmuka AIDL berada
dalam paket android.hardware.audio.effect
.
Antarmuka HIDL API dan file konfigurasi | Antarmuka AIDL API |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Effect Factory
Antarmuka API HIDL (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 API HIDL (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 API HIDL (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 seperti VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
Tidak digunakan lagi.
Di AIDL, peralihan mode offload dan non-offload ditangani di 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 API HIDL (android.hardware.audio.effect@X.X) |
Antarmuka AIDL API (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |