مقارنة بين AIDL وHIDL Audio HAL

بدءًا من نظام التشغيل Android 14، الشركاء ومورّدو المنظومة على الرقاقة (SoC) يُنصح باستبدال عملية تنفيذ HIDL HAL الحالية بترخيص AIDL HAL. التنفيذ.

لتسهيل الانتقال السلس من HIDL Audio HAL إلى AIDL Audio HAL، تم تمييز بعض الاختلافات الرئيسية في هذه الصفحة. كما تعرض هذه الصفحة التخطيط بين واجهتي AIDL وHIDL طبقة تجريد الأجهزة (HAL) للصوت

الفرق بين تنفيذ AIDL وHIDL Audio HAL

الاختلافات الرئيسية بين بنية HIDL وهيكل AIDL هي التالي:

  • في AIDL Audio Core HAL، تم تقديم واجهة IConfig كبديل للواجهة على مستوى النظام في ملفات XML في HIDL HAL. نص إطار العمل هذه المعلمات من Core HAL بدلاً من ملف إعداد المورد. على سبيل المثال، قائمة التنسيقات المحيطية التي يتم عرضها لتحكُّم المستخدم هي السمة IConfig.getSurroundSoundConfig في دالة HAL الأساسية.

    في HAL لتأثيرات الصوت المستندة إلى AIDL، تم نقل منطق effectProxy المحدد في ملفات XML في HIDL Effects HAL إلى إطار عمل الصوت. يطلب إطار عمل الصوت جميع حالات التأثير في الذي يستخدم IFactory.queryEffects، وجميع عمليات معالجة التأثيرات باستخدام IFactory.queryProcessing

  • لتجنُّب حدوث أي التباس مع استخدام مصطلح device لأنواع الأجهزة السماعية، تمت إعادة تسمية IDevice في HIDL Audio HAL إلى IModule في AIDL Audio HAL.

  • تم استبدال IPrimaryDevice في AIDL Audio. إشعارات حول المحتوى الصوتي الحالي يتم إرسال الوضع وتدوير الشاشة إلى كل مثيل IModule. المَعلمات معلومات حول الاتصال المتزامن عبر البلوتوث (BT SCO) وميزة "بدون استخدام اليدين" يتعامل مع الملف الشخصي (HFP) من خلال IBluetooth مخصَّص. من واجهة pyplot. واجهة ITelephony مخصصة توفّر الاتصالات الهاتفية والتحكم المستمر. ويمكن استرداد أمثلة كلتا الواجهتين من المثيل الأساسي لواجهة IModule. اطّلِع على جداول المقارنة على تقنية HAL الأساسية الوظائف المتعلّقة بالميزات لمزيد من المعلومات.

  • تتم إزالة IDevicesFactory في AIDL Audio HAL لتجنُّب التكرار. طبقة تجريد الأجهزة (HAL) تم الآن تسجيل الوحدات (أي IModule مثيل للواجهة) مباشرةً. مع مدير الخدمة باستخدام أسمائه، مثل أسماء المثيلات، مثل bluetooth أو r_submix. الاستثناء الوحيد هو الوحدة primary التي يتم تسجيلها تحت اسم المثيل default.

ربط HAL لكل من AIDL وHIDL Audio

تُظهِر الجداول في الأقسام التالية التعيين بين HIDL وAIDL. واجهات HAL الصوتية. عرض ملف Audio HAL README لمزيد من المعلومات عن بنية الدليل.

طبقة تجريد الأجهزة (HAL) الأساسية

تتوفّر جميع واجهات HIDL ضمن حزمة "android.hardware.audio@N.M"، حيث يكون تشير السمة N.M إلى الإصدار 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 لنظام التشغيل 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 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
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
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>1

<call_screen_mode_supported>
<engine_library>
يتم الفصل بين طريقتين مختلفتين:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes>، أو
<volumeGroups>، <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. تمت إزالة speaker_drc_enabled من ملف الإعداد باسم عدم استخدام عنصر الضبط هذا داخل النظام. يجب أن تتضمّن جميع الأجهزة تم تفعيل DRC.<a href="#fnref1" rev="footnote"> </a href="#fnref1">

الوظائف ذات الصلة بالميزات

طرق واجهة 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، يتم تنفيذ إضافات المورّدين باستخدام getParameters أو setParameters طريقة من الواجهتين IDevice وIStream هذه تقبل السلاسل العشوائية. في AIDL API، تتوفّر طرق مناسبة، مثل getVendorParameters. أو setVendorParameters، التي تستخدم حالات Parcelable عشوائية من خلال استخدام التغليف ضمن ParcelableHolders.

تغييرات أخرى

في ما يلي التغييرات العامة الأخرى:

  1. لتحسين قابلية اختبار واجهات برمجة تطبيقات HAL، في إصدار AIDL، وتقدِّم خيارات تصحيح الأخطاء التي تستخدمها اختبارات VTS المتاحة من خلال عنصر ModuleDebug. توجه هذه الخيارات HAL إلى محاكاة وظائف معيّنة (مثل اتصال أجهزة خارجية) والذي يتطلب بخلاف ذلك التدخل اليدوي واستخدام اختبار خارجي المعدات.

  2. يجب إعادة تشغيل خدمات HAL عندما تكون قيمة الموقع الإلكتروني على النظام. تم ضبط sys.audio.restart.hal على 1. وتتم إعادة التشغيل من خلال audioserver.rc أثناء تنفيذ HAL، استخدم اسم خدمة HAL المناسب المدرج في ملف audioserver.rc. في Android 14، تم تغيير اسم تمت إضافة vendor.audio-hal-aidl تحديدًا لإصدار AIDL من HAL.

طبقة تجريد الأجهزة (HAL) للتأثيرات

تتوفّر جميع واجهات HIDL ضمن android.hardware.audio.effect@N.M*. حيث يكون N.M هو إصدار 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@X.X)
واجهات AIDL API
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors الدالة IFactory.queryEffects تحتوي على مَعلمة UUID فارغة.
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 خريطة إلى IEffect.command،
IEffect.setParameter، أو
IEffect.getParameter استنادًا إلى نوع شهادة HIDL القديمة Command
لا ينطبق IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

أوامر التأثيرات

واجهات HIDL API
(android.hardware.audio.effect@X.X)
واجهات برمجة تطبيقات AIDL
(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 تم إيقافها في قائمة HAL AIDL للتأثيرات
EFFECT_CMD_SET_PARAM_COMMIT تم إيقافها في قائمة HAL AIDL للتأثيرات
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