‫HIDL Audio HAL

در Android 13 و نسخه‌های پایین‌تر، واسط «لایه انتزاع سخت‌افزار» صوتی بااستفاده از HIDL در فایل‌های HIDL HAL (با پسوند .hal) و طرحواره‌های XSD برای فایل‌های پیکربندی تعریف می‌شود، همان‌گونه که در زیر نشان داده شده است.

audio_hal

شکل ۱. میانای لایه انتزاع سخت‌افزار صوتی.

فایل‌های پیکربندی

فایل‌های پیکربندی XML خط‌مشی صوتی و جلوه‌های صوتی به‌عنوان بخشی از واسط Audio HIDL HAL درنظر گرفته می‌شوند. این فایل‌ها باید با طرح‌واره‌هایشان مطابقت داشته باشند و این مطابقت با آزمایش‌های VTS تأیید می‌شود.

به‌عنوان بخشی از پیاده‌سازی HAL HIDL صوتی، باید فایل پیکربندی خط‌مشی صوتی ایجاد کنید که توپولوژی صوتی را توصیف می‌کند. قابلیت‌های Audio HAL باید در فایل audio_policy_configuration.xml اعلام شود تا چارچوب بتواند از آن‌ها استفاده کند.

Audio HIDL HAL API

این بخش «میاناهای برنامه‌سازی کاربردی لایه انتزاع سخت‌افزار» (HAL) «اصلی»، «جلوه‌ها»، و «مشترک» را برای HIDL شرح می‌دهد.

لایه انتزاع سخت‌افزار اصلی

برخی‌از میاناهای کلیدی Core HAL بااستفاده از HIDL به‌شرح زیر است:

  • ‫IDeviceFactory.hal نقطه ورود به میانای برنامه‌سازی کاربردی است.
  • ‫IDevice.hal و IPrimaryDevice.hal حاوی روش‌هایی مثل setMasterVolume یا openInputStream است.
  • جاری‌سازی‌ها یک‌طرفه هستند و AudioFlinger از آن‌ها برای ارسال یا دریافت صدا به و از HAL ازطریق IStream.hal، IStreamOut.hal، و IStreamIn.hal استفاده می‌کند.

جدول زیر مکان مؤلفه‌های مفید Core HAL HIDL را فهرست می‌کند:

مؤلفه اصلی «لایه انتزاع سخت‌افزار» مکان
جدیدترین نسخه میانای برنامه‌سازی کاربردی /hardware/interfaces/audio/6.0
انواع مختص به جدیدترین «میانای برنامه‌سازی کاربردی لایه انتزاع سخت‌افزار اصلی» /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 بااستفاده از کتابخانه‌های مشترک قدیمی است. پیاده‌سازی پیش‌فرض را می‌توان به‌عنوان مرجع هنگام پیاده‌سازی نسخه‌های جدید Audio 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/ و بخش جلوه‌های صوتی ببینید.

لایه انتزاع سخت‌افزار مشترک

میانای برنامه‌سازی کاربردی Common HAL که از HIDL استفاده می‌کند شامل موارد زیر است:

  • تعاریف (/hardware/interfaces/audio/common/6.0/types.hal) هم‌رسانی‌شده توسط Core و Effect API.
  • از ابزارهای کمکی (/hardware/interfaces/audio/common/all-versions) برای کمک به کدنویسی دربرابر «میاناهای برنامه‌سازی کاربردی HIDL» برای پیاده‌سازی‌ها، مشتریان، و آزمایش‌ها استفاده می‌شود.

به‌روزرسانی‌های Audio HAL V7

همان‌طور که در این بخش توضیح داده شده است، تغییرات قابل‌توجهی در نسخه ۷ از 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 فایل پیکربندی خط‌مشی صوتی تعریف شده‌اند که باعث ایجاد تکرار می‌شود. برای جلوگیری از این در V7، انواع شمارشی به string تغییر کرده است و همه مقادیر شمارشی ممکن در طرحواره XSD فهرست شده است.

شکل ۲ برخی‌از تغییرات نوع شمارشی AudioFormat در نسخه ۷ را مقایسه می‌کند:

تغییر-قالب-صوتی

شکل ۲. مقایسه برخی‌از تغییرات در شمارش AudioFormat.

برای انواع شمارشی که به string تبدیل شده‌اند، به فهرست زیر مراجعه کنید:

  • AudioChannelMask
  • AudioContentType
  • ‫AudioDevice: فروشنده توسعه‌پذیر
  • ‫AudioFormat: فروشنده توسعه‌پذیر
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

مقادیر شمارشی رشته‌ای را ارسال کنید

از مقادیر رشته‌ای برای انتقال اطلاعات به‌عنوان مقادیر شمارشی در مرز میانای HAL استفاده می‌شود. Both the framework and the HAL wrapper use integer enum values for implementing business logic and employ the conversion approach depicted in Figure 3:

ارسال مقادیر صوتی

شکل ۳. ارسال مقادیر شمارشی رشته‌ای.

به‌عنوان مثال، برای ارسال مقدار نوع قالب صوتی از چارچوب به فروشنده:

  1. مقدار enum‏ AudioFormat به مقدار رشته در libaudiohal تبدیل می‌شود و به HAL ارسال می‌شود.
  2. در سمت HAL، بسته‌بندی پیش‌فرض رشته را به مقدار enum تبدیل می‌کند که به HAL قدیمی منتقل می‌شود.

تغییرات طرح‌واره XML

داشتن فهرست‌های کامل از مقادیر enum در تعریف طرح‌واره XML‏ (XSD) امکان اعتبارسنجی بهتر فایل XML پیکربندی خط‌مشی صوتی توسط VTS را فراهم می‌کند. برای مطابقت با XSD، تغییراتی در فایل پیکربندی خط‌مشی صوتی مورداستفاده با HAL V7 ایجاد کردیم.

در نسخه ۷، از نویسه استاندارد ␣ (فاصله) برای محدود کردن فهرست‌های مقدار در مشخصه‌ها (مانند نرخ‌های نمونه‌برداری، ماسک‌های کانال، و پرچم‌ها) استفاده می‌شود، به‌جای نمادهای , (کاما) و | (خط عمودی) که در نسخه ۶ و پایین‌تر استفاده می‌شد. همان‌طور که در مثال زیر دیده می‌شود، از فاصله برای جداسازی فهرست مقادیر برای 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 مثل اجتماع‌های ایمن استفاده می‌کنند.

برای مثال، در V6 و پایین‌تر، سه‌تایی <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} اضافی نیاز دارند که در V6 لازم نیست. برای اینکه پیشوند {vendor} معتبر باشد، باید سه نویسه الفباعددی یا بیشتر داشته باشد.

از قالب زیر در V7 استفاده کنید:

VX_{vendor}_{letters/numbers}

در زیر چند نمونه از افزونه‌های فروشنده V7 معتبر آورده شده است:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

اطلاعات نسخه

جدول زیر شماره نسخه HAL را برای هر نسخه Android فهرست می‌کند:

نسخه Android نسخه HIDL HAL
Android 13 ‫۱-۷
‫Android نسخه ۱۲ ۷.۰
Android 11 ۶.۰
‫Android 10 ۵
Android 9 ۴.۰
‫Android 8 ۲٫۰