Lapisan Abstraksi Perangkat Keras (HAL) audio Android menghubungkan API kerangka kerja khusus audio tingkat tinggi di android.media
ke driver audio dan perangkat keras yang mendasarinya. Audio HAL mendefinisikan antarmuka standar yang digunakan oleh layanan audio. Ini harus diterapkan agar perangkat keras audio berfungsi dengan benar.
Halaman ini memberikan ikhtisar tentang HAL audio dan memberikan detail API dan persyaratan implementasinya.
Antarmuka Audio HAL
Antarmuka audio HAL didefinisikan menggunakan HIDL dalam file .hal
dan skema XSD untuk file konfigurasi, yang ditunjukkan sebagai berikut.
Gambar 1. Antarmuka Audio HAL
File konfigurasi
Kebijakan audio dan efek audio File konfigurasi XML dianggap sebagai bagian dari antarmuka Audio HAL. File-file ini harus sesuai dengan skema mereka, dan kesesuaian diverifikasi oleh tes VTS.
Sebagai bagian dari penerapan audio HAL, Anda harus membuat file konfigurasi kebijakan audio yang menjelaskan topologi audio. Kemampuan Audio HAL harus dideklarasikan dalam file audio_policy_configuration.xml
agar kerangka kerja dapat menggunakannya.
Audio HAL API
Audio HAL berisi API berikut:
- Inti HAL
- Efek HAL
- HAL umum
Masing-masing API ini dijelaskan di bagian berikut.
Inti HAL
Core HAL adalah API utama yang digunakan oleh AudioFlinger untuk memutar audio dan mengontrol perutean audio. Beberapa antarmuka utama adalah sebagai berikut:
-
IDeviceFactory.hal
adalah titik masuk 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 Core HAL yang berguna.
Komponen inti HAL | Lokasi |
---|---|
Versi terbaru dari API | /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 dari Core HAL API ( /hardware/interfaces/audio/core/all-versions/default/
) adalah pembungkus di sekitar implementasi HAL pra-Treble menggunakan perpustakaan bersama yang lama . Implementasi default juga dapat dianggap sebagai referensi saat mengimplementasikan versi baru audio HAL yang berinteraksi dengan driver kernel secara langsung.
Efek HAL
Effects HAL API digunakan oleh kerangka efek untuk mengontrol efek audio. Anda juga dapat mengonfigurasi efek prapemrosesan seperti kontrol penguatan otomatis dan peredam bising melalui Effects HAL API.
Tabel berikut mencantumkan lokasi komponen Efek HAL yang berguna.
Efek komponen HAL | Lokasi |
---|---|
Versi terbaru dari API | /hardware/interfaces/audio/effect/6.0/ |
File konfigurasi efek skema XSD | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd |
Untuk informasi selengkapnya, lihat contoh implementasi Effects HAL API ( /hardware/interfaces/audio/effect/all-versions/default/
) dan bagian Audio Effects .
HAL umum
Common HAL adalah pustaka tipe data umum yang digunakan oleh Core dan Effects HAL API. Ini tidak memiliki antarmuka dan tidak ada tes VTS terkait karena hanya mendefinisikan struktur data. Common HAL API berisi berikut ini:
- Definisi (
/hardware/interfaces/audio/common/6.0/types.hal
) yang dibagikan oleh Core dan Effect API - Utilitas (
/hardware/interfaces/audio/common/all-versions
) digunakan untuk membantu pengkodean terhadap HIDL API untuk implementasi, klien, dan pengujian
Persyaratan
Selain menerapkan audio HAL dan membuat file konfigurasi kebijakan audio, persyaratan HAL berikut harus dipatuhi:
- Jika pengambilan untuk Pemicu Suara (pengambilan dari buffer DSP kata cepat) didukung oleh satu profil input, implementasi harus mendukung jumlah aliran aktif pada profil ini sesuai dengan jumlah sesi serentak yang didukung oleh Pemicu Suara HAL.
- Concurrency panggilan suara TX dan capture dari prosesor aplikasi seperti yang dirinci pada halaman Concurrent Capture .
Pembaruan pada Audio HAL V7
Untuk mengatasi masalah kompatibilitas mundur, AIDL Stabil wajib untuk semua perubahan HAL mulai Android T. Untuk mendukung dan meningkatkan adopsi AIDL di Android T dan yang lebih tinggi, Audio HAL V7 melakukan hal berikut:
- Menyatukan model data yang digunakan oleh framework dan HAL.
- Meminimalkan duplikasi antara tipe 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 rinci di bagian masing-masing.
Enumerasi
Mulai dari Audio HAL V7, jenis enumerasi yang digunakan dalam file Konfigurasi Kebijakan Audio hanya ditentukan dalam skema XSD dan bukan dalam HIDL.
Dalam audio HAL V6, nilai tipe enum (seperti AudioFormat
) di types.hal
juga didefinisikan dalam skema XSD file konfigurasi kebijakan audio, membuat duplikasi. Untuk menghindari hal ini di V7, tipe enum diubah menjadi string
dan semua nilai enumerasi yang mungkin tercantum dalam skema XSD sebagai gantinya.
Lihat gambar 2 untuk perbandingan beberapa perubahan pada tipe enum AudioFormat
di V7.
Gambar 2. Perbandingan beberapa perubahan pada enum AudioFormat
Lihat daftar berikut untuk tipe enum yang telah dikonversi ke String
:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: dapat diperluas oleh vendor -
AudioFormat
: vendor-extensible -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
Lewati nilai enum string
Nilai string digunakan untuk mentransfer informasi sebagai nilai enumerasi melintasi batas antarmuka HAL. Baik kerangka kerja maupun pembungkus HAL menggunakan nilai integer enum untuk mengimplementasikan logika bisnis dan menggunakan pendekatan konversi yang digambarkan pada gambar 3 .
Gambar 3. Melewati nilai string enum
Sebagai contoh, untuk meneruskan nilai tipe format audio dari kerangka kerja ke vendor:
- Nilai enum
AudioFormat
dikonversi ke nilai string dilibaudiohal
dan diteruskan ke HAL. - Di sisi HAL, pembungkus default mengubah 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. Perubahan dibuat dalam file konfigurasi kebijakan audio yang digunakan dengan HAL V7 untuk mematuhi XSD.
Di V7, ␣
(spasi) standar digunakan untuk membatasi daftar nilai dalam atribut (seperti laju pengambilan sampel, topeng saluran, dan bendera), alih-alih ,
(koma) dan |
(bilah vertikal) simbol yang digunakan di V6 dan di bawahnya. Seperti yang terlihat pada 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
Tipe data
Beberapa struktur data didefinisikan ulang di V7 untuk meminimalkan definisi duplikat. Tuple berulang dari item data dikelompokkan bersama ke dalam struktur yang dapat digunakan kembali. Struktur data ini menggunakan fitur HIDL terbaru seperti serikat pekerja yang aman.
Misalnya, di V6 dan di bawahnya, tiga <format, sampling rate, channel mask>
sering digunakan dalam antarmuka dan tipe HIDL. Untuk menghapus redundansi ini, di V7, tipe data AudioConfigBase
dan tipe data lainnya didefinisikan 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 lepas di
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
menggantikan serikat pekerja di
AudioPort/PortConfig
Tag penjual
Selain jenis dan format perangkat, vendor dapat menambahkan tag khusus untuk metadata trek audio.
Untuk pemutaran dan perekaman metadata trek, vendor dapat meneruskan tag mereka 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 pada contoh berikut:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
Struktur RecordTrackMetadata
diimplementasikan dengan cara yang sama dengan menambahkan tag khusus untuk metadata trek rekaman.
Penspasian nama ekstensi vendor
Mulai di HAL V7, ekstensi vendor memerlukan awalan {vendor}
tambahan yang tidak diperlukan di V6. Agar awalan {vendor}
valid, harus terdiri dari tiga karakter alfanumerik atau lebih.
Gunakan format berikut di V7:
VX_{ vendor }_{ letters/numbers }
Berikut ini 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 |
---|---|
Android 12 | 7.0 |
Android 11 | 6.0 |
Android 10 | 5.0 |
Android 9 | 4.0 |
Android 8 | 2.0 |