Di Android 13 dan yang lebih rendah, antarmuka HAL Audio ditentukan menggunakan HIDL dalam file HAL HIDL (dengan ekstensi .hal
) dan skema XSD untuk file konfigurasi, seperti yang ditunjukkan di bawah.
Gambar 1. Antarmuka HAL audio.
File konfigurasi
File konfigurasi XML efek audio dan kebijakan audio dianggap sebagai bagian dari antarmuka HAL HIDL Audio. File ini harus sesuai dengan skemanya, dan kesesuaiannya diverifikasi oleh pengujian VTS.
Sebagai bagian dari penerapan HAL HIDL audio, Anda harus membuat
file konfigurasi kebijakan audio
yang menjelaskan topologi audio. Kemampuan HAL audio harus dideklarasikan dalam
file audio_policy_configuration.xml
agar framework dapat menggunakannya.
Audio HIDL HAL API
Bagian ini menjelaskan API HAL Inti, Efek, dan Umum untuk HIDL.
HAL Inti
Beberapa antarmuka utama Core HAL, menggunakan HIDL, adalah sebagai berikut:
IDeviceFactory.hal
adalah titik entri ke API.IDevice.hal
danIPrimaryDevice.hal
berisi metode sepertisetMasterVolume
atauopenInputStream
.- Aliran bersifat searah dan digunakan oleh AudioFlinger untuk mengirim atau menerima
audio ke dan dari HAL melalui
IStream.hal
,IStreamOut.hal
, danIStreamIn.hal
.
Tabel berikut mencantumkan lokasi komponen HIDL HAL Inti yang berguna:
Komponen HAL inti | Lokasi |
---|---|
Versi API terbaru | /hardware/interfaces/audio/6.0
|
Jenis khusus untuk Core HAL API terbaru | /hardware/interfaces/audio/6.0/types.hal
|
Skema XSD file konfigurasi kebijakan audio | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd
|
Implementasi default Core HAL API (/hardware/interfaces/audio/core/all-versions/default/
)
adalah wrapper di sekitar implementasi HAL pra-Treble menggunakan
library bersama lama.
Implementasi default juga dapat dianggap sebagai referensi saat menerapkan versi baru HAL Audio yang berinteraksi langsung dengan driver kernel.
HAL Efek
Tabel berikut mencantumkan lokasi komponen HAL Efek yang berguna menggunakan HIDL:
Komponen HAL efek | Lokasi |
---|---|
Versi API terbaru | /hardware/interfaces/audio/effect/6.0/
|
Skema XSD file konfigurasi efek | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
Untuk mengetahui informasi selengkapnya, lihat contoh penerapan
Effects HAL API di /hardware/interfaces/audio/effect/all-versions/default/
dan bagian Efek Audio.
HAL Umum
Common HAL API menggunakan HIDL berisi hal berikut:
- Definisi (
/hardware/interfaces/audio/common/6.0/types.hal
) yang dibagikan oleh Core API dan Effect API. - Utilitas (
/hardware/interfaces/audio/common/all-versions
) yang digunakan untuk membantu pengodean terhadap API HIDL untuk implementasi, klien, dan pengujian.
Pembaruan pada Audio HAL V7
Ada perubahan signifikan pada Audio HAL versi 7 di Android 12 seperti yang diuraikan di bagian ini. HAL Audio V7 melakukan hal berikut:
- Menyatukan model data yang digunakan oleh framework dan HAL.
- Meminimalkan duplikasi antara jenis data HIDL (enum) dan skema XML yang digunakan untuk konfigurasi kebijakan audio.
Secara khusus, perubahan dilakukan di area berikut dalam Audio HAL V7:
Perubahan ini dibahas lebih mendetail di bagian masing-masing.
Enumerasi
Mulai di Audio HAL V7, jenis yang di-enum yang digunakan dalam file Konfigurasi Kebijakan Audio hanya ditentukan dalam skema XSD, bukan di HIDL.
Di Audio HAL V6, nilai jenis enum (seperti AudioFormat
) di types.hal
juga ditentukan dalam skema XSD file konfigurasi kebijakan audio, sehingga terjadi duplikasi. Untuk menghindari hal ini di V7, jenis enum diubah menjadi string
dan
semua kemungkinan nilai enumerasi dicantumkan dalam skema XSD.
Gambar 2 membandingkan beberapa perubahan pada jenis enum AudioFormat
di V7:
Gambar 2. Perbandingan beberapa perubahan pada enum AudioFormat.
Lihat daftar berikut untuk jenis enum yang telah dikonversi ke
string
:
AudioChannelMask
AudioContentType
AudioDevice
: Dapat diekstensi vendorAudioFormat
: Dapat diperluas oleh vendorAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Meneruskan nilai enum string
Nilai string digunakan untuk mentransfer informasi sebagai nilai enumerasi di seluruh batas antarmuka HAL. Framework dan wrapper HAL menggunakan nilai enum bilangan bulat untuk menerapkan logika bisnis dan menggunakan pendekatan konversi yang digambarkan dalam Gambar 3:
Gambar 3. Meneruskan nilai enum string.
Sebagai contoh, untuk meneruskan nilai jenis format audio dari framework ke vendor:
- Nilai enum
AudioFormat
dikonversi menjadi nilai string dilibaudiohal
dan diteruskan ke HAL. - Di sisi HAL, wrapper default mengonversi string menjadi nilai enum, yang diteruskan ke HAL lama.
Perubahan skema XML
Memiliki daftar lengkap nilai enum dalam definisi skema XML (XSD) memungkinkan validasi file XML konfigurasi kebijakan audio yang lebih baik oleh VTS. Kami melakukan perubahan pada file konfigurasi kebijakan audio yang digunakan dengan HAL V7 agar mematuhi XSD.
Di V7, karakter ␣
(spasi) standar digunakan untuk membatasi daftar nilai dalam atribut (seperti frekuensi pengambilan sampel, mask channel, dan tanda), bukan simbol ,
(koma) dan |
(batang vertikal) yang digunakan di V6 dan versi di bawahnya. Seperti yang terlihat dalam contoh berikut, spasi digunakan untuk membatasi daftar nilai untuk channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
Untuk membuat perubahan simbol, gunakan skrip konversi otomatis yang disebut
update_audio_policy_config.sh
. Lihat perintah berikut untuk mengonversi file konfigurasi kebijakan audio V6 ke versi V7 untuk perangkat Pixel 5 (Redfin):
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
Jenis data
Kami mendefinisikan ulang beberapa struktur data di V7 untuk meminimalkan definisi duplikat. Tuple item data yang berulang dikelompokkan bersama menjadi struktur yang dapat digunakan kembali. Struktur data ini menggunakan fitur HIDL terbaru seperti gabungan aman.
Misalnya, di V6 dan yang lebih lama, triplet <format, sampling rate, channel mask>
sering digunakan dalam antarmuka dan jenis HIDL. Untuk menghilangkan redundansi ini, di
V7, jenis data AudioConfigBase
dan jenis data lainnya ditentukan sebagai berikut:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
digunakan oleh
AudioConfig
,AudioOffloadInfo
,AudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
menggantikan koleksi yang tidak teratur di
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
menggantikan gabungan di
AudioPort/PortConfig
Tag vendor
Selain jenis dan format perangkat, vendor dapat menambahkan tag kustom untuk metadata trek audio.
Untuk metadata trek pemutaran dan perekaman, vendor dapat meneruskan tagnya sendiri, yang digunakan untuk menambahkan atribut ke aliran I/O audio, dari aplikasi ke HAL.
Tag vendor untuk metadata trek pemutaran ditambahkan seperti yang terlihat dalam contoh berikut:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
Struktur RecordTrackMetadata
diimplementasikan dengan cara yang serupa dengan menambahkan tag khusus untuk metadata trek rekaman.
Namespace ekstensi vendor
Mulai HAL V7, ekstensi vendor memerlukan awalan {vendor}
tambahan
yang tidak diperlukan di V6. Agar awalan {vendor}
valid, awalan tersebut harus terdiri dari tiga karakter alfanumerik atau lebih.
Gunakan format berikut di V7:
VX_{vendor}_{letters/numbers}
Berikut adalah beberapa contoh ekstensi vendor V7 yang valid:
VX_GOOGLE_VR
VX_QCI_AMBIENT_MIC
Informasi versi
Tabel berikut mencantumkan nomor versi HAL untuk setiap rilis Android:
Versi Android | Versi HAL HIDL |
---|---|
Android 13 | 7.1 |
Android 12 | 7,0 |
Android 11 | 6.0 |
Android 10 | 5,0 |
Android 9 | 4.0 |
Android 8 | 2.0 |