Di audio Android, audio_devices_t
digunakan untuk mewakili jenis perangkat audio. Ini banyak digunakan dalam kode sumber audio sebagai bidang bit untuk memfilter atau memilih satu atau lebih perangkat tertentu. Sebelum Android 11, terdapat batasan 30 jenis perangkat input/output audio, dan tidak ada slot cadangan untuk menambahkan jenis perangkat audio baru. Kami telah menghapus batasan jumlah jenis perangkat audio untuk memungkinkan penambahan jenis perangkat audio baru.
Untuk menghapus batasan jumlah jenis perangkat audio, jenis perangkat audio kini menjadi nilai yang disebutkan, bukan masker bit.
Semua jenis perangkat audio yang ada dipertahankan apa adanya. AUDIO_DEVICE_BIT_IN
masih digunakan untuk membedakan perangkat input dan output. Saat menambahkan jenis perangkat audio baru, nilai tersebut dihitung dalam kesenjangan antara nilai yang ada.
OEM tidak boleh menggunakan audio_devices_t
sebagai bit mask, karena hal itu dapat menyebabkan hasil yang tidak diharapkan ketika jenis perangkat audio baru yang disebutkan ditambahkan.
Contoh dan sumber
Sebelum Android 11, ada dua penggunaan umum jenis perangkat audio sebagai bit mask.
- Menggunakan nilai
audio_devices_t
untuk mewakili beberapa perangkat audio. - Memeriksa apakah nilai
audio_devices_t
berisi jenis perangkat audio dari kategori tertentu.
Untuk mewakili beberapa tipe perangkat audio, kelas bernama DeviceTypeSet
di /libaudiofoundation/include/media/AudioContainers.h
digunakan, yang merupakan std::set
container dari audio_devices_t
. Kelas dideklarasikan di perpustakaan libaudiofoundation
yang tersedia vendor. Untuk mewakili beberapa jenis perangkat audio dalam kode C, array atau daftar audio_devices_t
dapat digunakan.
Untuk memeriksa apakah satu jenis perangkat termasuk dalam kategori tertentu, gunakan fungsi pembantu audio_is_.*_device
di /system/media/audio/include/system/audio.h
. Untuk beberapa 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 tipe perangkat audio yang diberikan memiliki tipe yang sama.
Penerapan
OEM perlu menghapus representasi bidang bit jenis perangkat audio dari implementasi audio HAL.
- Hapus semua penyimpanan perangkat di bidang bit.
audio_devices_t
tidak boleh digunakan untuk mewakili beberapa jenis perangkat audio. Sebagai gantinya, gunakan daftar atau vektor. - Berhenti menggunakan operasi bit untuk perbandingan jenis perangkat.
Sebelum Android 11, jenis perangkat audio dapat digunakan sebagai bitfield. Dalam hal ini, operasi bit biasanya digunakan untuk perbandingan jenis perangkat. Ketika jenis perangkat audio baru yang disebutkan ditambahkan, operasi bit dapat menyebabkan hasil yang tidak diharapkan. Sebaliknya, gunakan fungsi pembantu sebagai alternatif. Jika hanya ada satu jenis perangkat audio, gunakan perbandingan langsung untuk membandingkan kedua nilai tersebut. Untuk memeriksa apakah jenis perangkat audio termasuk dalam kategori tertentu, gunakan fungsi pembantu di
/system/media/audio/include/system/audio.h
. Misalnya,audio_is_output_device(audio_devices_t device)
. - Berhenti menggunakan nilai yang telah ditentukan sebelumnya untuk grup jenis perangkat audio.
Ada beberapa nilai yang telah ditentukan sebelumnya untuk grup jenis perangkat audio,
AUDIO_DEVICE_OUT_ALL
, disystem/media/audio/include/system/audio-base-utils.h
. Semua nilai ini sudah dicadangkan namun mungkin tidak digunakan lagi karena tidak akan benar bila jenis perangkat audio baru yang disebutkan ditambahkan. Ada grup tipe perangkat audio baru yang ditentukan dalamaudio-base-utils.h
, yang merupakan array tipe perangkat audio, sepertiAUDIO_DEVICE_OUT_ALL_ARRAY
. - Terapkan metode
create_audio_patch()
danrelease_audio_patch()
untuk perutean, bukanset_parameters
.Metode
set_parameters
menggunakan tipe perangkat audio sebagai bitfield, sehingga mungkin ada hasil yang tidak diharapkan jika tipe perangkat audio baru yang disebutkan ditambahkan.Saat ini, diperlukan dua jenis patch audio:
- Campurkan ke patch perangkat, untuk diputar
- Perangkat untuk mencampur patch, untuk merekam
Dalam pembaruan berikutnya, patch tambahan mungkin diperlukan untuk perangkat ke perangkat.
Saat membuat patch audio, jika handle patch tidak ditentukan, HAL audio diperlukan untuk menghasilkan handle patch unik yang dapat mengidentifikasi patch audio. Jika tidak, audio HAL harus menggunakan pegangan patch audio yang diberikan untuk memperbarui patch audio.
Jika menggunakan HAL audio lama dan pembungkus AOSP HIDL, HAL audio lama harus menyetel versi HAL utama ke 3.0.
Untuk mengaktifkan fitur patch audio, audio HAL harus mengatur versi HAL utama ke 3.0 atau lebih tinggi. Lihat
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 ini, atau mengembalikan pemfaktoran ulang perangkat audio dalam kerangka kerja yang memungkinkan penambahan jenis perangkat audio.
Semua tipe perangkat audio yang ditambahkan memungkinkan representasi tipe perangkat dengan satu set bit, sehingga implementasi HAL saat ini masih berfungsi.
Jika jenis perangkat audio baru ditambahkan dan OEM ingin menggunakannya, mereka harus meningkatkan implementasi audio HAL dan beralih ke HIDL versi 6.0 atau lebih tinggi. Wajib untuk mengupgrade versi HAL utama ke 3.0 dan mengimplementasikan metode create_audio_patch
dan release_audio_patch
, karena menggunakan set_parameters
untuk merutekan streaming dapat menyebabkan hasil yang tidak diharapkan ketika jenis perangkat audio baru ditambahkan.
Validasi
Pekerjaan yang diperlukan bagi OEM adalah memperbarui implementasi HAL mereka. VTS untuk audio HAL dapat digunakan untuk memvalidasi apakah implementasinya berfungsi sebagaimana mestinya. Semua tes dapat ditemukan di file VTS .