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

في نظام التشغيل Android 13 والإصدارات الأقدم، يتم استخدام واجهة باستخدام HIDL في ملفات HIDL HAL (مع الإضافة .hal) و XSD ملفات التهيئة، كما هو موضح على النحو التالي.

صوت_هال

الشكل 1. واجهة HAL الصوتية.

ملفات الإعداد

يتم اعتبار ملفات إعداد XML الخاصة بسياسة الصوت والتأثيرات الصوتية جزءًا. لواجهة Audio HIDL HAL. يجب أن تتوافق هذه الملفات مع مخططاتها في التحقق من التوافق باستخدام اختبارات VTS.

كجزء من تطبيق فلتر HIDL HAL الصوتي، يجب عليك إنشاء ملف إعداد سياسة الصوت تصف طوبولوجيا الصوت. يجب الإشارة إلى إمكانات HAL الصوتية في ملف audio_policy_configuration.xml لإطار العمل لاستخدامها.

واجهة برمجة تطبيقات Audio HIDL HAL API

يصف هذا القسم واجهات برمجة التطبيقات الأساسية والتأثيرات وHAL API الخاصة ببروتوكول HIDL.

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

في ما يلي بعض الواجهات الرئيسية لـ Core HAL، باستخدام HIDL:

  • IDeviceFactory.hal هي نقطة الدخول إلى واجهة برمجة التطبيقات.
  • يحتوي IDevice.hal وIPrimaryDevice.hal على طرق مثل setMasterVolume أو openInputStream.
  • أحداث البث أحادية الاتجاه وتستخدمها AudioFlinger لإرسال الرسائل أو استقبالها الصوت من وإلى HAL حتى IStream.hal وIStreamOut.hal IStreamIn.hal

يسرد الجدول التالي موقع مكونات Core HAL HIDL المفيدة:

مكوّن HAL الأساسي الموقع الجغرافي
أحدث إصدار من واجهة برمجة التطبيقات /hardware/interfaces/audio/6.0
أنواع خاصة بأحدث واجهة برمجة تطبيقات Core HAL API /hardware/interfaces/audio/6.0/types.hal
مخطط XSD لملف إعداد سياسة الصوت /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

التنفيذ التلقائي لواجهة برمجة تطبيقات Core HAL API (/hardware/interfaces/audio/core/all-versions/default/) هو برنامج تضمين لتنفيذ HAL قبل تريبل باستخدام المكتبات المشتركة القديمة. يمكن أيضًا اعتبار عملية التنفيذ التلقائية مرجعًا عندما تنفيذ إصدارات جديدة من HALs للصوت تتفاعل مع برامج تشغيل النواة مباشرةً.

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

يسرد الجدول التالي موقع مكونات HAL المفيدة للتأثيرات باستخدام HIDL:

مكوِّن HAL للتأثيرات الموقع الجغرافي
أحدث إصدار من واجهة برمجة التطبيقات /hardware/interfaces/audio/effect/6.0/
مخطط XSD لملف إعداد التأثير /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

لمزيد من المعلومات، انظر نموذج تنفيذ واجهة برمجة تطبيقات HAL للتأثيرات على /hardware/interfaces/audio/effect/all-versions/default/ وقسم التأثيرات الصوتية.

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

تحتوي واجهة Common HAL API باستخدام HIDL على ما يلي:

  • التعريفات (/hardware/interfaces/audio/common/6.0/types.hal) التي تمت مشاركتها من قِبل واجهات برمجة التطبيقات الأساسية والتأثيرات.
  • استخدام الأدوات المساعدة (/hardware/interfaces/audio/common/all-versions) للمساعدة والترميز وفقًا لواجهات برمجة تطبيقات HIDL الخاصة بعمليات التنفيذ والعملاء والاختبارات.

تعديلات على HAL V7 للصوت

هناك تغييرات مهمة في الإصدار 7 من HAL للصوت في Android 12 كما هو موضّح في هذا القسم. يقوم Audio HAL V7 بما يلي:

  • توحيد نماذج البيانات المستخدمة في إطار العمل وHAL.
  • تقليل التكرار بين أنواع بيانات HIDL (التعدادات) ومخطط XML مستخدمة في تهيئة سياسة الصوت.

على وجه التحديد، يتم إجراء التغييرات في الجوانب التالية في Audio HAL V7:

وستتم مناقشة هذه التغييرات بمزيد من التفصيل في الأقسام المعنيّة.

عمليات التعداد

بدءًا من مستوى الصوت HAL V7، الأنواع العددية المستخدمة في إعدادات سياسة الصوت فقط في مخطط XSD وليس في HIDL.

في Audio HAL V6، تكون قيم أنواع التعداد (مثل AudioFormat) في types.hal هي أيضًا في مخطط XSD لملف إعداد سياسة الصوت، ننشئ التكرار. لتجنُّب ذلك في V7، يتم تغيير أنواع التعداد إلى string يتم سرد جميع قيم التعداد المحتملة في مخطط XSD بدلاً من ذلك.

يقارن الشكل 2 بعض التغييرات على نوع التعداد AudioFormat في V7:

تغيير تنسيق الصوت

