في الإصدار 13 من نظام التشغيل Android والإصدارات الأقدم، يتم تحديد واجهة Audio HAL باستخدام HIDL في ملفات HIDL HAL (مع الامتداد .hal
) ومخططات XSD لملفات الإعداد، كما هو موضّح أدناه.
الشكل 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:
الشكل 2. مقارنة بعض التغييرات التي تم إجراؤها على تعداد AudioFormat
راجِع القائمة التالية لمعرفة أنواع التعداد التي تم تحويلها إلى
string
:
AudioChannelMask
AudioContentType
-
AudioDevice
: قابلة للتوسيع من قِبل المورّد -
AudioFormat
: قابلة للتوسيع من قِبل المورّد AudioGainMode
AudioSource
AudioStreamType
AudioUsage
تمرير قيم تعداد السلسلة
تُستخدَم قيم السلسلة لنقل المعلومات كقيم تعدادية عبر حدود واجهة HAL. يستخدم كل من إطار العمل وبرنامج تضمين HAL قيمًا عددية من النوع enum لتنفيذ منطق النشاط التجاري، كما يستخدمان أسلوب التحويل الموضّح في الشكل 3:
الشكل 3. تمرير قيم تعداد السلسلة
على سبيل المثال، لتمرير قيمة نوع تنسيق الصوت من إطار العمل إلى المورّد، اتّبِع الخطوات التالية:
- يتم تحويل قيمة التعداد
AudioFormat
إلى قيمة سلسلة فيlibaudiohal
ويتم تمريرها إلى طبقة تجريد الأجهزة (HAL). - من جهة 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 |