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

Batas Jenis Perangkat

Dalam audio Android, audio_devices_t digunakan untuk mewakili jenis perangkat audio. Ini banyak digunakan dalam kode sumber audio sebagai bidang bit untuk menyaring atau memilih satu atau lebih perangkat tertentu. Sebelum Android 11, ada batasan 30 jenis perangkat input / output audio, dan tidak ada slot cadangan untuk menambahkan jenis perangkat audio baru. Kami telah menghapus batas jumlah jenis perangkat audio untuk mengizinkan jenis perangkat audio baru ditambahkan.

Untuk menghapus batas jumlah jenis perangkat audio, jenis perangkat audio sekarang disebut nilai, bukan bit mask.

Semua jenis perangkat audio yang ada disimpan apa adanya. AUDIO_DEVICE_BIT_IN masih digunakan untuk membedakan perangkat input atau output. Saat menambahkan jenis perangkat audio baru, mereka menyebutkan nilai di celah antara nilai yang ada.

OEM tidak boleh menggunakan audio_devices_t sebagai audio_devices_t bit, karena hal itu dapat menyebabkan hasil yang tidak diharapkan saat jenis perangkat audio yang disebutkan baru ditambahkan.

Contoh dan sumber

Sebelum Android 11, ada dua penggunaan tipikal jenis perangkat audio sebagai bit mask.

  • Menggunakan nilai audio_devices_t untuk merepresentasikan beberapa perangkat audio.
  • Memeriksa apakah nilai audio_devices_t berisi jenis perangkat audio dari kategori yang ditentukan.

Untuk merepresentasikan beberapa tipe perangkat audio, sebuah kelas bernama DeviceTypeSet di /libaudiofoundation/include/media/AudioContainers.h digunakan, yang merupakan kontainer std::set dari audio_devices_t . Kelas dideklarasikan di pustaka libaudiofoundation tersedia libaudiofoundation . Untuk merepresentasikan beberapa tipe perangkat audio dalam kode C, array atau daftar audio_devices_t dapat digunakan.

Untuk memeriksa apakah satu jenis perangkat termasuk dalam kategori yang ditentukan, gunakan fungsi pembantu audio_is_.*_device di /system/media/audio/include/system/audio.h . Untuk beberapa kasus jenis perangkat audio, gunakan fungsi pembantu di libaudiofoundation . Misalnya, gunakan areAllOfSameDeviceType (DeviceTypeSet, std::function ) areAllOfSameDeviceType (DeviceTypeSet, std::function ) di AudioContainers.h untuk memeriksa apakah semua jenis perangkat audio yang diberikan berjenis sama.

Penerapan

OEM perlu menghapus representasi bidang bit jenis perangkat audio dari implementasi audio HAL.

  1. Hapus semua penyimpanan perangkat di lapangan bit.

    audio_devices_t tidak boleh digunakan untuk mewakili beberapa jenis perangkat audio. Sebagai gantinya, gunakan daftar atau vektor.

  2. Berhenti menggunakan operasi bit untuk perbandingan jenis perangkat.

    Sebelum Android 11, jenis perangkat audio dapat digunakan sebagai bitfield. Dalam hal ini, operasi bit biasa digunakan untuk perbandingan jenis perangkat. Ketika baru, jenis perangkat audio disebutkan ditambahkan, operasi bit dapat menyebabkan hasil yang tidak diharapkan. Sebagai gantinya, gunakan fungsi pembantu sebagai alternatif. Jika ada satu jenis perangkat audio, gunakan perbandingan langsung untuk membandingkan kedua nilai tersebut. Untuk memeriksa apakah jenis perangkat audio termasuk dalam kategori yang ditentukan, gunakan fungsi pembantu di /system/media/audio/include/system/audio.h . Misalnya, audio_is_output_device(audio_devices_t device) .

  3. Berhenti menggunakan nilai yang telah ditentukan untuk grup jenis perangkat audio.

    Ada beberapa nilai yang telah ditetapkan untuk grup jenis perangkat audio, AUDIO_DEVICE_OUT_ALL , di system/media/audio/include/system/audio-base-utils.h . Semua nilai ini dicadangkan tetapi mungkin tidak digunakan lagi karena tidak akan benar ketika jenis perangkat audio yang disebutkan baru ditambahkan. Ada grup baru jenis perangkat audio yang ditentukan dalam audio-base-utils.h , yang merupakan array jenis perangkat audio, seperti AUDIO_DEVICE_OUT_ALL_ARRAY .

  4. Implementasikan metode create_audio_patch() dan release_audio_patch() untuk perutean alih-alih set_parameters .

    Metode set_parameters menggunakan jenis perangkat audio sebagai bitfield, jadi mungkin ada hasil yang tidak diharapkan jika jenis perangkat audio yang disebutkan baru ditambahkan.

    Saat ini, dua jenis tambalan audio diperlukan:

    • Campur ke tambalan perangkat, untuk pemutaran
    • Perangkat untuk mencampur tambalan, untuk merekam

    Dalam pembaruan berikutnya, tambalan tambahan mungkin diperlukan untuk perangkat ke perangkat.

    Saat membuat tambalan audio, jika tambalan tambalan tidak ditentukan, HAL audio diperlukan untuk menghasilkan tambalan tambalan unik yang dapat mengidentifikasi tambalan audio. Jika tidak, audio HAL harus menggunakan tambalan tambalan audio yang diberikan untuk memperbarui tambalan audio.

    Jika menggunakan audio HAL lawas dan pembungkus HIDL AOSP, HAL audio lawas harus menyetel versi HAL mayor ke 3.0.

    Untuk mengaktifkan fitur tambalan audio, HAL audio harus menyetel versi HAL utama ke 3.0 atau lebih tinggi. Lihat Device::supportsAudioPatches() supportAudioPatches Device::supportsAudioPatches() dalam implementasi HIDL default untuk informasi lebih lanjut, yang juga dapat ditemukan di audio HAL untuk Cuttlefish.

Kustomisasi

Tidak mungkin untuk mematikan fitur, atau mengembalikan refactoring perangkat audio dalam kerangka kerja yang memungkinkan untuk menambahkan jenis perangkat audio.

Semua jenis perangkat audio yang ditambahkan memungkinkan untuk mewakili jenis perangkat dengan kumpulan bit tunggal, sehingga implementasi HAL saat ini masih berfungsi.

Jika jenis perangkat audio baru ditambahkan dan OEM ingin menggunakannya, mereka harus meningkatkan implementasi audio HAL mereka dan pindah ke HIDL versi 6.0 atau lebih tinggi. Ini wajib untuk meningkatkan versi HAL utama ke 3.0 dan mengimplementasikan metode create_audio_patch dan release_audio_patch , karena menggunakan set_parameters untuk merutekan aliran dapat menyebabkan hasil yang tidak terduga saat jenis perangkat audio baru ditambahkan.

Validasi

Pekerjaan yang diperlukan untuk OEM adalah memperbarui implementasi HAL mereka. VTS untuk audio HAL dapat digunakan untuk memvalidasi jika implementasi berfungsi sebagaimana mestinya. Semua tes dapat ditemukan di file VTS .