HIDL Audio HAL

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

audio_hal

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

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

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

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

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

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

مكوّن Effects 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 التي تستخدم HIDL على ما يلي:

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

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

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

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

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

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

التعدادات

بدءًا من الإصدار 7 من Audio HAL، يتم تحديد الأنواع المُعدّدة المستخدَمة في ملف Audio Policy Configuration في مخطّط 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 قيمًا عددية من النوع enum لتنفيذ منطق النشاط التجاري، كما يستخدمان أسلوب التحويل الموضّح في الشكل 3:

audio-passing-values

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

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

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