เริ่มตั้งแต่ Android 14 เป็นต้นไป พาร์ทเนอร์และผู้จำหน่าย SoC ได้รับการสนับสนุนให้แทนที่การใช้งาน HIDL HAL ในปัจจุบันด้วยการใช้งาน AIDL HAL
เพื่ออำนวยความสะดวกในการเปลี่ยนจาก HIDL Audio HAL ไปเป็น AIDL Audio HAL ได้อย่างราบรื่น จึงมีการเน้นความแตกต่างที่สำคัญบางประการในหน้านี้ หน้านี้ยังแสดงการแมประหว่างอินเทอร์เฟซ AIDL และ HIDL สำหรับ Audio 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
พารามิเตอร์ที่เกี่ยวข้องกับการเชื่อมต่อแบบซิงโครนัส Bluetooth (BT SCO) และโปรไฟล์แฮนด์ฟรี (HFP) ได้รับการจัดการโดยอินเทอร์เฟIBluetooth
เฉพาะ อินเทอร์เฟITelephony
เฉพาะให้การควบคุมเฉพาะระบบโทรศัพท์ อินสแตนซ์ของอินเทอร์เฟซทั้งสองนี้สามารถดึงข้อมูลจากอินสแตนซ์หลักของอินเทอร์เฟซIModule
ดูตารางเปรียบเทียบเกี่ยวกับ Core HAL และ ฟังก์ชันที่เกี่ยวข้องกับฟีเจอร์ สำหรับข้อมูลเพิ่มเติมIDevicesFactory
จะถูกลบใน AIDL Audio HAL เพื่อหลีกเลี่ยงความซ้ำซ้อน โมดูล HAL (นั่นคือ อินสแตนซ์อินเทอร์เฟซIModule
) ขณะนี้ได้รับการลงทะเบียนโดยตรงกับ Service Manager โดยใช้ชื่อสำหรับชื่ออินสแตนซ์ เช่นbluetooth
หรือr_submix
ข้อยกเว้นเพียงอย่างเดียวคือโมดูลprimary
ที่ลงทะเบียนภายใต้ชื่ออินสแตนซ์default
การทำแผนที่ AIDL และ HIDL Audio HAL
ตารางในส่วนต่อไปนี้แสดงการจับคู่ระหว่างอินเทอร์เฟซ HIDL และ AIDL Audio HAL ดู ไฟล์เสียง HAL README สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างไดเร็กทอรี
คอร์ ฮาล
อินเทอร์เฟซ HIDL ทั้งหมดอยู่ภายในแพ็คเกจ android.hardware.audio@NM
โดยที่ NM
หมายถึงเวอร์ชัน 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 พร้อมด้วยขนาดเฟรมเป็นไบต์ ขนาดบัฟเฟอร์เป็นไบต์สามารถคำนวณได้โดยการคูณตัวเลขทั้งสองนี้ |
การเชื่อมต่อเอฟเฟกต์เสียง
วิธีการอินเทอร์เฟซ 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
ฟังก์ชั่นที่เกี่ยวข้องกับคุณสมบัติ
วิธีการอินเทอร์เฟซ 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@NM*
โดยที่ NM
คือเวอร์ชัน 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@XX) | อินเทอร์เฟซ AIDL API (android.hardware.audio.เอฟเฟกต์) |
---|---|
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@XX) | อินเทอร์เฟซ AIDL API (android.hardware.audio.เอฟเฟกต์) |
---|---|
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@XX) | อินเทอร์เฟซ AIDL API (android.hardware.audio.เอฟเฟกต์) |
---|---|
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@XX) | คำจำกัดความของ AIDL |
---|---|
Types.hal | Flags.aidl Parameter.aidl |
คำจำกัดความเอฟเฟกต์เฉพาะ
อินเทอร์เฟซ HIDL API (android.hardware.audio.effect@XX) | อินเทอร์เฟซ AIDL API (android.hardware.audio.เอฟเฟกต์) |
---|---|
I $EffectType$ .hal | $EffectType$ .aidl |