مقایسه AIDL و HIDL Audio HAL

با شروع از اندروید ۱۴، به شرکا و فروشندگان 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 در AIDL Audio HAL به IModule تغییر نام داده است.

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

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

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

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

هسته هال

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

رابط‌های API و فایل‌های پیکربندی HIDL رابط‌های API 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 برای اندروید ۱۴ استفاده کنید.

پورت‌های صوتی، پروفایل‌های پویا، مسیرها و پچ‌ها

در این جدول، عناصر فایل‌های XML با استفاده از براکت‌های زاویه‌دار مشخص شده‌اند.

متدهای رابط API HIDL و عناصر فایل‌های پیکربندی متدهای رابط API 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

پیکربندی‌ها و جریان‌های پورت صوتی

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

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

روش‌های رابط API HIDL متدهای رابط 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 متدهای رابط API 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 از فایل پیکربندی حذف شده است زیرا این مورد پیکربندی در سیستم استفاده نمی‌شود. همه دستگاه‌ها باید DRC را فعال داشته باشند.

قابلیت‌های مرتبط با ویژگی

روش‌های رابط API HIDL رابط API AIDL
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

روش‌های منسوخ‌شده

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

تغییرات دیگر

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

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

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

اثرات هال

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

رابط‌های API و فایل‌های پیکربندی HIDL رابط‌های API AIDL
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

کارخانه افکت

رابط‌های API HIDL
(android.hardware.audio.effect@XX)
رابط‌های API AIDL
(افکت صوتی.سخت‌افزار.اندروید)
IEffectsFactory.getAllDescriptors IFactory.queryEffects با پارامتر UUID تهی
IEffectsFactory.getDescriptor IFactory.queryEffects با پارامتر UUID
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.queryEffects

رابط‌های افکت

رابط‌های API HIDL
(android.hardware.audio.effect@XX)
رابط‌های API AIDL
(افکت صوتی.سخت‌افزار.اندروید)
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

دستورات افکت

رابط‌های API HIDL
(android.hardware.audio.effect@XX)
رابط‌های API AIDL
(افکت صوتی.سخت‌افزار.اندروید)
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@XX)
تعریف AIDL
Types.hal Flags.aidl
Parameter.aidl

تعریف اثرات خاص

رابط‌های API HIDL
(android.hardware.audio.effect@XX)
رابط‌های API AIDL
(افکت صوتی.سخت‌افزار.اندروید)
I $EffectType$ .hal $EffectType$ .aidl