ใน Android 13 และต่ำกว่า อินเทอร์เฟซ Audio HAL ถูกกำหนดโดยใช้ HIDL ในไฟล์ HIDL HAL (ที่มีนามสกุล .hal
) และสคีมา XSD สำหรับไฟล์การกำหนดค่า ดังที่แสดงดังต่อไปนี้
รูปที่ 1. อินเทอร์เฟซเสียง HAL
ไฟล์การกำหนดค่า
ไฟล์การกำหนดค่านโยบายเสียงและเอฟเฟกต์เสียง XML ถือว่าเป็นส่วนหนึ่งของอินเทอร์เฟซ Audio HIDL HAL ไฟล์เหล่านี้ต้องเป็นไปตามสคีมา และความสอดคล้องได้รับการตรวจสอบโดยการทดสอบ VTS
ในส่วนหนึ่งของการนำเสียง HIDL HAL ไปใช้ คุณต้องสร้าง ไฟล์การกำหนดค่านโยบายเสียง ที่อธิบายโทโพโลยีเสียง ความสามารถด้านเสียง HAL ต้องได้รับการประกาศในไฟล์ audio_policy_configuration.xml
เพื่อให้เฟรมเวิร์กใช้งานได้
เสียง HIDL HAL API
ส่วนนี้จะอธิบาย Core, Effects และ Common HAL API สำหรับ HIDL
คอร์ ฮาล
อินเทอร์เฟซหลักบางส่วนของ Core HAL โดยใช้ HIDL มีดังนี้:
-
IDeviceFactory.hal
เป็นจุดเริ่มต้นเข้าสู่ API -
IDevice.hal
และIPrimaryDevice.hal
มีเมธอด เช่นsetMasterVolume
หรือopenInputStream
- สตรีมเป็นแบบทิศทางเดียวและ AudioFlinger ใช้เพื่อส่งหรือรับเสียงเข้าและออกจาก HAL ผ่าน
IStream.hal
,IStreamOut.hal
และIStreamIn.hal
ตารางต่อไปนี้แสดงตำแหน่งของส่วนประกอบ Core HAL HIDL ที่มีประโยชน์:
ส่วนประกอบหลัก HAL | ที่ตั้ง |
---|---|
API เวอร์ชันล่าสุด | /hardware/interfaces/audio/6.0 |
ประเภทเฉพาะสำหรับ Core HAL API ล่าสุด | /hardware/interfaces/audio/6.0/types.hal |
ไฟล์การกำหนดค่านโยบายเสียง XSD schema | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd |
การใช้งานเริ่มต้นของ Core HAL API ( /hardware/interfaces/audio/core/all-versions/default/
) เป็นส่วนสรุปของการใช้งาน pre-Treble HAL โดยใช้ ไลบรารี่ที่ใช้ร่วมกันแบบเดิม การใช้งานเริ่มต้นยังถือเป็นข้อมูลอ้างอิงเมื่อใช้ Audio HAL เวอร์ชันใหม่ที่โต้ตอบกับไดรเวอร์เคอร์เนลโดยตรง
เอฟเฟ็กต์ HAL
ตารางต่อไปนี้แสดงตำแหน่งของส่วนประกอบเอฟเฟกต์ HAL ที่มีประโยชน์โดยใช้ HIDL:
ส่วนประกอบผลกระทบ HAL | ที่ตั้ง |
---|---|
API เวอร์ชันล่าสุด | /hardware/interfaces/audio/effect/6.0/ |
ไฟล์การกำหนดค่าเอฟเฟกต์ XSD schema | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd |
สำหรับข้อมูลเพิ่มเติม โปรดดูตัวอย่างการใช้งาน Effects HAL API ที่ /hardware/interfaces/audio/effect/all-versions/default/
และส่วน Audio Effects
ทั่วไป HAL
HAL API ทั่วไปที่ใช้ HIDL ประกอบด้วยสิ่งต่อไปนี้:
- คำจำกัดความ (
/hardware/interfaces/audio/common/6.0/types.hal
) ที่ใช้ร่วมกันโดย Core และ Effect API - ยูทิลิตี้ (
/hardware/interfaces/audio/common/all-versions
) ที่ใช้เพื่อช่วยเขียนโค้ดกับ HIDL API สำหรับการใช้งาน ไคลเอนต์ และการทดสอบ
อัปเดตเป็น Audio HAL V7
มีการเปลี่ยนแปลงที่สำคัญกับ Audio HAL เวอร์ชัน 7 ใน Android 12 ตามที่อธิบายไว้ในส่วนนี้ Audio HAL V7 ทำสิ่งต่อไปนี้:
- รวมโมเดลข้อมูลที่ใช้โดยเฟรมเวิร์กและ HAL
- ลดการทำซ้ำระหว่างประเภทข้อมูล HIDL (enums) และ XML schema ที่ใช้สำหรับการกำหนดค่านโยบายเสียง
โดยเฉพาะการเปลี่ยนแปลงจะเกิดขึ้นในพื้นที่ต่อไปนี้ใน Audio HAL V7:
การเปลี่ยนแปลงเหล่านี้จะกล่าวถึงรายละเอียดเพิ่มเติมในส่วนที่เกี่ยวข้อง
การแจงนับ
เริ่มต้นใน Audio HAL V7 ประเภทที่แจกแจงที่ใช้ในไฟล์การกำหนดค่านโยบายเสียงจะกำหนดไว้ในสคีมา XSD เท่านั้น ไม่ใช่ใน HIDL
ใน Audio HAL V6 ค่าของประเภท enum (เช่น AudioFormat
) ใน types.hal
ยังถูกกำหนดไว้ในไฟล์การกำหนดค่านโยบายเสียง XSD schema ซึ่งทำให้เกิดการทำซ้ำ เพื่อหลีกเลี่ยงปัญหานี้ใน V7 ประเภทแจงนับจะถูกเปลี่ยนเป็น string
และค่าการแจงนับที่เป็นไปได้ทั้งหมดจะแสดงอยู่ในสคีมา XSD แทน
รูปที่ 2 เปรียบเทียบการเปลี่ยนแปลงบางอย่างกับประเภท AudioFormat
enum ใน V7:
รูปที่ 2 การเปรียบเทียบการเปลี่ยนแปลงบางอย่างกับ AudioFormat enum
โปรดดูรายการต่อไปนี้สำหรับประเภท enum ที่ถูกแปลงเป็น string
:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: ผู้ขายสามารถขยายได้ -
AudioFormat
: ผู้ขายสามารถขยายได้ -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
ส่งผ่านค่าแจงนับสตริง
ค่าสตริงใช้สำหรับการถ่ายโอนข้อมูลเป็นค่าการแจงนับข้ามขอบเขตอินเทอร์เฟซ HAL ทั้งเฟรมเวิร์กและ wrapper HAL ใช้ค่าแจงนับจำนวนเต็มสำหรับการนำตรรกะทางธุรกิจไปใช้และใช้วิธีการแปลงที่ปรากฎใน รูปที่ 3 :
รูปที่ 3. การส่งผ่านค่า enum สตริง
ตามตัวอย่าง หากต้องการส่งค่าประเภทรูปแบบเสียงจากเฟรมเวิร์กไปยังผู้จำหน่าย:
- ค่าแจงนับของ
AudioFormat
จะถูกแปลงเป็นค่าสตริงในlibaudiohal
และถูกส่งผ่านไปยัง HAL - ในด้าน HAL wrapper เริ่มต้นจะแปลงสตริงเป็นค่าแจงนับ ซึ่งส่งผ่านไปยัง HAL ดั้งเดิม
การเปลี่ยนแปลงสคีมา XML
การมีรายการค่า enum ที่สมบูรณ์ในข้อกำหนด XML schema (XSD) ช่วยให้ตรวจสอบไฟล์ XML การกำหนดค่านโยบายเสียงได้ดีขึ้นโดย VTS เราทำการเปลี่ยนแปลงในไฟล์การกำหนดค่านโยบายเสียงที่ใช้กับ HAL V7 เพื่อให้สอดคล้องกับ XSD
ใน V7 อักขระมาตรฐาน ␣
(เว้นวรรค) ใช้เพื่อกำหนดขอบเขตรายการค่าในแอตทริบิวต์ (เช่น อัตราการสุ่มตัวอย่าง มาสก์ช่องสัญญาณ และแฟล็ก) แทนการใช้ ,
(จุลภาค) และ |
(แถบแนวตั้ง) สัญลักษณ์ที่ใช้ใน V6 และด้านล่าง ดังที่เห็นในตัวอย่างต่อไปนี้ มีการใช้ช่องว่างเพื่อกำหนดรายการค่าสำหรับ channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
หากต้องการเปลี่ยนแปลงสัญลักษณ์ ให้ใช้สคริปต์การแปลงอัตโนมัติชื่อ update_audio_policy_config.sh
ดูคำสั่งต่อไปนี้เพื่อแปลงไฟล์กำหนดค่านโยบายเสียง V6 เป็นเวอร์ชัน V7 สำหรับอุปกรณ์ Pixel 5 (Redfin)
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
ประเภทข้อมูล
เราได้กำหนดโครงสร้างข้อมูลบางส่วนใหม่ใน V7 เพื่อลดคำจำกัดความที่ซ้ำกัน สิ่งอันดับซ้ำของรายการข้อมูลจะถูกจัดกลุ่มเข้าด้วยกันเป็นโครงสร้างที่นำมาใช้ซ้ำได้ โครงสร้างข้อมูลเหล่านี้ใช้คุณสมบัติ HIDL ล่าสุด เช่น สหภาพที่ปลอดภัย
ตัวอย่างเช่น ใน V6 และต่ำกว่า <format, sampling rate, channel mask>
สามเท่าจะถูกใช้บ่อยครั้งในอินเทอร์เฟซและประเภท HIDL หากต้องการลบความซ้ำซ้อนนี้ ใน V7 ประเภทข้อมูล AudioConfigBase
และประเภทข้อมูลอื่น ๆ จะถูกกำหนดดังนี้:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
ใช้โดย
AudioConfig
,AudioOffloadInfo
,AudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
แทนที่คอลเลกชันที่หลวมใน
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
แทนที่สหภาพใน
AudioPort/PortConfig
แท็กผู้ขาย
นอกเหนือจากประเภทและรูปแบบอุปกรณ์แล้ว ผู้จำหน่ายยังสามารถเพิ่มแท็กที่กำหนดเองสำหรับข้อมูลเมตาของแทร็กเสียงได้
สำหรับการเล่นและบันทึกข้อมูลเมตาของแทร็ก ผู้จำหน่ายสามารถส่งแท็กของตนเอง ซึ่งใช้เพื่อเพิ่มคุณลักษณะให้กับสตรีม I/O เสียง จากแอปไปยัง HAL
แท็กผู้ขายสำหรับข้อมูลเมตาของแทร็กการเล่นจะถูกเพิ่มตามที่เห็นในตัวอย่างต่อไปนี้:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
โครงสร้าง RecordTrackMetadata
ได้รับการปรับใช้ในลักษณะเดียวกันโดยการเพิ่มแท็กเฉพาะสำหรับข้อมูลเมตาของแทร็กการบันทึก
เนมสเปซส่วนขยายของผู้ขาย
เริ่มตั้งแต่ HAL V7 ส่วนขยายผู้ขายจำเป็นต้องมีคำนำหน้า {vendor}
เพิ่มเติมซึ่งไม่จำเป็นใน V6 เพื่อให้คำนำหน้า {vendor}
ถูกต้อง ต้องเป็นอักขระตัวอักษรและตัวเลขสามตัวขึ้นไป
ใช้รูปแบบต่อไปนี้ใน V7:
VX_{ vendor }_{ letters/numbers }
ต่อไปนี้คือตัวอย่างบางส่วนของส่วนขยายผู้จำหน่าย V7 ที่ถูกต้อง:
-
VX_ GOOGLE _VR
-
VX_ QCI _AMBIENT_MIC
ข้อมูลเวอร์ชัน
ตารางต่อไปนี้แสดงหมายเลขเวอร์ชัน HAL สำหรับ Android แต่ละรุ่น:
เวอร์ชัน Android | เวอร์ชัน HIDL HAL |
---|---|
แอนดรอยด์ 13 | 7.1 |
แอนดรอยด์ 12 | 7.0 |
แอนดรอยด์ 11 | 6.0 |
แอนดรอยด์ 10 | 5.0 |
แอนดรอยด์ 9 | 4.0 |
แอนดรอยด์ 8 | 2.0 |