بدءًا من 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.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> ، أو<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، يتم تنفيذ ملحقات البائع باستخدام أساليب getParameters
أو setParameters
من واجهات IDevice
و IStream
. تقبل هذه الطرق سلاسل عشوائية. في AIDL API، هناك طرق مقابلة، مثل getVendorParameters
أو setVendorParameters
، والتي تأخذ مثيلات Parcelable
بشكل عشوائي باستخدام التغليف داخل ParcelableHolders
.
تغييرات أخرى
التغييرات العامة الأخرى هي كما يلي:
لتحسين قابلية اختبار واجهات برمجة تطبيقات HAL، في إصدار AIDL، نقدم خيارات تصحيح الأخطاء التي تستخدمها اختبارات VTS والمتاحة من خلال
ModuleDebug
القابل للتجزئة. تقوم هذه الخيارات بتوجيه HAL لمحاكاة وظائف معينة (على سبيل المثال، الاتصال بأجهزة خارجية)، والتي تتطلب تدخلًا يدويًا واستخدام معدات اختبار خارجية.يلزم إعادة تشغيل خدمات 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 |