با شروع 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ثبت می شود.
نقشه برداری AIDL و HIDL صوتی HAL
جداول در بخش های زیر نگاشت بین رابط های HIDL و AIDL Audio HAL را نشان می دهد. برای اطلاعات بیشتر در مورد ساختار دایرکتوری به Audio HAL مراجعه کنید.
هسته HAL
همه رابط های HIDL در بسته android.hardware.audio@NM هستند، جایی که NM نشان دهنده نسخه Major.Minor است. همه رابط های AIDL در بسته android.hardware.audio.core هستند.
| رابط های HIDL API و فایل های پیکربندی | رابط های AIDL API |
|---|---|
IDevicesFactory | ثبت IModule با ServiceManager . |
IDevice | IModule |
IPrimaryDevice | ITelephonyIBluetooth |
IStreamIStreamInIStreamOut | StreamDescriptorIStreamInIStreamCommonIStreamOut |
audio_policy_configuration.xmlaudio_policy_engine_configuration.xml | IConfigIModule |
| فایل های سیاست صوتی قابل تنظیم | از پیاده سازی HIDL برای اندروید 14 استفاده کنید. |
پورت های صوتی، پروفایل های پویا، مسیرها و وصله ها
در این جدول، عناصر فایل های XML با استفاده از براکت های زاویه ای مشخص شده اند.
| روش های رابط HIDL API و عناصر فایل های پیکربندی | روش های رابط AIDL API |
|---|---|
<attachedDevices><defaultOutputDevice><mixPorts><devicePorts> | IModule.getAudioPorts |
IDevice.getAudioPortIDevice.setConnectedState | IModule.connectExternalDeviceIModule.disconnectExternalDevice |
IStream.getSupportedProfiles | IModule.connectExternalDevice |
< routes > | IModule.getAudioRoutes |
IDevice.createAudioPatchIDevice.updateAudioPatchIDevice.releaseAudioPatchIStream.getDevicesIStream.setDevicesمشخصات دستگاه در IDevice.openInputStreamIDevice.openOutputStream | IModule.setAudioPatchIModule.setAudioPortConfigIModule.resetAudioPatch |
پیکربندی ها و جریان های پورت صوتی
| روش های رابط HIDL API | روش های رابط AIDL API |
|---|---|
IStream.getAudioPropertiesIStream.setAudioPropertiesIStreamIn.getAudioSource | IModule.getAudioPortConfigsIModule.setAudioPortConfig |
IDevice.openInputStreamIDevice.openOutputStreamIStreamIn.prepareForReadingIStreamOut.prepareForWritingIStream.createMmapBuffer | IModule.openInputStreamIModule.openOutputStream |
IStream.close | IStreamCommon.close |
IStreamIn.updateSinkMetadataIStreamOut.updateSourceMetadata | IStreamIn.updateMetadataIStreamOut.updateMetadata |
IStream.standby | StreamDescriptor.Command.standby |
IStream.pauseIStream.resume | StreamDescriptor.Command.pause.start |
IStream.startIStream.stop(جریان های MMAP) | StreamDescriptor.Command.start یا .burst.pause (ورودی) و/یا .flush (خروجی) |
IStreamOut.drainIStreamOut.flush | StreamDescriptor.Command.drain.flush |
IStreamOut.setCallbackIStreamOut.clearCallback | IModule.openOutputStreamIStreamCommon.close |
IStreamOut.getPresentationPosition و IStreamIn.getCapturePositionIStreamOut.getLatencyIStream.getMmapPositionIStreamIn.getInputFramesLost | StreamDescriptor.Reply.observableStreamDescriptor.Reply.latencyMsStreamDescriptor.Reply.hardwareStreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSizeIStreamOut.getLatencyIStream.getBufferSizeIStream.getFrameSizeIStream.getFrameCount | IModule.setAudioPatch ، تأخیر اسمی و حداقل اندازه بافر بخشی از ساختار AudioPatch هستند که توسط HAL برگردانده شدهاند. اندازه واقعی بافر در فریم ها بخشی از ساختار StreamDescriptor به همراه اندازه فریم بر حسب بایت است. اندازه بافر بر حسب بایت را می توان با ضرب این دو عدد محاسبه کرد. |
اتصال جلوه های صوتی
| روش های رابط HIDL API | روش های رابط AIDL API |
|---|---|
IDevice.addDeviceEffectIDevice.removeDeviceEffect | IModule.addDeviceEffectIModule.removeDeviceEffect |
IStream.addEffectIStream.removeEffect | IStreamCommon.addEffectIStreamCommon.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.getSupportedAudioModesIConfig.getEngineConfig |
<volumes> ، OR<volumeGroups> ، <ProductStrategies> | IConfig.getEngineConfig |
<surroundSound> | IConfig.getSurroundSoundConfig |
speaker_drc_enabledاز فایل پیکربندی حذف می شود زیرا این مورد پیکربندی در سیستم استفاده نمی شود. همه دستگاهها باید DRC را فعال کنند.
عملکرد مرتبط با ویژگی
| روش های رابط HIDL API | رابط AIDL API |
|---|---|
IDevice.setMasterVolumeIDevice.getMasterVolumeIDevice.setMicMuteIDevice.getMicMuteIDevice.setMasterMuteIDevice.getMasterMute | IModule.\* |
IPrimaryDevice.getTtyModeIPrimaryDevice.setTtyModeIPrimaryDevice.getHacEnabledIPrimaryDevice.setHacEnabledIPrimaryDevice.setVoiceVolume | ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugNameIPrimaryDevice.getBtScoNrecEnabledIPrimaryDevice.setBtScoNrecEnabledIPrimaryDevice.getBtScoWidebandEnabledIPrimaryDevice.setBtScoWidebandEnabled,IPrimaryDevice.getBtHfpEnabledIPrimaryDevice.setBtHfpEnabledIPrimaryDevice.setBtHfpSampleRateIPrimaryDevice.setBtHfpVolume | IBluetooth.ScoConfig.\*IBluetooth.HfpConfig.\* |
IPrimaryDevice.setModeIPrimaryDevice.updateRotation | ITelephony.switchAudioModeIModule.updateAudioModeIModule.updateScreenRotation |
IDevice.setScreenStateIDevice.getMicrophones | IModule.updateScreenStateIModule.getMicrophones |
IDevice.getHwAvSyncIStream.setHwAvSync | IModule.generateHwAvSyncIdIStreamCommon.updateHwAvSyncId |
IStreamIn.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension | IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoModeIStreamOut.setDualMonoModeIStreamOut.getPlaybackRateParametersIStreamOut.setPlaybackRateParametersIStreamOut.selectPresentationIStreamOut.getAudioDescriptionMixLevelIStreamOut.setAudioDescriptionMixLevelIStreamOut.setLatencyModeIStreamOut.getRecommendedLatencyModes | IStreamOut.\* |
IStreamOut.setEventCallbackIStreamOut.setLatencyModeCallback | IModule.openOutputStream (تماسهای برگشتی در IStreamOutEventCallback ترکیب میشوند) |
IDevice.get/setParametersIStream.get/setParameters | IModule.get/setVendorParametersIStreamCommon.get/setVendorParameters |
روش های منسوخ شده
| روش های رابط HIDL API | نظرات |
|---|---|
IDevice.initCheckIDevice.close | ماژول HAL فقط با مقداردهی اولیه موفقیت آمیز خود را با ServiceManager منتشر می کند. در آن مرحله، دائمی در نظر گرفته می شود و نمی توان آن را بسته کرد. |
IDevice.supportsAudioPatchesIStreamOut.supportsPauseAndResumeIStreamOut.supportsDrain | پشتیبانی از پچ ها، مکث، رزومه و تخلیه الزامی است. |
IStreamOut.getRenderPositionIStreamOut.getNextWriteTimestamp | منسوخ شده |
پسوند فروشنده
در HIDL API، افزونههای فروشنده با استفاده از متدهای getParameters یا setParameters از رابطهای IDevice و IStream پیادهسازی میشوند. این روش ها رشته های دلخواه را می پذیرند. در API AIDL، روشهای مربوطه مانند getVendorParameters یا setVendorParameters وجود دارد که با استفاده از کپسولهسازی در ParcelableHolders ، نمونههای Parcelable دلخواه را میگیرند.
تغییرات دیگر
سایر تغییرات کلی به شرح زیر است:
برای بهبود تست پذیری API های HAL، در نسخه AIDL، گزینه های اشکال زدایی را معرفی می کنیم که توسط تست های VTS استفاده می شوند و از طریق بسته بندی
ModuleDebugدر دسترس هستند. این گزینهها به HAL دستور میدهند تا عملکردهای خاصی را تقلید کند (مثلاً اتصال دستگاههای خارجی)، که در غیر این صورت نیاز به مداخله دستی و استفاده از تجهیزات آزمایش خارجی دارد.هنگامی که چارچوب یا آزمایش VTS ویژگی سیستم
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.queryProcessingIFactory.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_CONFIGEFFECT_CMD_SET_PARAMEFFECT_CMD_SET_DEVICEEFFECT_CMD_SET_VOLUMEEFFECT_CMD_SET_AUDIO_MODEEFFECT_CMD_SET_CONFIG_REVERSEEFFECT_CMD_SET_INPUT_DEVICEEFFECT_CMD_SET_FEATURE_CONFIGEFFECT_CMD_SET_AUDIO_SOURCE | IEffect.setParameter |
EFFECT_CMD_GET_PARAMEFFECT_CMD_GET_CONFIGEFFECT_CMD_GET_CONFIG_REVERSEEFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGSEFFECT_CMD_GET_FEATURE_CONFIGVISUALIZER_CMD_MEASUREEFFECT_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.aidlParameter.aidl |
تعریف جلوه های خاص
| رابط های HIDL API (android.hardware.audio.effect@XX) | رابط های AIDL API (android.hardware.audio.effect) |
|---|---|
I $EffectType$ .hal | $EffectType$ .aidl |