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

Audio HAL

Android audio yang Hardware Abstraction Layer (HAL) menghubungkan tingkat yang lebih tinggi, API kerangka audio tertentu dalam android.media untuk driver audio yang mendasari dan perangkat keras. 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 HAL audio yang didefinisikan menggunakan HIDL di .hal file dan XSD skema untuk file-file konfigurasi, ditampilkan sebagai berikut:

audio_hal

Gambar 1: Audio interface 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 pelaksanaan HAL audio, Anda harus membuat file konfigurasi kebijakan audio yang yang menggambarkan topologi audio. Kemampuan audio HAL harus dinyatakan dalam audio_policy_configuration.xml file untuk kerangka untuk 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 dalam API.
  • IDevice.hal dan IPrimaryDevice.hal mengandung metode seperti setMasterVolume atau openInputStream .
  • Streaming adalah 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
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 standar API Inti HAL ( /hardware/interfaces/audio/core/all-versions/default/ ) adalah pembungkus sekitar pra-Treble HAL implementasi menggunakan warisan shared library . 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 mengkonfigurasi pra-pengolahan efek seperti kontrol gain otomatis dan penindasan suara melalui API Efek HAL.

Tabel berikut mencantumkan lokasi komponen Effects 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 lebih lanjut, lihat contoh implementasi dari API Efek ( /hardware/interfaces/audio/effect/all-versions/default/ ) dan Efek Audio bagian.

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 ) bersama dengan Core dan Efek API.
  • Utilitas ( /hardware/interfaces/audio/common/all-versions ) yang digunakan untuk bantuan coding terhadap HIDL API untuk implementasi, klien dan tes.

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 menangkap dari prosesor aplikasi seperti yang dijelaskan di Tangkap Concurrent halaman.

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-nilai enum jenis (seperti AudioFormat ) di types.hal juga didefinisikan dalam konfigurasi kebijakan berkas XSD skema audio, menciptakan duplikasi. Untuk menghindari hal ini di V7, yang enum jenis berubah ke string dan semua kemungkinan nilai pencacahan tercantum dalam skema XSD sebagai gantinya.

Lihat gambar 1 untuk perbandingan dari beberapa perubahan pada AudioFormat enum ketik V7:

audioformat-change

Gambar 1: Perbandingan beberapa perubahan pada AudioFormat enum

Lihat daftar berikut untuk enum jenis yang telah dikonversi ke String :

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

Melewati String nilai enum

Nilai string digunakan untuk mentransfer informasi sebagai nilai enumerasi melintasi batas antarmuka HAL. Kedua kerangka dan HAL wrapper nilai enum penggunaan bilangan bulat untuk menerapkan logika bisnis dan mempekerjakan pendekatan konversi yang digambarkan dalam gambar 2 .

audio-passing-values

Gambar 2: Passing string enum nilai-nilai

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

  1. The enum nilai AudioFormat dikonversi menjadi string nilai di libaudiohal dan diteruskan ke HAL.
  2. Di sisi HAL, default wrapper mengkonversi string ke enum nilai yang dilewatkan ke HAL warisan.

Perubahan Skema XML

Memiliki daftar lengkap nilai enum dalam 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.

Dalam V7, standar (spasi) karakter digunakan untuk daftar nilai membatasi dalam atribut (seperti tingkat pengambilan sampel, masker saluran dan bendera), bukan , (koma) dan | (bilah vertikal) simbol yang digunakan di V6 dan di bawahnya. Seperti yang terlihat dalam contoh berikut, ruang yang digunakan untuk membatasi daftar nilai untuk channelMasks :

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Untuk membuat perubahan simbol, menggunakan script konversi otomatis 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, dalam V6 dan bawah, triple dari <format, sampling rate, channel mask> sering digunakan dalam antarmuka HIDL dan jenis. Untuk menghapus redundansi ini, di V7, yang AudioConfigBase tipe data 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 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;
};

The RecordTrackMetadata struktur diimplementasikan dengan cara yang sama dengan menambahkan tag khusus untuk metadata rekaman track.

Penspasian Nama Ekstensi Vendor

Mulai di HAL V7, penjual ekstensi memerlukan tambahan {vendor} awalan yang tidak diperlukan di V6. Untuk {vendor} awalan untuk menjadi valid, itu harus tiga atau lebih alfanumerik karakter.

Gunakan format berikut di V7:

VX_ {penjual} _ {huruf / angka / _}

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