در اندروید 13 و پایینتر، رابط صوتی HAL با استفاده از HIDL در فایلهای HIDL HAL (با پسوند .hal
) و طرحوارههای XSD برای فایلهای پیکربندی تعریف میشود که به صورت زیر نشان داده شده است.
شکل 1. رابط صوتی HAL.
فایل های پیکربندی
فایل های پیکربندی XML خط مشی صوتی و جلوه های صوتی بخشی از رابط Audio HIDL HAL در نظر گرفته می شوند. این فایلها باید با طرحوارههای خود مطابقت داشته باشند و انطباق با آزمایشهای VTS تأیید میشود.
به عنوان بخشی از اجرای HIDL HAL صوتی، باید یک فایل پیکربندی خط مشی صوتی ایجاد کنید که توپولوژی صوتی را توصیف کند. قابلیت های صوتی HAL باید در فایل audio_policy_configuration.xml
اعلام شود تا چارچوب بتواند از آنها استفاده کند.
Audio HIDL HAL API
این بخش Core، Effects و Common HAL API برای HIDL را توضیح میدهد.
هسته HAL
برخی از رابط های کلیدی 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 HAL که مستقیماً با درایورهای هسته تعامل دارند در نظر گرفته شود.
اثرات HAL
جدول زیر مکان مولفه های مفید Effects HAL را با استفاده از HIDL فهرست می کند:
اثرات جزء HAL | مکان |
---|---|
آخرین نسخه API | /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/
و بخش Audio Effects ببینید.
HAL معمولی
Common HAL API با استفاده از HIDL شامل موارد زیر است:
- تعاریف (
/hardware/interfaces/audio/common/6.0/types.hal
) به اشتراک گذاشته شده توسط Core و Effect API. - ابزارهای کمکی (
/hardware/interfaces/audio/common/all-versions
) برای کمک به کدنویسی در برابر API های HIDL برای پیاده سازی ها، کلاینت ها و آزمایش ها استفاده می شود.
بهروزرسانیهای Audio HAL V7
همانطور که در این بخش توضیح داده شده است، تغییرات قابل توجهی در نسخه 7 Audio HAL در اندروید 12 وجود دارد. Audio HAL V7 کارهای زیر را انجام می دهد:
- مدل های داده استفاده شده توسط چارچوب و HAL را یکسان می کند.
- تکرار بین انواع داده های HIDL (enums) و طرح XML مورد استفاده برای پیکربندی خط مشی صوتی را به حداقل می رساند.
به طور خاص، تغییرات در بخش های زیر در Audio HAL V7 ایجاد می شود:
این تغییرات در بخش های مربوطه با جزئیات بیشتر مورد بحث قرار گرفته است.
شمارش ها
با شروع در Audio HAL V7، انواع برشماری استفاده شده در فایل پیکربندی خط مشی صوتی فقط در طرح XSD و نه در HIDL تعریف شده است.
در Audio HAL V6، مقادیر انواع enum (مانند AudioFormat
) در types.hal
نیز در طرحواره پیکربندی خط مشی صوتی فایل XSD تعریف شده است و یک تکرار ایجاد می کند. برای جلوگیری از این امر در V7، انواع enum به string
تغییر می کنند و به جای آن همه مقادیر شمارش ممکن در طرح XSD فهرست می شوند.
شکل 2 برخی از تغییرات را با نوع Enum AudioFormat
در V7 مقایسه می کند:
شکل 2. مقایسه برخی از تغییرات در AudioFormat enum.
برای انواع enum که به string
تبدیل شده اند به لیست زیر مراجعه کنید:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: فروشنده قابل توسعه است -
AudioFormat
: فروشنده قابل توسعه است -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
مقادیر enum رشته را پاس کنید
مقادیر رشته برای انتقال اطلاعات به عنوان مقادیر شمارش در مرز رابط HAL استفاده می شود. هم چارچوب و هم بسته بندی HAL از مقادیر عدد صحیح برای پیاده سازی منطق تجاری استفاده می کنند و از رویکرد تبدیل نشان داده شده در شکل 3 استفاده می کنند:
شکل 3. ارسال مقادیر enum رشته.
به عنوان مثال، برای ارسال مقداری از نوع فرمت صوتی از فریمورک به فروشنده:
- مقدار enum
AudioFormat
به یک مقدار رشته درlibaudiohal
تبدیل می شود و به HAL ارسال می شود. - در سمت HAL، wrapper پیشفرض رشته را به یک مقدار enum تبدیل میکند که به HAL قدیمی ارسال میشود.
تغییرات طرح واره XML
داشتن لیست کاملی از مقادیر enum در تعریف طرحواره 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
انواع داده ها
ما برخی از ساختارهای داده را در V7 دوباره تعریف کردیم تا تعاریف تکراری را به حداقل برسانیم. چندین اقلام داده مکرر با هم در ساختارهای قابل استفاده مجدد گروه بندی می شوند. این ساختارهای داده از جدیدترین ویژگی های 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 را برای هر نسخه اندروید فهرست می کند:
نسخه اندروید | نسخه HIDL HAL |
---|---|
اندروید 13 | 7.1 |
اندروید 12 | 7.0 |
اندروید 11 | 6.0 |
اندروید 10 | 5.0 |
اندروید 9 | 4.0 |
اندروید 8 | 2.0 |