HIDL Audio HAL

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

audio_hal

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

ملفات التكوين

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

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

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

يصف هذا القسم واجهات برمجة التطبيقات الأساسية والتأثيرات وواجهات برمجة تطبيقات HAL الشائعة لـ HIDL.

هال الأساسية

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

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

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

مكون HAL الأساسي موقع
أحدث إصدار من API /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 HALs التي تتفاعل مع برامج تشغيل kernel مباشرةً.

تأثيرات هال

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

تأثيرات عنصر هال موقع
أحدث إصدار من API /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/ وقسم التأثيرات الصوتية .

هال المشتركة

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

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

تحديثات لـ Audio HAL V7

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

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

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

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

التعدادات

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

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

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

audioformat-change

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

راجع القائمة التالية للتعرف على أنواع التعداد التي تم تحويلها إلى 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. لقد أجرينا تغييرات في ملف تكوين سياسة الصوت المستخدم مع HAL V7 ليتوافق مع XSD.

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

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

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

على سبيل المثال، في الإصدار السادس والإصدارات الأقدم، يتم استخدام ثلاثي <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 بطريقة مماثلة عن طريق إضافة علامات خاصة بالبيانات التعريفية لمسار التسجيل.

مساحات أسماء ملحقات البائع

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

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

VX_{ vendor }_{ letters/numbers }

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

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

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

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

نسخة أندرويد نسخة هيدل هال
أندرويد 13 7.1
أندرويد 12 7.0
أندرويد 11 6.0
أندرويد 10 5.0
أندرويد 9 4.0
أندرويد 8 2.0