HIDL Audio HAL

Di Android 13 dan yang lebih rendah, antarmuka Audio HAL ditentukan menggunakan HIDL dalam file HIDL HAL (dengan ekstensi .hal ) dan skema XSD untuk file konfigurasi, yang ditunjukkan sebagai berikut.

audio_hal

Gambar 1. Antarmuka Audio HAL.

File konfigurasi

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

Sebagai bagian dari implementasi audio HIDL HAL, 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.

API HIDL HAL Audio

Bagian ini menjelaskan API Inti, Efek, dan HAL Umum untuk HIDL.

Inti HAL

Beberapa antarmuka utama Core HAL, menggunakan HIDL, adalah sebagai berikut:

  • IDeviceFactory.hal adalah titik masuk ke API.
  • IDevice.hal dan IPrimaryDevice.hal berisi metode seperti setMasterVolume atau openInputStream .
  • Aliran bersifat 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 HIDL 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 perpustakaan bersama yang lama . Implementasi default juga dapat dianggap sebagai referensi ketika mengimplementasikan Audio HAL versi baru yang berinteraksi dengan driver kernel secara langsung.

Efek HAL

Tabel berikut mencantumkan lokasi komponen Effects HAL yang berguna menggunakan HIDL:

Efek komponen HAL 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 lebih lanjut, lihat contoh implementasi Effects HAL API di /hardware/interfaces/audio/effect/all-versions/default/ dan bagian Audio Effects .

HAL umum

API HAL Umum yang menggunakan HIDL berisi hal berikut:

  • Definisi ( /hardware/interfaces/audio/common/6.0/types.hal ) yang dibagikan oleh API Inti dan Efek.
  • Utilitas ( /hardware/interfaces/audio/common/all-versions ) digunakan untuk membantu pengkodean 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. 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 pada area berikut di Audio HAL V7:

Perubahan ini dibahas lebih rinci di bagiannya masing-masing.

Pencacahan

Mulai di Audio HAL V7, tipe enumerasi yang digunakan dalam file Konfigurasi Kebijakan Audio hanya ditentukan dalam skema XSD dan bukan di HIDL.

Di Audio HAL V6, nilai tipe enum (seperti AudioFormat ) di types.hal juga ditentukan dalam skema XSD file konfigurasi kebijakan audio, sehingga menciptakan duplikasi. Untuk menghindari hal ini di V7, tipe enum diubah menjadi string dan semua nilai enumerasi yang mungkin dicantumkan dalam skema XSD.

Gambar 2 membandingkan beberapa perubahan pada tipe enum AudioFormat di V7:

audioformat-change

Gambar 2. Perbandingan beberapa perubahan pada enum AudioFormat.

Lihat daftar berikut untuk tipe enum yang telah dikonversi ke string :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : Vendor dapat diperluas
  • AudioFormat : Vendor dapat diperluas
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

Berikan nilai string enum

Nilai string digunakan untuk mentransfer informasi sebagai nilai enumerasi melintasi batas antarmuka HAL. Kerangka kerja dan pembungkus HAL menggunakan nilai integer enum untuk mengimplementasikan logika bisnis dan menggunakan pendekatan konversi yang digambarkan pada 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 AudioFormat diubah menjadi nilai string di libaudiohal dan diteruskan ke HAL.
  2. 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. Kami membuat perubahan 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 laju pengambilan sampel, masker saluran, dan bendera), bukan , (koma) dan | (batang vertikal) simbol yang digunakan di V6 dan di bawahnya. Seperti terlihat pada contoh berikut, spasi digunakan untuk membatasi daftar nilai channelMasks :

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Untuk mengubah 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

Kami mendefinisikan ulang beberapa struktur data di V7 untuk meminimalkan definisi duplikat. Tuple item data yang berulang dikelompokkan menjadi struktur yang dapat digunakan kembali. Struktur data ini menggunakan fitur HIDL terbaru seperti serikat aman.

Misalnya, di V6 dan di bawahnya, tiga kali lipat <format, sampling rate, channel mask> sering digunakan dalam antarmuka dan tipe HIDL. Untuk menghilangkan 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 longgar di AudioPort/PortConfig

  • AudioPortExtendedInfo := device | mix | session

    menggantikan serikat pekerja di AudioPort/PortConfig

Tag vendor

Selain jenis dan format perangkat, vendor dapat menambahkan tag khusus untuk metadata trek audio.

Untuk memutar dan merekam 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 diterapkan dengan cara yang sama dengan menambahkan tag khusus untuk metadata trek rekaman.

Spasi 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 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