با شروع 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.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> | به دو روش مختلف تفکیک شده است:ITelephony.getSupportedAudioModes IConfig.getEngineConfig |
<volumes> ، OR<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
پیادهسازی میشوند. این روش ها رشته های دلخواه را می پذیرند. در API AIDL، روشهای مربوطه مانند getVendorParameters
یا setVendorParameters
وجود دارد که با استفاده از کپسولهسازی در ParcelableHolders
، نمونههای Parcelable
دلخواه را میگیرند.
تغییرات دیگر
سایر تغییرات کلی به شرح زیر است:
برای بهبود تست پذیری API های HAL، در نسخه AIDL، گزینه های اشکال زدایی را معرفی می کنیم که توسط تست های VTS استفاده می شوند و از طریق بسته بندی
ModuleDebug
در دسترس هستند. این گزینهها به HAL دستور میدهند تا عملکردهای خاصی را تقلید کند (مثلاً اتصال دستگاههای خارجی)، که در غیر این صورت نیاز به مداخله دستی و استفاده از تجهیزات آزمایش خارجی دارد.هنگامی که مقدار ویژگی سیستم
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 |