ใน Android Audio จะมีการใช้ audio_devices_t
เพื่อแสดงประเภทอุปกรณ์เสียง ตอนนี้
ใช้อย่างแพร่หลายในซอร์สโค้ดของเสียง โดยเป็นฟิลด์บิตสำหรับกรองหรือเลือกอย่างน้อย 1 รายการ
อุปกรณ์ที่ระบุ ก่อน Android 11 จะมีการจำกัดที่ 30
ประเภทอุปกรณ์อินพุต/เอาต์พุตเสียง และไม่มีช่องสำรองสำหรับเพิ่มอุปกรณ์เสียงประเภทใหม่ เราได้ยกเลิกการจำกัดจำนวนประเภทอุปกรณ์เสียงเพื่อให้เพิ่มประเภทอุปกรณ์เสียงใหม่ๆ ได้
ถ้าต้องการยกเลิกการจำกัดจำนวนอุปกรณ์เสียง ตอนนี้ประเภทอุปกรณ์เสียงคือ ค่าแจกแจงแทนบิตมาสก์
ประเภทอุปกรณ์เสียงที่มีอยู่ทั้งหมดจะยังคงเหมือนเดิม AUDIO_DEVICE_BIT_IN
จะยังคงใช้เพื่อแยกแยะอุปกรณ์อินพุตหรือเอาต์พุต เมื่อเพิ่มประเภทอุปกรณ์เสียงใหม่ ระบบจะจัดเรียงค่าเหล่านี้เป็นค่าที่ระบุระหว่างค่าที่มีอยู่
OEM ไม่ควรใช้ audio_devices_t
เป็นบิตมาสก์ เนื่องจากอาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิดเมื่อเพิ่มประเภทอุปกรณ์เสียงแบบแจกแจงรายการใหม่
ตัวอย่างและแหล่งที่มา
ก่อน Android 11 การใช้งานประเภทอุปกรณ์เสียงแบบบิตมาสก์มีอยู่ 2 ประเภท
- การใช้ค่า
audio_devices_t
เพื่อแสดงอุปกรณ์เสียงหลายเครื่อง - กำลังตรวจสอบว่าค่า
audio_devices_t
มีประเภทอุปกรณ์เสียงหรือไม่ จากหมวดหมู่ที่ระบุ
หากต้องการแสดงถึงอุปกรณ์เสียงหลายประเภท คลาสชื่อ DeviceTypeSet
ใน
/libaudiofoundation/include/media/AudioContainers.h
ใช้ไปแล้ว ซึ่งเป็นคอนเทนเนอร์ std::set
ของ audio_devices_t
มีการประกาศคลาสในไลบรารี
libaudiofoundation
ที่พร้อมใช้งานสำหรับผู้ให้บริการ หากต้องการแสดงประเภทอุปกรณ์เสียงหลายประเภทในโค้ด C คุณสามารถใช้อาร์เรย์หรือรายการ audio_devices_t
หากต้องการตรวจสอบว่าอุปกรณ์ประเภทเดียวอยู่ในหมวดหมู่ที่ระบุหรือไม่ ให้ใช้ฟังก์ชันตัวช่วย
audio_is_.*_device
ใน
/system/media/audio/include/system/audio.h
สำหรับเคสอุปกรณ์เสียงหลายประเภท ให้ใช้ฟังก์ชันตัวช่วยใน libaudiofoundation
สำหรับ
ตัวอย่างเช่น ให้ใช้
areAllOfSameDeviceType (DeviceTypeSet, std::function
ใน
AudioContainers.h
เพื่อตรวจสอบว่าอุปกรณ์เสียงทุกประเภทที่ระบุหรือไม่
เป็นประเภทเดียวกัน
การใช้งาน
OEM ต้องนำการนำเสนอฟิลด์บิตประเภทอุปกรณ์เสียงออกจากการใช้งาน HAL ของเสียง
- นำพื้นที่เก็บข้อมูลทั้งหมดของอุปกรณ์ในช่องบิตออก
ไม่ควรใช้
audio_devices_t
เพื่อแสดงอุปกรณ์เสียงหลายเครื่อง ประเภทต่างๆ แต่ให้ใช้ลิสต์หรือเวกเตอร์แทน - หยุดใช้การดำเนินการบิตเพื่อเปรียบเทียบประเภทอุปกรณ์
ก่อน Android 11 อุปกรณ์เสียงประเภทต่างๆ สามารถใช้เป็น Bitfield ในกรณีนี้ การใช้การดำเนินการแบบบิตเพื่อเปรียบเทียบประเภทอุปกรณ์เป็นแนวทางปฏิบัติทั่วไป เมื่อมีการเพิ่มประเภทอุปกรณ์เสียงแบบแจกแจงใหม่ๆ การดำเนินการบิตอาจ ผลลัพธ์ที่ไม่คาดคิด ให้ใช้ฟังก์ชันตัวช่วยแทน หากมีอุปกรณ์เสียงเพียงประเภทเดียว ให้ใช้การเปรียบเทียบโดยตรงเพื่อเปรียบเทียบค่า 2 ค่า วิธีตรวจสอบว่าเสียง ประเภทอุปกรณ์อยู่ในหมวดหมู่ที่ระบุ ใช้ฟังก์ชันตัวช่วยใน
/system/media/audio/include/system/audio.h
ตัวอย่างเช่นaudio_is_output_device(audio_devices_t device)
- หยุดใช้ค่าที่กำหนดไว้ล่วงหน้าสำหรับกลุ่มประเภทอุปกรณ์เสียง
กลุ่มของอุปกรณ์เสียงประเภทต่างๆ มีค่าที่กำหนดไว้ล่วงหน้าบางค่า
AUDIO_DEVICE_OUT_ALL
ในsystem/media/audio/include/system/audio-base-utils.h
ค่าทั้งหมดนี้ สงวนไว้ แต่อาจเลิกใช้งานเนื่องจากไม่ถูกต้องเมื่อมีการระบุใหม่ มีการเพิ่มประเภทอุปกรณ์เสียง มีกลุ่มประเภทอุปกรณ์เสียงใหม่ๆ ที่กำหนดไว้ในaudio-base-utils.h
ซึ่งเป็นอาร์เรย์ของประเภทอุปกรณ์เสียง เช่นAUDIO_DEVICE_OUT_ALL_ARRAY
- นำ
create_audio_patch()
และrelease_audio_patch()
ไปใช้ ในการกำหนดเส้นทางแทนset_parameters
เมธอด
set_parameters
ใช้ประเภทอุปกรณ์เสียงเป็นบิตฟิลด์ จึงอาจให้ผลลัพธ์ที่ไม่คาดคิดหากมีการเพิ่มประเภทอุปกรณ์เสียงแบบแจกแจงใหม่ปัจจุบันแพตช์เสียงมี 2 ประเภท ได้แก่
- มิกซ์กับแพตช์อุปกรณ์สำหรับการเล่น
- อุปกรณ์สำหรับมิกซ์แพตช์สำหรับการบันทึก
ในการอัปเดตครั้งต่อๆ ไป คุณอาจต้องใช้แพตช์เพิ่มเติมสำหรับการแชร์ระหว่างอุปกรณ์
เมื่อสร้างแพตช์เสียง หากแฮนเดิลแพตช์ไม่ใช่ ต้องมี HAL ของเสียงเพื่อสร้างแฮนเดิลแพตช์ที่ไม่ซ้ำกันซึ่งสามารถ ระบุแพตช์ของเสียง มิฉะนั้น HAL เสียงควรใช้แฮนเดิลการแก้ไขเสียงที่ระบุเพื่ออัปเดตการแก้ไขเสียง
หากใช้ HAL เสียงเดิมและ AOSP HIDL Wrapper ควรตั้งค่า HAL เสียงเดิม เวอร์ชัน HAL หลักเป็น 3.0
หากต้องการเปิดใช้ฟีเจอร์การแก้ไขเสียง HAL ของเสียงควรตั้งค่าเวอร์ชันหลักของ HAL เป็น 3.0 ขึ้นไป โปรดดู
Device::supportsAudioPatches()
ใน การใช้ HIDL เริ่มต้น สำหรับข้อมูลเพิ่มเติม ซึ่งมีอยู่ใน HAL ไฟล์เสียงของ Cuttlefish ด้วยนะ
การปรับแต่ง
คุณไม่สามารถปิดฟีเจอร์นี้หรือเปลี่ยนการจัดโครงสร้างอุปกรณ์เสียงในเฟรมเวิร์กที่ทำให้เพิ่มประเภทอุปกรณ์เสียงได้
อุปกรณ์เสียงทุกประเภทที่เพิ่มเข้ามาอนุญาตให้แสดงประเภทอุปกรณ์ด้วยชุดบิตเดียว ดังนั้นการใช้งาน HAL ปัจจุบันจะยังคงใช้งานได้
หากมีการเพิ่มประเภทอุปกรณ์เสียงใหม่และ OEM ต้องการใช้อุปกรณ์ดังกล่าว OEM จะต้องอัปเกรดการใช้งาน HAL เสียงและเปลี่ยนไปใช้ HIDL เวอร์ชัน 6.0 ขึ้นไป คุณต้องอัปเกรด HAL เวอร์ชันหลักเป็น 3.0 และใช้เมธอด create_audio_patch
และ release_audio_patch
เนื่องจากการใช้ set_parameters
เพื่อกำหนดเส้นทางสตรีมอาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิดเมื่อเพิ่มประเภทอุปกรณ์เสียงใหม่
การตรวจสอบความถูกต้อง
OEM มีหน้าที่อัปเดตการติดตั้งใช้งาน HAL VTS สำหรับ HAL เสียงจะใช้เพื่อตรวจสอบว่าการติดตั้งใช้งานทำงานได้ตามที่ต้องการหรือไม่ ทั้งหมด การทดสอบจะอยู่ใน ไฟล์ VTS