เริ่มตั้งแต่ Android 14, พาร์ทเนอร์และผู้ให้บริการ SoC ควรแทนที่การใช้ HIDL HAL ในปัจจุบันด้วย AIDL HAL การใช้งานของคุณ
เพื่อช่วยให้การเปลี่ยนจาก HIDL Audio HAL เป็นไปอย่างราบรื่น ไปยัง HAL ของ AIDL เราจะไฮไลต์ความแตกต่างที่สำคัญบางประการในหน้านี้ หน้านี้ยังแสดงการแมประหว่างอินเทอร์เฟซ AIDL กับ HIDL สำหรับ HAL เสียง
ความแตกต่างระหว่างการใช้งาน AIDL กับ HIDL Audio HAL
ความแตกต่างที่สำคัญระหว่างโครงสร้าง HIDL และโครงสร้าง AIDL มีดังนี้ ดังต่อไปนี้:
ใน AIDL Audio Core HAL องค์ประกอบ มีการเริ่มใช้อินเทอร์เฟซ
IConfig
เพื่อแทนที่อินเทอร์เฟซทั้งระบบ ในไฟล์ XML ใน HIDL HAL เฟรมเวิร์กจะระบุว่า จาก HAL หลักแทนไฟล์การกำหนดค่าของผู้ให้บริการ ตัวอย่างเช่น รายการรูปแบบเซอร์ราวด์ที่แสดงให้ผู้ใช้ควบคุมได้ ซึ่งให้บริการโดยIConfig.getSurroundSoundConfig
ใน HAL หลักใน AIDL Audio Effects HAL ระบบย้ายตรรกะ
effectProxy
ที่กำหนดไว้ในไฟล์ XML ใน HIDL Events HAL ไปยัง เฟรมเวิร์กด้านเสียง เฟรมเวิร์กเสียงจะค้นหาอินสแตนซ์เอฟเฟกต์ทั้งหมดใน ระบบที่ใช้IFactory.queryEffects
และการประมวลผลเอฟเฟกต์ทั้งหมดที่ใช้IFactory.queryProcessing
เพื่อไม่ให้สับสนกับการใช้คำว่าอุปกรณ์กับประเภทอุปกรณ์เสียง
IDevice
ใน HIDL Audio HAL เปลี่ยนชื่อเป็นIModule
ใน AIDL Audio HALIPrimaryDevice
จะแทนที่ใน AIDL Audio HAL ข้อมูลอัปเดตเกี่ยวกับเสียงปัจจุบัน ระบบจะส่งโหมดและการหมุนหน้าจอไปยังอินสแตนซ์IModule
ทุกรายการ พารามิเตอร์ เกี่ยวข้องกับการเชื่อมต่อบลูทูธแบบซิงโครนัส (BT SCO) และแฮนด์ฟรี โปรไฟล์ (HFP) ได้รับการจัดการโดยIBluetooth
เฉพาะ ของ Google อินเทอร์เฟซITelephony
โดยเฉพาะมีฟังก์ชันสำหรับโทรศัพท์โดยเฉพาะ อินสแตนซ์ของอินเทอร์เฟซทั้งสองนี้สามารถดึงข้อมูลจาก อินสแตนซ์หลักของอินเทอร์เฟซIModule
ดูตารางเปรียบเทียบใน Core HAL และ ฟังก์ชันการทำงานที่เกี่ยวข้องกับฟีเจอร์ เพื่อดูข้อมูลเพิ่มเติมระบบจะนำ
IDevicesFactory
ออกจาก HAL ของ AIDL เพื่อหลีกเลี่ยงความซ้ำซ้อน ฮัล ตอนนี้มีการลงทะเบียนโมดูล (กล่าวคือ อินสแตนซ์อินเทอร์เฟซIModule
รายการ) โดยตรงแล้ว กับผู้จัดการบริการโดยใช้ชื่อของอินสแตนซ์ เช่นbluetooth
หรือr_submix
ข้อยกเว้นเพียงอย่างเดียวคือโมดูลprimary
ลงทะเบียนภายใต้ชื่ออินสแตนซ์default
การแมป AIDL และ HIDL Audio HAL
ตารางในส่วนต่อไปนี้จะแสดงการแมประหว่าง HIDL กับ AIDL อินเทอร์เฟซ HAL ของเสียง โปรดดู ไฟล์เสียง HAL README เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างไดเรกทอรี
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
สำหรับเวอร์ชัน AIDL ของ HAL
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 |
โรงงานเอฟเฟกต์
อินเทอร์เฟซ 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 |
เลิกใช้งานแล้วในเอฟเฟกต์ AIDL HAL |
EFFECT_CMD_SET_PARAM_COMMIT |
เลิกใช้งานแล้วในเอฟเฟกต์ 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 |