HIDL صوتی HAL

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

audio_hal

شکل 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 مقایسه می کند:

audioformat-change

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

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

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : فروشنده قابل توسعه است
  • AudioFormat : فروشنده قابل توسعه است
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

مقادیر enum رشته را پاس کنید

مقادیر رشته برای انتقال اطلاعات به عنوان مقادیر شمارش در مرز رابط HAL استفاده می شود. هم چارچوب و هم بسته بندی HAL از مقادیر عدد صحیح برای پیاده سازی منطق تجاری استفاده می کنند و از رویکرد تبدیل نشان داده شده در شکل 3 استفاده می کنند:

audio-passing-values

شکل 3. ارسال مقادیر enum رشته.

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

  1. مقدار enum AudioFormat به یک مقدار رشته در libaudiohal تبدیل می شود و به HAL ارسال می شود.
  2. در سمت 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