الشكل 2. مقارنة لبعض التغييرات في تعداد تنسيق الصوت

يمكنك الرجوع إلى القائمة التالية للاطّلاع على أنواع التعداد التي تم تحويلها إلى string:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice: مورِّد قابل للتمديد
  • AudioFormat: مورِّد قابل للتمديد
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

تمرير قيم تعداد السلسلة

تُستخدم قيم السلسلة لنقل المعلومات كقيم تعداد عبر لحدود واجهة HAL. كل من إطار العمل يستخدم برنامج تضمين HAL قيم التعداد الصحيحة لتنفيذ منطق الأعمال واستخدام منهج الإحالة الناجحة الموضّح في الشكل 3:

قيم تمرير الصوت

الشكل 3. تمرير قيم تعداد السلسلة.

على سبيل المثال، لتمرير قيمة لنوع تنسيق الصوت من إطار العمل إلى البائع:

  1. يتم تحويل قيمة التعداد AudioFormat إلى قيمة سلسلة في libaudiohal ويتم تمريرها إلى HAL.
  2. على جانب HAL، يحوّل برنامج التضمين التلقائي السلسلة إلى تعداد. التي يتم تمريرها إلى HAL القديم.

تغييرات في مخطط XML

إنّ توفُّر قوائم كاملة بقيم التعداد في تعريف مخطّط XML (XSD) هو لتحسين التحقق من ملف XML الخاص بإعداد سياسة الصوت بواسطة VTS. لقد قطعنا التغييرات في ملف إعداد سياسة الصوت المُستخدَم مع HAL V7 للتوافق مع XSD.

في V7، يُستخدَم حرف (مسافة) عادي لتحديد قوائم القيم في (مثل معدّلات أخذ العيّنات، وأقنعة القنوات، والعلامات)، بدلاً من , (فاصلة) و| (شريط عمودي) مستخدمان في V6 والإصدارات الأقدم. كما هو موضح في قسم المثال التالي، يتم استخدام مسافة لتحديد قائمة القيم channelMasks:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

لإجراء تغييرات على الرموز، استخدِم نصًا برمجيًا للتحويل التلقائي باسم update_audio_policy_config.sh انظر الأمر التالي لتحويل V6 ملف إعداد سياسة الصوت إلى إصدار V7 لجهاز Pixel 5 (Redfin):

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

أنواع البيانات

أعدنا تعريف بعض هياكل البيانات في الإصدار 7 لتقليل التكرارات التعريفات. الصفوف المتكررة لعناصر البيانات يتم تجميعها معًا في صورة قابلة لإعادة الاستخدام والهياكل. تستخدم هياكل البيانات هذه أحدث ميزات HIDL مثل الاتحادات الآمنة.

على سبيل المثال، في الإصدار 6 والإصدارات الأقدم، يتم استخدام ثلاثة أضعاف <format, sampling rate, channel mask> غالبًا في واجهات HIDL وأنواعها. لإزالة هذا التكرار، في V7، يتم تعريف نوع البيانات AudioConfigBaseوأنواع البيانات الأخرى على النحو التالي:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    مُستخدَمة من قِبل AudioConfig وAudioOffloadInfo وAudioPortConfig

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    لاستبدال المجموعات غير القابلة للتعديل في AudioPort/PortConfig

  • AudioPortExtendedInfo := device | mix | session

    يحل محل النقابات في AudioPort/PortConfig

علامات المورّدين

بالإضافة إلى أنواع الأجهزة والتنسيقات، يمكن للمورّدين إضافة علامات مخصّصة للصوت البيانات الوصفية للمقطع الصوتي.

لتشغيل البيانات الوصفية للمقاطع الصوتية وتسجيلها، يمكن للمورّدين تمرير علاماتهم الخاصة التي تُستخدم لإضافة سمات إلى عمليات بث إدخال/إخراج الصوت، من التطبيقات إلى طبقة تجريد الأجهزة (HAL).

تتم إضافة علامات المورّدين للبيانات الوصفية لمقطع التشغيل كما هو موضح في ما يلي مثال:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

يتم تنفيذ بنية RecordTrackMetadata بطريقة مماثلة من قِبل إضافة علامات خاصة بالبيانات الوصفية لمسار التسجيل.

تحديد مسافات أسماء إضافات المورّدين

بدءًا من HAL V7، تتطلب إضافات المورّدين بادئة {vendor} إضافية. وهو غير مطلوب في الإصدار 6 من نظام التشغيل. ولكي تكون البادئة {vendor} صالحة، يجب أن تكون: ثلاثة أحرف أبجدية رقمية أو أكثر.

استخدِم التنسيق التالي في V7:

VX_{vendor}_{letters/numbers}

في ما يلي بعض الأمثلة على إضافات V7 الصالحة من المورّدين:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

معلومات الإصدار

يسرد الجدول التالي رقم إصدار HAL لكل إصدار من إصدارات Android:

إصدار Android إصدار HIDL HAL
Android 13 7.1
Android 12 7
Android 11 6.0
Android 10 5
الإصدار 9 من نظام التشغيل Android 4.0
الإصدار 8 من نظام التشغيل Android 2.0