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

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

audio_hal

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

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

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

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

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

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

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

HAL للتأثيرات

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

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

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

HAL الشائع

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

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

تعديلات على الإصدار 7 من Audio HAL

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

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

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

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

التعدادات

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

في الإصدار 6 من Audio HAL، يتم تحديد قيم أنواع enum (مثل 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، يحوّل الغلاف التلقائي السلسلة إلى قيمة ملف تعريف موارد برمجية ، ويتم تمريرها إلى HAL القديم.

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

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

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

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

لإجراء تغييرات على الرموز، استخدِم نصًا برمجيًا للإحالات الناجحة تلقائيًا يُسمى update_audio_policy_config.sh. اطّلِع على الأمر التالي لتحويل ملف إعدادات سياسة الصوت من الإصدار 6 إلى الإصدار 7 لجهاز 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