HAL Audio HIDL

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.

audio_hal

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 dan IPrimaryDevice.hal berisi metode seperti setMasterVolume atau openInputStream.
  • Streaming 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 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:

perubahan-format audio

Gambar 2. Perbandingan beberapa perubahan pada enum AudioFormat.

Lihat daftar berikut untuk mengetahui jenis enum yang telah dikonversi string:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice: Vendor dapat diperluas
  • AudioFormat: Vendor dapat diperluas
  • AudioGainMode
  • 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:

nilai penerusan audio

Gambar 3. Meneruskan nilai enum string.

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

  1. Nilai enum AudioFormat dikonversi menjadi nilai string di libaudiohal dan diteruskan ke HAL.
  2. 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 AudioConfigBasedan 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