Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Audio HAL

Lapisan Abstraksi Perangkat Keras (HAL) audio Android menghubungkan API kerangka kerja khusus audio tingkat yang lebih tinggi di android.media ke driver audio dan perangkat keras yang mendasarinya. Audio HAL mendefinisikan antarmuka standar yang dipanggil oleh layanan audio. Itu harus diterapkan agar perangkat keras audio berfungsi dengan benar.

Halaman ini memberikan ikhtisar tentang audio HAL dan memberikan detail tentang API dan persyaratan penerapannya.

Antarmuka audio HAL

Antarmuka audio HAL ditentukan menggunakan HIDL dalam file .hal dan skema XSD untuk file konfigurasi, ditampilkan sebagai berikut.

audio_hal

Gambar 1. Antarmuka Audio HAL

File konfigurasi

File konfigurasi XML kebijakan audio dan efek audio dianggap sebagai bagian dari antarmuka Audio HAL. File-file ini harus sesuai dengan skemanya, dan kesesuaiannya diverifikasi oleh tes VTS.

Sebagai bagian dari penerapan HAL audio, Anda harus membuat file konfigurasi kebijakan audio yang menjelaskan topologi audio. Kemampuan Audio HAL harus dideklarasikan dalam file audio_policy_configuration.xml agar framework dapat menggunakannya.

Audio HALAPI

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 dalam API.
  • IDevice.hal dan IPrimaryDevice.hal berisi metode seperti setMasterVolume atau openInputStream .
  • Streaming searah dan digunakan oleh AudioFlinger untuk mengirim atau menerima audio ke dan dari HAL melalui IStream.hal , IStreamOut.hal , dan IStreamIn.hal .

Tabel berikut mencantumkan lokasi komponen Core HAL yang berguna.

Komponen inti HAL 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 dari Core HAL API ( /hardware/interfaces/audio/core/all-versions/default/ ) adalah pembungkus implementasi HAL pra-Treble menggunakan pustaka 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 framework 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
API versi terbaru /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 penerapan API Efek HAL ( /hardware/interfaces/audio/effect/all-versions/default/ ) dan bagian Efek Audio .

HAL Umum

Common HAL adalah pustaka tipe data umum yang digunakan oleh Core and Effects HAL API. Itu tidak memiliki antarmuka dan tidak ada tes VTS terkait karena hanya mendefinisikan struktur data. Common HAL API berisi yang berikut ini:

  • Definisi ( /hardware/interfaces/audio/common/6.0/types.hal ) dibagikan oleh Core and Effect API
  • Utilitas ( /hardware/interfaces/audio/common/all-versions ) digunakan untuk membantu pengkodean terhadap API HIDL untuk implementasi, klien, dan pengujian

Persyaratan

Selain menerapkan HAL audio dan membuat file konfigurasi kebijakan audio, persyaratan HAL berikut harus dipatuhi:

  • Jika tangkapan untuk Pemicu Suara (ambil dari buffer DSP kata cepat) didukung oleh satu profil masukan, penerapan harus mendukung jumlah aliran aktif pada profil ini sesuai dengan jumlah sesi bersamaan yang didukung oleh Pemicu Suara HAL.
  • Konkurensi panggilan suara TX dan pengambilan dari prosesor aplikasi sebagaimana dirinci pada halaman Pengambilan bersamaan .

Pembaruan untuk Audio HAL V7

Untuk mengatasi masalah kompatibilitas mundur, AIDL Stabil wajib untuk semua perubahan HAL mulai Android 13. Untuk mendukung dan meningkatkan adopsi AIDL di Android 13 dan 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 dilakukan di area berikut di audio HAL V7:

Perubahan ini dibahas lebih rinci di bagian masing-masing.

Pencacahan

Mulai dari Audio HAL V7, tipe 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 ditentukan dalam skema XSD file konfigurasi kebijakan audio, membuat duplikasi. Untuk menghindari hal ini di V7, tipe enum diubah menjadi string dan sebagai gantinya semua nilai enumerasi yang mungkin dicantumkan dalam skema XSD.

Lihat Gambar 2 untuk perbandingan beberapa perubahan pada tipe enum AudioFormat di V7.

audioformat-change

Gambar 2. Perbandingan beberapa perubahan pada enum AudioFormat

Lihat daftar berikut untuk jenis enum yang telah diubah menjadi String :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : vendor-extensible
  • AudioFormat : vendor-extensible
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

Lewati nilai enum string

Nilai string digunakan untuk mentransfer informasi sebagai nilai pencacahan melintasi batas antarmuka HAL. Framework dan pembungkus HAL menggunakan nilai integer enum untuk mengimplementasikan logika bisnis dan menerapkan pendekatan konversi yang digambarkan dalam gambar 3 .

audio-passing-values

Gambar 3. Melewati nilai string enum

Sebagai contoh, untuk meneruskan nilai tipe format audio dari framework ke vendor:

  1. Nilai enum dari AudioFormat diubah menjadi nilai string di libaudiohal dan diteruskan ke HAL.
  2. Di sisi HAL, pembungkus 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. Perubahan dilakukan pada file konfigurasi kebijakan audio yang digunakan dengan HAL V7 untuk mematuhi XSD.

Di V7, karakter (spasi) standar digunakan untuk membatasi daftar nilai dalam atribut (seperti tingkat pengambilan sampel, masker 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 mengubah simbol, gunakan skrip konversi otomatis bernama 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 menjadi struktur yang dapat digunakan kembali. Struktur data ini menggunakan fitur HIDL terbaru seperti penyatuan yang aman.

Misalnya, di V6 dan di bawahnya, triple <format, sampling rate, channel mask> sering digunakan di antarmuka dan tipe HIDL. Untuk menghapus redundansi ini, di V7, tipe data AudioConfigBase dan tipe 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 khusus untuk metadata trek audio.

Untuk metadata trek 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:

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.

Jarak nama ekstensi vendor

Mulai 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 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 13 7.1
Android 12 7.0
Android 11 6.0
Android 10 5.0
Android 9 4.0
Android 8 2.0