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