HIDL Audio HAL

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

audio_hal

الشكل 1: واجهة Audio HAL

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

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

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

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

يصف هذا القسم واجهات برمجة التطبيقات Core وEffects وCommon HAL الخاصة بلغة HIDL.

Core HAL

في ما يلي بعض الواجهات الرئيسية لطبقة تجريد الأجهزة (HAL) الأساسية، باستخدام HIDL:

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

يسرد الجدول التالي موقع المكوّنات المفيدة لواجهة HIDL الخاصة بطبقة تجريد الأجهزة (HAL) الأساسية:

مكوّن 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 السابق لإصدار Treble باستخدام المكتبات المشتركة القديمة. يمكن أيضًا اعتبار عملية التنفيذ التلقائية مرجعًا عند تنفيذ إصدارات جديدة من طبقات تجريد الأجهزة الصوتية (HAL) التي تتفاعل مع برامج تشغيل النواة مباشرةً.

طبقة تجريد الأجهزة الخاصة بالتأثيرات

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

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

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

Common HAL

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

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

تعديلات على الإصدار 7 من طبقة تجريد الأجهزة الصوتية

تتضمّن الإصدار 7 من طبقة تجريد الأجهزة (HAL) الخاصة بالصوت في Android 12 تغييرات مهمة موضّحة في هذا القسم. تنفيذ ما يلي في الإصدار 7 من طبقة تجريد الأجهزة (HAL) الخاصة بالصوت:

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

على وجه التحديد، تم إجراء تغييرات في المجالات التالية في الإصدار 7 من طبقة تجريد الأجهزة الصوتية:

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

التعدادات

بدءًا من الإصدار 7 من طبقة تجريد الأجهزة الصوتية (HAL)، يتم تحديد الأنواع المُعدّدة المستخدَمة في ملف إعدادات سياسة الصوت في مخطّط XSD فقط وليس في HIDL.

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

يقارن الشكل 2 بعض التغييرات التي تم إجراؤها على نوع التعداد AudioFormat في الإصدار 7:

audioformat-change

الشكل 2: مقارنة بين بعض التغييرات التي تم إجراؤها على تعداد AudioFormat

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

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

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

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

audio-passing-values

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

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

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

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

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

في الإصدار 7، يتم استخدام الحرف (مسافة) العادي لتحديد قوائم القيم في السمات (مثل معدّلات أخذ العيّنات وأقنعة القنوات والعلامات)، بدلاً من الرمزين , (فاصلة) و| (خط عمودي) المستخدَمَين في الإصدار 6 والإصدارات الأقدم. كما هو موضّح في المثال التالي، يتم استخدام مسافة للفصل بين القيم في قائمة 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 وأنواعها. لإزالة هذا التكرار، يتم في الإصدار 7 تعريف 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 بطريقة مشابهة من خلال إضافة علامات خاصة ببيانات وصفية لمقطع التسجيل.

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

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

استخدِم التنسيق التالي في الإصدار 7:

VX_{vendor}_{letters/numbers}

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

  • 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.0
Android 9 4.0
‫Android 8 2.0