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 batas 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 memungkinkan jenis perangkat audio baru ditambahkan.
Untuk menghapus batas jumlah jenis perangkat audio, jenis perangkat audio sekarang adalah nilai yang dihitung, bukan topeng bit.
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 menghitung nilai di celah 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 enumerasi baru ditambahkan.
Contoh dan sumber
Sebelum Android 11, ada dua penggunaan tipikal jenis perangkat audio sebagai masker bit.
- 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 jenis perangkat audio, kelas bernama DeviceTypeSet
di /libaudiofoundation/include/media/AudioContainers.h
digunakan, yang merupakan wadah std::set
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 jenis perangkat audio yang diberikan memiliki jenis 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, biasanya menggunakan operasi bit untuk perbandingan jenis perangkat. Saat baru, jenis perangkat audio enumerasi 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 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 standar untuk grup jenis perangkat audio,
AUDIO_DEVICE_OUT_ALL
, disystem/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 enumerasi baru ditambahkan. Ada grup baru jenis perangkat audio yang ditentukan dalamaudio-base-utils.h
, yang merupakan larik jenis perangkat audio, sepertiAUDIO_DEVICE_OUT_ALL_ARRAY
. - Terapkan metode
create_audio_patch()
danrelease_audio_patch()
untuk perutean alih-alihset_parameters
.Metode
set_parameters
menggunakan jenis perangkat audio sebagai bitfield, jadi mungkin ada hasil yang tidak diharapkan jika jenis perangkat audio enumerasi baru ditambahkan.Saat ini, dua jenis tambalan audio diperlukan:
- Campurkan 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 pegangan tambalan tidak ditentukan, HAL audio diperlukan untuk menghasilkan pegangan tambalan unik yang dapat mengidentifikasi tambalan audio. Jika tidak, audio HAL harus menggunakan pegangan tambalan audio yang diberikan untuk memperbarui tambalan audio.
Jika menggunakan HAL audio lawas dan pembungkus AOSP HIDL, HAL audio lawas harus menyetel versi HAL utama ke 3.0.
Untuk mengaktifkan fitur tambalan audio, HAL audio 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 Sotong.
Kustomisasi
Tidak mungkin untuk menonaktifkan fitur, atau mengembalikan pemfaktoran ulang perangkat audio dalam kerangka kerja yang memungkinkan untuk menambahkan jenis perangkat audio.
Semua jenis perangkat audio yang ditambahkan memungkinkan untuk mewakili jenis 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 HAL audio mereka dan pindah ke HIDL versi 6.0 atau lebih tinggi. Ini wajib untuk meningkatkan versi HAL utama ke 3.0 dan menerapkan 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 untuk OEM adalah memperbarui implementasi HAL mereka. VTS untuk audio HAL dapat digunakan untuk memvalidasi jika implementasi berfungsi sebagaimana dimaksud. Semua tes dapat ditemukan di file VTS .