ตั้งแต่ Android 14 เป็นต้นไป เราขอแนะนำให้พาร์ทเนอร์และผู้จำหน่าย SoC เปลี่ยนการติดตั้งใช้งาน HIDL HAL ปัจจุบันเป็นการติดตั้งใช้งาน AIDL HAL
หน้านี้จึงไฮไลต์ข้อแตกต่างสำคัญบางประการในหน้านี้เพื่อให้การเปลี่ยนจาก HIDL Audio HAL เป็น AIDL Audio HAL เป็นไปอย่างราบรื่น หน้านี้ยังแสดงการแมประหว่างอินเทอร์เฟซ AIDL กับ HIDL สำหรับ HAL ของเสียงด้วย
ความแตกต่างระหว่างการใช้งาน AIDL กับ HIDL Audio HAL
ความแตกต่างที่สำคัญระหว่างโครงสร้าง HIDL และโครงสร้าง AIDL มีดังนี้
ใน AIDL Audio Core HAL เราได้นำอินเทอร์เฟซ
IConfig
มาใช้เพื่อแทนที่พารามิเตอร์ของทั้งระบบในไฟล์ XML ใน HIDL HAL เฟรมเวิร์กจะอ่านพารามิเตอร์เหล่านี้จาก Core HAL แทนไฟล์การกําหนดค่าของผู้ให้บริการ ตัวอย่างเช่น รายการรูปแบบเสียงเซอร์ราวด์ที่แสดงขึ้นเพื่อให้ผู้ใช้ควบคุมได้มาจากเมธอดIConfig.getSurroundSoundConfig
ใน Core HALใน AIDL Audio Effects HAL ระบบจะย้ายตรรกะ
effectProxy
ที่กําหนดไว้ในไฟล์ XML ใน HIDL Effects HAL ไปยังเฟรมเวิร์กเสียง เฟรมเวิร์กเสียงจะค้นหาอินสแตนซ์เอฟเฟกต์ทั้งหมดในระบบโดยใช้IFactory.queryEffects
และการประมวลผลเอฟเฟกต์ทั้งหมดโดยใช้IFactory.queryProcessing
เพื่อป้องกันความสับสนในการใช้คำว่าอุปกรณ์สำหรับประเภทอุปกรณ์เสียง ระบบได้เปลี่ยนชื่อ
IDevice
ใน HIDL Audio HAL เป็นIModule
ใน AIDL Audio HALIPrimaryDevice
แทนที่ใน AIDL Audio HAL ระบบจะส่งข้อมูลอัปเดตเกี่ยวกับโหมดเสียงและการหมุนหน้าจอปัจจุบันไปยังอินสแตนซ์IModule
ทุกรายการ พารามิเตอร์ที่เกี่ยวข้องกับการเชื่อมต่อบลูทูธแบบซิงโครนัส (BT SCO) และโปรไฟล์แฮนด์ฟรี (HFP) ได้รับการจัดการโดยอินเทอร์เฟซIBluetooth
โดยเฉพาะ อินเทอร์เฟซITelephony
โดยเฉพาะมีการควบคุมเฉพาะสำหรับโทรศัพท์ อินสแตนซ์ของอินเทอร์เฟซทั้ง 2 รายการนี้สามารถดึงมาจากอินสแตนซ์หลักของอินเทอร์เฟซIModule
ดูข้อมูลเพิ่มเติมได้ที่ตารางเปรียบเทียบสำหรับ HAL หลักและฟังก์ชันการทำงานที่เกี่ยวข้องกับฟีเจอร์ระบบนำ
IDevicesFactory
ออกจาก AIDL Audio HAL เพื่อหลีกเลี่ยงความซ้ำซ้อน ตอนนี้ระบบจะลงทะเบียนข้อบังคับ HAL (นั่นคืออินสแตนซ์อินเทอร์เฟซIModule
) กับตัวจัดการบริการโดยตรงโดยใช้ชื่อของข้อบังคับเป็นชื่ออินสแตนซ์ เช่นbluetooth
หรือr_submix
ข้อยกเว้นเพียงอย่างเดียวคือโมดูลprimary
ซึ่งจะลงทะเบียนภายใต้ชื่ออินสแตนซ์default
การแมป AIDL และ HIDL Audio HAL
ตารางในส่วนต่อไปนี้จะแสดงการแมประหว่างอินเทอร์เฟซ HIDL กับ AIDL เสียง HAL ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างไดเรกทอรีได้ที่ไฟล์ README ของ HAL สำหรับเสียง
Core HAL
อินเทอร์เฟซ HIDL ทั้งหมดอยู่ในแพ็กเกจ android.hardware.audio@N.M
โดยที่ N.M
หมายถึงเวอร์ชัน Major.Minor อินเทอร์เฟซ AIDL ทั้งหมดอยู่ในแพ็กเกจ android.hardware.audio.core
อินเทอร์เฟซและไฟล์การกําหนดค่า HIDL API | อินเทอร์เฟซ AIDL API |
---|---|
IDevicesFactory |
การจดทะเบียน IModule กับ ServiceManager |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
ไฟล์นโยบายเสียงที่กำหนดค่าได้ | ใช้การติดตั้งใช้งาน HIDL สำหรับ Android 14 |
พอร์ตเสียง โปรไฟล์แบบไดนามิก เส้นทาง และแพตช์
ในตารางนี้ องค์ประกอบของไฟล์ XML จะกำหนดโดยใช้เครื่องหมายวงเล็บเหลี่ยม
เมธอดอินเทอร์เฟซ HIDL API และองค์ประกอบไฟล์การกําหนดค่า | เมธอดอินเทอร์เฟซ AIDL API |
---|---|
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts> |
IModule.getAudioPorts |
IDevice.getAudioPort
IDevice.setConnectedState |
IModule.connectExternalDevice
IModule.disconnectExternalDevice |
IStream.getSupportedProfiles |
IModule.connectExternalDevice |
< routes > |
IModule.getAudioRoutes |
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
ข้อมูลจำเพาะของอุปกรณ์ใน IDevice.openInputStream
IDevice.openOutputStream |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
การกำหนดค่าและสตรีมพอร์ตเสียง
เมธอดอินเทอร์เฟซ HIDL API | เมธอดอินเทอร์เฟซ AIDL API |
---|---|
IStream.getAudioProperties
IStream.setAudioProperties
IStreamIn.getAudioSource |
IModule.getAudioPortConfigs
IModule.setAudioPortConfig |
IDevice.openInputStream
IDevice.openOutputStream
IStreamIn.prepareForReading
IStreamOut.prepareForWriting
IStream.createMmapBuffer |
IModule.openInputStream
IModule.openOutputStream |
IStream.close |
IStreamCommon.close |
IStreamIn.updateSinkMetadata
IStreamOut.updateSourceMetadata |
IStreamIn.updateMetadata
IStreamOut.updateMetadata |
IStream.standby |
StreamDescriptor.Command.standby |
IStream.pause IStream.resume
IStream.start IStream.stop |
StreamDescriptor.Command.pause .start
.start .drain |
IStreamOut.drain IStreamOut.flush |
StreamDescriptor.Command.drain .flush |
IStreamOut.setCallback
IStreamOut.clearCallback |
IModule.openOutputStream
IStreamCommon.close |
IStreamOut.getPresentationPosition และ IStreamIn.getCapturePosition
IStreamOut.getLatency
IStream.getMmapPosition
IStreamIn.getInputFramesLost |
StreamDescriptor.Reply.observable
StreamDescriptor.Reply.latencyMs
StreamDescriptor.Reply.hardware
StreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSize
IStreamOut.getLatency
IStream.getBufferSize
IStream.getFrameSize
IStream.getFrameCount |
IModule.setAudioPatch , เวลาในการตอบสนองโดยประมาณ และขนาดบัฟเฟอร์ขั้นต่ำเป็นส่วนหนึ่งของโครงสร้าง AudioPatch ที่ HAL แสดงผล
ขนาดบัฟเฟอร์จริงในเฟรมเป็นส่วนหนึ่งของโครงสร้าง StreamDescriptor
พร้อมกับขนาดเฟรมในหน่วยไบต์ คุณสามารถคำนวณขนาดบัฟเฟอร์เป็นไบต์ได้โดยนำตัวเลข 2 ตัวนี้มาคูณกัน |
การเชื่อมต่อเอฟเฟกต์เสียง
วิธีการอินเทอร์เฟซ HIDL API | เมธอดอินเทอร์เฟซ AIDL API |
---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
การกำหนดค่าทั้งระบบ
การกำหนดค่าทั้งระบบซึ่งกำหนดไว้ก่อนหน้านี้ในไฟล์การกำหนดค่า XML นโยบายเสียง (กล่าวคือ audio_policy_configuration.xml
และ audio_policy_engine_configuration.xml
) ต้องมอบให้ผ่าน IConfig
อย่างไรก็ตาม เพื่อช่วยให้การเปลี่ยนไปใช้ AIDL ง่ายขึ้น ผู้ให้บริการจะยังคงมีตัวเลือกในการใช้ไฟล์ XML เดียวกันกับที่ก่อนหน้านี้ใช้ในการกำหนดการกำหนดค่าทั้งระบบ การใช้งานอ้างอิงสำหรับ IConfig
มีโค้ดที่จำเป็นในการนำเสนอข้อมูลจากไฟล์ XML โดยใช้ประเภทข้อมูล AIDL ซึ่งช่วยให้แปลงจาก XML เป็น AIDL ได้ง่ายขึ้น
องค์ประกอบไฟล์การกําหนดค่า HIDL | เมธอดอินเทอร์เฟซ AIDL API |
---|---|
<globalConfiguration>
<speaker_drc_enabled> <call_screen_mode_supported>
<engine_library> |
แยกออกเป็น 2 วิธี ดังนี้
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> หรือ
<volumeGroups> , <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
ระบบนำ
speaker_drc_enabled
ออกจากไฟล์การกําหนดค่าเนื่องจากไม่มีการใช้รายการการกําหนดค่านี้ในระบบ อุปกรณ์ทั้งหมดต้องเปิดใช้ DRC<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
ฟังก์ชันการทำงานที่เกี่ยวข้องกับฟีเจอร์
เมธอดอินเทอร์เฟซ HIDL API | อินเทอร์เฟซ AIDL API |
---|---|
IDevice.setMasterVolume
IDevice.getMasterVolume
IDevice.setMicMute
IDevice.getMicMute
IDevice.setMasterMute
IDevice.getMasterMute |
IModule.\* |
IPrimaryDevice.getTtyMode
IPrimaryDevice.setTtyMode
IPrimaryDevice.getHacEnabled
IPrimaryDevice.setHacEnabled
IPrimaryDevice.setVoiceVolume |
ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugName
IPrimaryDevice.getBtScoNrecEnabled
IPrimaryDevice.setBtScoNrecEnabled
IPrimaryDevice.getBtScoWidebandEnabled
IPrimaryDevice.setBtScoWidebandEnabled,
IPrimaryDevice.getBtHfpEnabled
IPrimaryDevice.setBtHfpEnabled
IPrimaryDevice.setBtHfpSampleRate
IPrimaryDevice.setBtHfpVolume |
IBluetooth.ScoConfig.\*
IBluetooth.HfpConfig.\* |
IPrimaryDevice.setMode
IPrimaryDevice.updateRotation |
ITelephony.switchAudioMode
IModule.updateAudioMode
IModule.updateScreenRotation |
IDevice.setScreenState
IDevice.getMicrophones |
IModule.updateScreenState
IModule.getMicrophones |
IDevice.getHwAvSync
IStream.setHwAvSync |
IModule.generateHwAvSyncId
IStreamCommon.updateHwAvSyncId |
IStreamIn.setGain IStreamIn.setMicrophoneDirection IStreamIn.setMicrophoneFieldDimension |
IStreamIn.setHwGain IStreamIn.setMicrophoneDirection IStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoMode
IStreamOut.setDualMonoMode
IStreamOut.getPlaybackRateParameters
IStreamOut.setPlaybackRateParameters
IStreamOut.selectPresentation
IStreamOut.getAudioDescriptionMixLevel
IStreamOut.setAudioDescriptionMixLevel
IStreamOut.setLatencyMode
IStreamOut.getRecommendedLatencyModes |
IStreamOut.\* |
IStreamOut.setEventCallback
IStreamOut.setLatencyModeCallback |
IModule.openOutputStream (การเรียกกลับจะรวมเป็น IStreamOutEventCallback ) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
วิธีการที่เลิกใช้งานแล้ว
เมธอดอินเทอร์เฟซ HIDL API | ความคิดเห็น |
---|---|
IDevice.initCheck IDevice.close |
โมดูล HAL จะเผยแพร่ตัวเองด้วย ServiceManager เฉพาะในกรณีที่เริ่มต้นสําเร็จเท่านั้น เมื่อถึงจุดนั้น ระบบจะถือว่าคำขอเป็นคำขอถาวรและปิดไม่ได้ |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
ต้องรองรับการอัปเดต หยุดชั่วคราว ดำเนินการต่อ และระบาย |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
เลิกใช้งานแล้ว |
ส่วนขยายของผู้ให้บริการ
ใน HIDL API ระบบจะใช้ส่วนขยายของผู้ให้บริการโดยใช้เมธอด getParameters
หรือ
setParameters
จากอินเทอร์เฟซ IDevice
และ IStream
วิธีการเหล่านี้ยอมรับสตริงที่กำหนดเอง
ใน AIDL API มีเมธอดที่เกี่ยวข้อง เช่น getVendorParameters
หรือ setVendorParameters
ซึ่งใช้อินสแตนซ์ Parcelable
ที่กำหนดเองโดยใช้การห่อหุ้มภายใน ParcelableHolders
การเปลี่ยนแปลงอื่นๆ
การเปลี่ยนแปลงทั่วไปอื่นๆ มีดังนี้
เพื่อปรับปรุงความสามารถในการทดสอบของ HAL API ในเวอร์ชัน AIDL เราจะเปิดตัวตัวเลือกการแก้ไขข้อบกพร่องที่การทดสอบ VTS ใช้และพร้อมให้ใช้งานผ่านพาร์เซล
ModuleDebug
ตัวเลือกเหล่านี้จะสั่งให้ HAL จำลองฟังก์ชันการทำงานบางอย่าง (เช่น การเชื่อมต่ออุปกรณ์ภายนอก) ซึ่งไม่เช่นนั้นจะต้องดำเนินการด้วยตนเองและใช้อุปกรณ์ทดสอบภายนอกบริการ HAL ต้องรีสตาร์ทเมื่อตั้งค่าค่าของพร็อพเพอร์ตี้ระบบ
sys.audio.restart.hal
เป็น1
การรีสตาร์ททำได้ผ่านaudioserver.rc
ขณะติดตั้งใช้งาน HAL ให้ใช้ชื่อบริการ HAL ที่เหมาะสมซึ่งแสดงอยู่ในไฟล์audioserver.rc
ใน Android 14 ระบบจะเพิ่มชื่อvendor.audio-hal-aidl
สำหรับ HAL เวอร์ชัน AIDL โดยเฉพาะ
HAL สำหรับเอฟเฟกต์
อินเทอร์เฟซ HIDL ทั้งหมดอยู่ในแพ็กเกจ android.hardware.audio.effect@N.M*
โดยที่ N.M
คือเวอร์ชัน Major.Minor อินเทอร์เฟซ AIDL ทั้งหมดจะอยู่ภายในแพ็กเกจ android.hardware.audio.effect
อินเทอร์เฟซและไฟล์การกำหนดค่า HIDL API | อินเทอร์เฟซ AIDL API |
---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Effect Factory
อินเทอร์เฟซ HIDL API (android.hardware.audio.effect@X.X) |
อินเทอร์เฟซ AIDL API (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects ที่มีพารามิเตอร์ UUID เป็นค่าว่าง |
IEffectsFactory.getDescriptor |
IFactory.queryEffects ที่มีพารามิเตอร์ UUID |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
อินเทอร์เฟซเอฟเฟกต์
อินเทอร์เฟซ HIDL API (android.hardware.audio.effect@X.X) |
อินเทอร์เฟซ AIDL API (android.hardware.audio.effect) |
---|---|
IEffect.init |
IEffect.open |
IEffect.setConfig |
IEffect.setParameter |
IEffect.enable |
IEffect.command(CommandId::START) |
IEffect.disable |
IEffect.command(CommandId::STOP) |
IEffect.reset |
IEffect.command(CommandId::RESET) |
IEffect.getDescriptor |
IEffect.getDescriptor |
IEffect.command |
แมปกับ IEffect.command , IEffect.setParameter หรือ IEffect.getParameter โดยอิงตามประเภทของคำสั่ง HIDL เดิม
|
ไม่มี | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
คำสั่งเอฟเฟกต์
อินเทอร์เฟซ HIDL API (android.hardware.audio.effect@X.X) |
อินเทอร์เฟซ AIDL API (android.hardware.audio.effect) |
---|---|
EFFECT_CMD_INIT |
IEffect.open |
EFFECT_CMD_RESET |
CommandId.RESET |
EFFECT_CMD_ENABLE |
IEffect.command(CommandId::START) |
EFFECT_CMD_DISABLE |
IEffect.command(CommandId::STOP) |
EFFECT_CMD_SET_PARAM_DEFERRED |
เลิกใช้งานแล้วใน Effects AIDL HAL |
EFFECT_CMD_SET_PARAM_COMMIT |
เลิกใช้งานแล้วใน Effects AIDL HAL |
EFFECT_CMD_SET_CONFIG
EFFECT_CMD_SET_PARAM
EFFECT_CMD_SET_DEVICE
EFFECT_CMD_SET_VOLUME
EFFECT_CMD_SET_AUDIO_MODE
EFFECT_CMD_SET_CONFIG_REVERSE
EFFECT_CMD_SET_INPUT_DEVICE
EFFECT_CMD_SET_FEATURE_CONFIG
EFFECT_CMD_SET_AUDIO_SOURCE
| IEffect.setParameter |
EFFECT_CMD_GET_PARAM
EFFECT_CMD_GET_CONFIG
EFFECT_CMD_GET_CONFIG_REVERSE
EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
EFFECT_CMD_GET_FEATURE_CONFIG
VISUALIZER_CMD_MEASURE
EFFECT_CMD_FIRST_PROPRIETARY
(เหมือนกับ VISUALIZER_CMD_CAPTURE )
| IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
เลิกใช้งานแล้ว
ใน AIDL ระบบจะจัดการการเปลี่ยนโหมดการโอนและโหมดที่ไม่โอนในเฟรมเวิร์ก |
EFFECT_CMD_DUMP |
จัดการโดยธุรกรรม Binder ในตัว AIBinder_dump |
คำจำกัดความของพารามิเตอร์เอฟเฟกต์ทั่วไป
คําจํากัดความ HIDL (android.hardware.audio.effect@X.X) |
คําจํากัดความของ AIDL |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
คำจำกัดความของเอฟเฟกต์ที่เฉพาะเจาะจง
อินเทอร์เฟซ HIDL API (android.hardware.audio.effect@X.X) |
อินเทอร์เฟซ AIDL API (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |