في نظام التشغيل Android 13 والإصدارات الأقدم، يتم استخدام واجهة
باستخدام HIDL في ملفات HIDL HAL (مع
الإضافة .hal
) و
XSD
ملفات التهيئة، كما هو موضح على النحو التالي.
الشكل 1. واجهة HAL الصوتية.
ملفات الإعداد
يتم اعتبار ملفات إعداد XML الخاصة بسياسة الصوت والتأثيرات الصوتية جزءًا. لواجهة Audio HIDL HAL. يجب أن تتوافق هذه الملفات مع مخططاتها في التحقق من التوافق باستخدام اختبارات VTS.
كجزء من تطبيق فلتر HIDL HAL الصوتي، يجب عليك إنشاء
ملف إعداد سياسة الصوت
تصف طوبولوجيا الصوت. يجب الإشارة إلى إمكانات HAL الصوتية في
ملف audio_policy_configuration.xml
لإطار العمل لاستخدامها.
واجهة برمجة تطبيقات Audio HIDL HAL API
يصف هذا القسم واجهات برمجة التطبيقات الأساسية والتأثيرات وHAL API الخاصة ببروتوكول HIDL.
طبقة تجريد الأجهزة (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/
)
هو برنامج تضمين لتنفيذ HAL قبل تريبل باستخدام
المكتبات المشتركة القديمة.
يمكن أيضًا اعتبار عملية التنفيذ التلقائية مرجعًا عندما
تنفيذ إصدارات جديدة من HALs للصوت تتفاعل مع برامج تشغيل النواة
مباشرةً.
طبقة تجريد الأجهزة (HAL) للتأثيرات
يسرد الجدول التالي موقع مكونات HAL المفيدة للتأثيرات باستخدام HIDL:
مكوِّن HAL للتأثيرات | الموقع الجغرافي |
---|---|
أحدث إصدار من واجهة برمجة التطبيقات | /hardware/interfaces/audio/effect/6.0/
|
مخطط XSD لملف إعداد التأثير | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
لمزيد من المعلومات، انظر نموذج تنفيذ
واجهة برمجة تطبيقات HAL للتأثيرات على /hardware/interfaces/audio/effect/all-versions/default/
وقسم التأثيرات الصوتية.
طبقة تجريد الأجهزة (HAL) المشتركة
تحتوي واجهة Common HAL API باستخدام HIDL على ما يلي:
- التعريفات (
/hardware/interfaces/audio/common/6.0/types.hal
) التي تمت مشاركتها من قِبل واجهات برمجة التطبيقات الأساسية والتأثيرات. - استخدام الأدوات المساعدة (
/hardware/interfaces/audio/common/all-versions
) للمساعدة والترميز وفقًا لواجهات برمجة تطبيقات HIDL الخاصة بعمليات التنفيذ والعملاء والاختبارات.
تعديلات على HAL V7 للصوت
هناك تغييرات مهمة في الإصدار 7 من HAL للصوت في Android 12 كما هو موضّح في هذا القسم. يقوم Audio HAL V7 بما يلي:
- توحيد نماذج البيانات المستخدمة في إطار العمل وHAL.
- تقليل التكرار بين أنواع بيانات HIDL (التعدادات) ومخطط XML مستخدمة في تهيئة سياسة الصوت.
على وجه التحديد، يتم إجراء التغييرات في الجوانب التالية في Audio HAL V7:
وستتم مناقشة هذه التغييرات بمزيد من التفصيل في الأقسام المعنيّة.
عمليات التعداد
بدءًا من مستوى الصوت HAL V7، الأنواع العددية المستخدمة في إعدادات سياسة الصوت فقط في مخطط XSD وليس في HIDL.
في Audio HAL V6، تكون قيم أنواع التعداد (مثل AudioFormat
) في types.hal
هي
أيضًا في مخطط XSD لملف إعداد سياسة الصوت، ننشئ
التكرار. لتجنُّب ذلك في V7، يتم تغيير أنواع التعداد إلى string
يتم سرد جميع قيم التعداد المحتملة في مخطط XSD بدلاً من ذلك.
يقارن الشكل 2 بعض التغييرات على نوع التعداد AudioFormat
في V7:
الشكل 2. مقارنة لبعض التغييرات في تعداد تنسيق الصوت
يمكنك الرجوع إلى القائمة التالية للاطّلاع على أنواع التعداد التي تم تحويلها إلى
string
:
AudioChannelMask
AudioContentType
AudioDevice
: مورِّد قابل للتمديدAudioFormat
: مورِّد قابل للتمديدAudioGainMode
AudioSource
AudioStreamType
AudioUsage
تمرير قيم تعداد السلسلة
تُستخدم قيم السلسلة لنقل المعلومات كقيم تعداد عبر لحدود واجهة HAL. كل من إطار العمل يستخدم برنامج تضمين HAL قيم التعداد الصحيحة لتنفيذ منطق الأعمال واستخدام منهج الإحالة الناجحة الموضّح في الشكل 3:
الشكل 3. تمرير قيم تعداد السلسلة.
على سبيل المثال، لتمرير قيمة لنوع تنسيق الصوت من إطار العمل إلى البائع:
- يتم تحويل قيمة التعداد
AudioFormat
إلى قيمة سلسلة فيlibaudiohal
ويتم تمريرها إلى HAL. - على جانب HAL، يحوّل برنامج التضمين التلقائي السلسلة إلى تعداد. التي يتم تمريرها إلى HAL القديم.
تغييرات في مخطط XML
إنّ توفُّر قوائم كاملة بقيم التعداد في تعريف مخطّط XML (XSD) هو لتحسين التحقق من ملف XML الخاص بإعداد سياسة الصوت بواسطة VTS. لقد قطعنا التغييرات في ملف إعداد سياسة الصوت المُستخدَم مع HAL V7 للتوافق مع XSD.
في V7، يُستخدَم حرف ␣
(مسافة) عادي لتحديد قوائم القيم في
(مثل معدّلات أخذ العيّنات، وأقنعة القنوات، والعلامات)، بدلاً من ,
(فاصلة) و|
(شريط عمودي) مستخدمان في 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
أنواع البيانات
أعدنا تعريف بعض هياكل البيانات في الإصدار 7 لتقليل التكرارات التعريفات. الصفوف المتكررة لعناصر البيانات يتم تجميعها معًا في صورة قابلة لإعادة الاستخدام والهياكل. تستخدم هياكل البيانات هذه أحدث ميزات HIDL مثل الاتحادات الآمنة.
على سبيل المثال، في الإصدار 6 والإصدارات الأقدم، يتم استخدام ثلاثة أضعاف <format, sampling rate, channel mask>
غالبًا في واجهات HIDL وأنواعها. لإزالة هذا التكرار، في
V7، يتم تعريف نوع البيانات 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}
إضافية.
وهو غير مطلوب في الإصدار 6 من نظام التشغيل. ولكي تكون البادئة {vendor}
صالحة، يجب أن تكون:
ثلاثة أحرف أبجدية رقمية أو أكثر.
استخدِم التنسيق التالي في V7:
VX_{vendor}_{letters/numbers}
في ما يلي بعض الأمثلة على إضافات V7 الصالحة من المورّدين:
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 |
الإصدار 9 من نظام التشغيل Android | 4.0 |
الإصدار 8 من نظام التشغيل Android | 2.0 |