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

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

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

نقشه برداری AIDL و HIDL صوتی HAL

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

هسته HAL

همه رابط های 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 برای اندروید 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 به همراه اندازه فریم بر حسب بایت است. اندازه بافر بر حسب بایت را می توان با ضرب این دو عدد محاسبه کرد.

اتصال جلوه های صوتی

روش های رابط 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>
به دو روش مختلف تفکیک شده است:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> ، OR
<volumeGroups> ، <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. 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 پیاده‌سازی می‌شوند. این روش ها رشته های دلخواه را می پذیرند. در API AIDL، روش‌های مربوطه مانند getVendorParameters یا setVendorParameters وجود دارد که با استفاده از کپسوله‌سازی در ParcelableHolders ، نمونه‌های Parcelable دلخواه را می‌گیرند.

تغییرات دیگر

سایر تغییرات کلی به شرح زیر است:

  1. برای بهبود تست پذیری API های HAL، در نسخه AIDL، گزینه های اشکال زدایی را معرفی می کنیم که توسط تست های VTS استفاده می شوند و از طریق بسته بندی ModuleDebug در دسترس هستند. این گزینه‌ها به HAL دستور می‌دهند تا عملکردهای خاصی را تقلید کند (مثلاً اتصال دستگاه‌های خارجی)، که در غیر این صورت نیاز به مداخله دستی و استفاده از تجهیزات آزمایش خارجی دارد.

  2. هنگامی که مقدار ویژگی سیستم sys.audio.restart.hal روی 1 تنظیم شده باشد، خدمات HAL برای راه اندازی مجدد مورد نیاز است. راه اندازی مجدد از طریق audioserver.rc انجام می شود. هنگام اجرای HAL، از نام سرویس HAL مناسب که در فایل audioserver.rc فهرست شده است استفاده کنید. در اندروید 14، نام vendor.audio-hal-aidl به طور خاص برای نسخه AIDL HAL اضافه شده است.

اثرات 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.effect)
IEffectsFactory.getAllDescriptors IFactory.queryEffects با پارامتر UUID null
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.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 قدیمی
N/A IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

دستورات اثر

رابط های HIDL API
(android.hardware.audio.effect@XX)
رابط های 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، سوئیچ‌های حالت Offload و non-offload در چارچوب مدیریت می‌شوند.
EFFECT_CMD_DUMP توسط تراکنش داخلی 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.effect)
I $EffectType$ .hal $EffectType$ .aidl