Dalam audio Android, audio_devices_t
digunakan untuk mewakili jenis perangkat audio. Penting
banyak digunakan dalam kode sumber audio sebagai
bidang bit untuk memfilter atau memilih satu atau beberapa
perangkat tertentu. Sebelum Android 11, ada batas 30
jenis perangkat input/output audio, dan tidak ada slot cadangan untuk menambahkan jenis perangkat audio baru. Kita sudah
menghapus batas jumlah jenis perangkat audio yang diizinkan
jenis perangkat audio baru untuk ditambahkan.
Untuk menghilangkan batas jumlah jenis perangkat audio, jenis perangkat audio sekarang nilai-nilai yang disebutkan alih-alih {i>bit mask<i}.
Semua jenis perangkat audio yang ada dipertahankan sebagaimana adanya. AUDIO_DEVICE_BIT_IN
sama dengan
masih digunakan untuk membedakan
perangkat input atau {i>output<i}. Saat menambahkan jenis perangkat audio baru,
nilai-nilai yang disebutkan di
{i>gap <i}antara nilai-nilai yang ada.
OEM tidak boleh menggunakan audio_devices_t
sebagai bit mask, karena hal itu dapat menyebabkan
hasil yang tidak diharapkan saat jenis perangkat
audio dengan enumerasi baru ditambahkan.
Contoh dan sumber
Sebelum Android 11, ada dua penggunaan standar perangkat audio ketik sebagai {i>bit mask<i}.
- Menggunakan nilai
audio_devices_t
untuk mewakili beberapa perangkat audio. - Memeriksa apakah nilai
audio_devices_t
berisi jenis perangkat audio dari kategori tertentu.
Untuk merepresentasikan beberapa jenis perangkat audio, class bernama DeviceTypeSet
di
/libaudiofoundation/include/media/AudioContainers.h
digunakan, yang merupakan penampung std::set
dari audio_devices_t
. Tujuan
dideklarasikan di vendor-available
library libaudiofoundation
. Untuk mewakili
beberapa audio
jenis perangkat dalam kode C, array atau daftar audio_devices_t
dapat digunakan.
Untuk memeriksa apakah satu jenis perangkat berada dalam kategori yang ditentukan, gunakan fungsi bantuan
audio_is_.*_device
pada
/system/media/audio/include/system/audio.h
.
Untuk beberapa kasus jenis perangkat audio, gunakan fungsi bantuan di libaudiofoundation
. Sebagai
contoh, gunakan
areAllOfSameDeviceType (DeviceTypeSet, std::function
dalam
AudioContainers.h
untuk memeriksa apakah semua jenis perangkat audio yang diberikan
memiliki jenis yang sama.
Implementasi
OEM harus menghapus representasi kolom bit jenis perangkat audio dari penerapan HAL audio.
- Hapus semua penyimpanan perangkat pada kolom bit.
audio_devices_t
tidak boleh digunakan untuk mewakili beberapa perangkat audio jenis datanya. Sebagai gantinya, gunakan daftar atau vektor. - Berhenti menggunakan operasi bit untuk perbandingan jenis perangkat.
Sebelum Android 11, jenis perangkat audio dapat digunakan sebagai . Dalam kasus tersebut, penggunaan operasi bit untuk jenis perangkat adalah hal yang perbandingan. Ketika jenis perangkat audio baru yang disebutkan ditambahkan, operasi bit dapat menyebabkan hasil yang tidak diharapkan. Sebagai gantinya, gunakan fungsi bantuan sebagai alternatif. Jika ada satu jenis perangkat audio, lalu gunakan perbandingan langsung untuk membandingkan kedua nilai tersebut. Untuk memeriksa apakah audio merupakan jenis perangkat dari kategori tertentu, gunakan fungsi bantuan di
/system/media/audio/include/system/audio.h
. Contohnya,audio_is_output_device(audio_devices_t device)
. - 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
, incisystem/media/audio/include/system/audio-base-utils.h
. Semua nilai ini dicadangkan, tetapi mungkin tidak digunakan lagi karena tidak akan benar saat peristiwa jenis perangkat audio akan ditambahkan. Ada grup jenis perangkat audio baru yang ditentukan diaudio-base-utils.h
, yang merupakan array jenis perangkat audio, sepertiAUDIO_DEVICE_OUT_ALL_ARRAY
. - Mengimplementasikan
create_audio_patch()
danrelease_audio_patch()
metode untuk pemilihan rute alih-alihset_parameters
.Metode
set_parameters
menggunakan jenis perangkat audio sebagai bitfield, sehingga akan ada hasil yang tidak diharapkan jika jenis perangkat audio terenumerasi baru ditambahkan.Saat ini, dua jenis patch audio diperlukan:
- Mix ke patch perangkat, untuk pemutaran
- Perangkat untuk mencampur patch, untuk merekam
Pada update berikutnya, patch tambahan mungkin diperlukan untuk perangkat ke perangkat.
Saat membuat patch audio, jika handle patch tidak tertentu, HAL audio diperlukan untuk menghasilkan handle {i>patch<i} unik yang dapat mengidentifikasi {i>patch<i} audio. Jika tidak, HAL audio harus menggunakan handle {i>patch<i} audio yang diberikan untuk memperbarui {i>patch<i} audio.
Jika menggunakan HAL audio lama dan wrapper HIDL AOSP, HAL audio lama harus ditetapkan versi HAL utama ke 3.0.
Untuk mengaktifkan fitur patch audio, HAL audio harus disetel versi HAL utama ke 3.0 atau lebih tinggi. Lihat
Device::supportsAudioPatches()
dalam penerapan HIDL default untuk informasi lebih lanjut, yang juga dapat ditemukan di audio HAL untuk Cuttlefish.
Penyesuaian
Anda tidak dapat menonaktifkan fitur ini, atau mengembalikan pemfaktoran ulang perangkat audio dalam yang memungkinkan penambahan jenis perangkat audio.
Semua jenis perangkat audio yang ditambahkan memungkinkan representasi jenis perangkat dengan set bit tunggal, sehingga implementasi HAL saat ini masih berfungsi.
Jika jenis perangkat audio baru ditambahkan dan OEM ingin menggunakannya, jenis perangkat tersebut
harus mengupgrade implementasi HAL audio mereka dan beralih ke HIDL versi 6.0 atau yang lebih baru. Penting
wajib 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 memberikan hasil yang tidak diharapkan saat
jenis perangkat audio baru ditambahkan.
Validasi
Pekerjaan yang diperlukan OEM adalah memperbarui implementasi HAL mereka. VTS untuk HAL audio dapat digunakan untuk memvalidasi apakah implementasinya berfungsi sebagaimana mestinya. Semua tempat tesnya dapat ditemukan di File VTS.