การเปรียบเทียบ HAL ของ AIDL กับ HIDL Audio

เริ่มตั้งแต่ 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 HAL

  • IPrimaryDevice จะแทนที่ใน 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.getAudioPort
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>1

<call_screen_mode_supported>
<engine_library>
โดยแบ่งออกเป็น 2 วิธีดังนี้
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> ออริกอน
<volumeGroups> <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. 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

การเปลี่ยนแปลงอื่นๆ

การเปลี่ยนแปลงทั่วไปอื่นๆ มีดังนี้

  1. ในการปรับปรุงความสามารถในการทดสอบของ HAL API ในเวอร์ชัน AIDL เรา แนะนำตัวเลือกการแก้ไขข้อบกพร่องที่การทดสอบ VTS ใช้อยู่และ ผ่านไฟล์พาร์เซล ModuleDebug ตัวเลือกเหล่านี้จะสั่งให้ HAL จำลองฟังก์ชันการทำงานบางอย่าง (เช่น การเชื่อมต่ออุปกรณ์ภายนอก) ซึ่งจำเป็นต้องมีการดำเนินการโดยเจ้าหน้าที่และใช้การทดสอบภายนอก ที่ไวต่อสัญญาณต่างๆ

  2. ต้องใช้บริการ 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