مقارنة 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 . تتم معالجة المعلمات المتعلقة باتصال Bluetooth المتزامن (BT SCO) وملف تعريف التحدث الحر (HFP) من خلال واجهة IBluetooth مخصصة. توفر واجهة ITelephony المخصصة عناصر تحكم خاصة بالهاتف. يمكن استرداد مثيلات كل من هذه الواجهات من المثيل الأساسي لواجهة IModule . راجع جداول المقارنة الخاصة بـ Core HAL والوظائف المرتبطة بالميزات لمزيد من المعلومات.

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

تعيين AIDL وHIDL Audio HAL

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

هال الأساسية

جميع واجهات 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 لنظام Android 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> ، أو
<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، يتم تنفيذ ملحقات البائع باستخدام أساليب 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.

تأثيرات هال

جميع واجهات 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 فارغة
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 القديم
لا يوجد 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 تم إهمالها في التأثيرات AIDL HAL
EFFECT_CMD_SET_PARAM_COMMIT تم إهمالها في التأثيرات 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 .

تعريف معلمات التأثير المشترك

تعريف هيدل
(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