مقایسه AIDL و HIDL Audio HAL

از 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 HAL تغییر نام داده است.

  • ‫AIDL Audio HAL جایگزین IPrimaryDevice می‌شود. چارچوب به‌روزرسانی‌هایی درباره حالت صوتی فعلی و چرخش صفحه‌نمایش به هر نمونه IModule ارسال می‌کند. میانای IBluetooth اختصاصی پارامترهای مربوط به اتصال هم‌زمان بلوتوث (BT SCO) و «نمایه دست‌آزاد» (HFP) را مدیریت می‌کند. میانای ITelephony اختصاصی کنترل‌های ویژه تلفنی را ارائه می‌دهد. می‌توانید نمونه‌های هر دو این میان‌ها را از نمونه اصلی میان IModule بازیابی کنید. برای اطلاعات بیشتر، جدول‌های مقایسه در Core HAL و کارکرد مربوط به ویژگی را ببینید.

  • ‫IDevicesFactory در AIDL Audio HAL برداشته شده است تا از افزونگی جلوگیری شود. اکنون مدول‌های HAL (یعنی نمونه‌های میانای IModule) مستقیماً بااستفاده از نام‌های نمونه‌های مدول، مثل bluetooth یا r_submix، در «مدیر سرویس» ثبت می‌شوند. تنها استثنا واحد primary است که تحت نام نمونه default ثبت می‌شود.

نگاشت HAL صوتی AIDL و HIDL

جدول‌های بخش‌های زیر نگاشت بین میاناهای HIDL و AIDL Audio HAL را نشان می‌دهند. برای اطلاعات بیشتر درباره ساختار دایرکتوری، Audio HAL را ببینید.

لایه انتزاع سخت‌افزار اصلی

همه میاناهای HIDL در بسته android.hardware.audio@N.M قرار دارند، که در آن N.M نشان‌دهنده نسخه Major.Minor است. همه میاناهای AIDL در بسته android.hardware.audio.core قرار دارند.

میاناهای برنامه‌سازی کاربردی HIDL و فایل‌های پیکربندی میاناهای میانای برنامه‌سازی کاربردی AIDL
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 و عناصر فایل‌های پیکربندی روش‌های واسط میانای برنامه‌سازی کاربردی AIDL
<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 روش‌های واسط میانای برنامه‌سازی کاربردی AIDL
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
StreamDescriptor.Command.pause
.start
‫IStream.start
IStream.stop
(جاری‌سازی‌های MMAP)
‫StreamDescriptor.Command.start یا .burst
.pause (ورودی) و/یا .flush (خروجی)
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 روش‌های میانای API AIDL
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
<globalConfiguration>
<speaker_drc_enabled>۱

<call_screen_mode_supported>
<engine_library>
به دو روش مختلف تقسیم شده است:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes>، اورگن
<volumeGroups>، <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. ‫speaker_drc_enabled از فایل پیکربندی برداشته شد زیرا این مورد پیکربندی در سیستم استفاده نمی‌شود. همه دستگاه‌ها باید «کنترل محدوده پویا» را فعال کرده باشند. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">

عملکرد مرتبط با ویژگی

روش‌های واسط میانای برنامه‌سازی کاربردی HIDL میانای API زبان تعریف میانای Android
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 نظرات
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)، در نسخه AIDL، گزینه‌های اشکال‌زدایی را معرفی می‌کنیم که در آزمایش‌های VTS استفاده می‌شوند و ازطریق نوع بسته‌بندی ModuleDebug دردسترس هستند. این گزینه‌ها به HAL دستور می‌دهند عملکرد خاصی را شبیه‌سازی کند (برای مثال، اتصال دستگاه‌های خارجی)، که درغیراین‌صورت به مداخله دستی و استفاده از تجهیزات آزمایش خارجی نیاز دارد.

  • وقتی چارچوب یا مجموعه‌های آزمون VTS دارایی سیستم sys.audio.restart.hal را روی 1 تنظیم می‌کند، سرویس‌های HAL باید بازراه‌اندازی شوند. فایل audioserver.rc بازراه‌اندازی را مدیریت می‌کند. هنگام پیاده‌سازی HAL، از نام سرویس HAL مناسب که در فایل audioserver.rc فهرست شده است استفاده کنید. در Android 14، نام vendor.audio-hal-aidl به‌طور خاص برای نسخه AIDL از HAL اضافه شده است.

لایه انتزاع سخت‌افزار جلوه‌ها

همه میاناهای HIDL در بسته android.hardware.audio.effect@N.M* قرار دارند، که در آن N.M نسخه Major.Minor است. همه میاناهای AIDL در بسته android.hardware.audio.effect قرار دارند.

واسط‌های میانای برنامه‌سازی کاربردی HIDL و فایل‌های پیکربندی میاناهای 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 با پارامتر شناسه منحصربه‌فرد جهانی تهی
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 براساس نوع فرمان HIDL قدیمی، به IEffect.command،
IEffect.setParameter، یا
IEffect.getParameter نقشه می‌دهد
موجود نیست 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 توسط تراکنش بایندر داخلی 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