Di Android 13 dan yang lebih rendah, antarmuka Audio HAL
yang ditentukan menggunakan HIDL dalam file HIDL HAL (dengan
ekstensi .hal
) dan
Skema XSD untuk
file konfigurasi, seperti
yang ditampilkan sebagai berikut.
Gambar 1. Antarmuka HAL Audio.
File konfigurasi
File konfigurasi XML kebijakan audio dan efek audio dianggap sebagai bagian di antarmuka Audio HIDL HAL. File-file ini harus sesuai dengan skema mereka, dan kesesuaiannya diverifikasi dengan uji VTS.
Sebagai bagian dari penerapan HIDL HAL audio, Anda harus membuat
file konfigurasi kebijakan audio
yang menjelaskan topologi audio. Kemampuan HAL audio harus dideklarasikan di
file audio_policy_configuration.xml
agar framework dapat menggunakannya.
API HIDL HAL Audio
Bagian ini menjelaskan API HAL Inti, Efek, dan Umum untuk HIDL.
HAL Inti
Beberapa antarmuka utama Core HAL, yang menggunakan HIDL, adalah sebagai berikut:
IDeviceFactory.hal
adalah titik entri ke API.IDevice.hal
danIPrimaryDevice.hal
berisi metode sepertisetMasterVolume
atauopenInputStream
.- Streaming 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 Core HAL HIDL yang berguna:
Komponen HAL Inti | Lokasi |
---|---|
API versi 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 ini juga dapat
dianggap sebagai referensi saat
menerapkan Audio HAL versi baru yang
berinteraksi dengan driver {i>kernel<i}
secara langsung.
HAL Efek
Tabel berikut mencantumkan lokasi komponen Effect HAL yang berguna menggunakan HIDL:
Komponen HAL efek | Lokasi |
---|---|
API versi terbaru | /hardware/interfaces/audio/effect/6.0/
|
Skema XSD file konfigurasi efek | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
Untuk informasi selengkapnya, lihat contoh implementasi
Effect HAL API di /hardware/interfaces/audio/effect/all-versions/default/
dan bagian Audio Effects.
HAL Umum
Common HAL API yang menggunakan HIDL berisi hal berikut:
- Definisi (
/hardware/interfaces/audio/common/6.0/types.hal
) dibagikan oleh Core dan Effect API. - Utilitas (
/hardware/interfaces/audio/common/all-versions
) digunakan untuk membantu coding terhadap HIDL API untuk implementasi, klien, dan pengujian.
Pembaruan pada Audio HAL V7
Ada perubahan signifikan pada HAL Audio versi 7 di Android 12 seperti yang diuraikan di bagian ini. Audio HAL 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 dibuat di area berikut di Audio HAL V7:
Perubahan ini dibahas secara lebih mendetail di bagiannya masing-masing.
Enumerasi
Mulai Audio HAL V7, jenis enumerasi yang digunakan dalam Konfigurasi Kebijakan Audio hanya ditentukan dalam skema XSD dan bukan dalam HIDL.
Pada Audio HAL V6, nilai jenis enum (seperti AudioFormat
) di types.hal
adalah
file konfigurasi kebijakan audio juga ditentukan dalam skema XSD, yang membuat sebuah
duplikasi. Untuk menghindarinya di V7, jenis enum diubah menjadi string
dan
semua nilai enumerasi yang mungkin
dicantumkan di 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 mengetahui jenis enum yang telah dikonversi
string
:
AudioChannelMask
AudioContentType
AudioDevice
: Vendor dapat diperluasAudioFormat
: Vendor dapat diperluasAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Meneruskan nilai enum string
Nilai {i>string<i} digunakan untuk mentransfer informasi sebagai nilai enumerasi di batas antarmuka HAL. Baik kerangka kerja maupun Wrapper HAL menggunakan nilai enum bilangan bulat untuk menerapkan logika bisnis dan menerapkan pendekatan konversi yang ditunjukkan pada 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 enum yang diteruskan ke HAL lama.
Perubahan skema XML
Memiliki daftar lengkap nilai enum dalam definisi skema XML (XSD) memungkinkan untuk validasi file XML konfigurasi kebijakan audio yang lebih baik oleh VTS. Kita berhasil perubahan di file konfigurasi kebijakan audio yang digunakan dengan HAL V7 untuk mematuhi XSD.
Di V7, karakter ␣
(spasi) standar digunakan untuk membatasi daftar nilai di
atribut (seperti frekuensi pengambilan sampel, mask saluran, dan tanda), bukan ,
simbol (koma) dan |
(batang vertikal) yang digunakan di V6 dan di bawahnya. Seperti yang terlihat dalam
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 V6
file konfigurasi kebijakan audio 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 duplikasi definisi. Tupel item data berulang dikelompokkan menjadi satu ke dalam materi yang dapat digunakan kembali Google. Struktur data ini menggunakan fitur HIDL terbaru seperti union yang aman.
Misalnya, di V6 dan yang lebih lama, tiga kali lipat <format, sampling rate, channel mask>
sering digunakan dalam antarmuka
dan tipe 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 longgar di
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
menggantikan serikat di
AudioPort/PortConfig
Tag vendor
Selain jenis dan format perangkat, vendor dapat menambahkan tag kustom untuk audio {i>track metadata<i}.
Untuk metadata lagu pemutaran dan perekaman, vendor dapat meneruskan tag mereka sendiri, yang digunakan untuk menambahkan atribut ke streaming I/O audio, dari aplikasi ke HAL.
Tag vendor untuk metadata trek pemutaran ditambahkan seperti yang terlihat pada contoh berikut contoh:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
Struktur RecordTrackMetadata
diimplementasikan dengan cara yang sama dengan
penambahan {i>tag<i} khusus untuk
metadata trek rekaman.
Ruang nama ekstensi vendor
Mulai HAL V7, ekstensi vendor memerlukan awalan {vendor}
tambahan
yang tidak diperlukan di V6. Agar awalan {vendor}
valid, awalan tersebut harus berupa
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 HIDL HAL |
---|---|
Android 13 | 7.1 |
Android 12 | 7,0 |
Android 11 | 6.0 |
Android 10 | 5,0 |
Android 9 | 4.0 |
Android 8 | 2.0 |