ב-Android 13 ובגרסאות קודמות, ממשק Audio HAL מוגדר באמצעות HIDL בקובצי HIDL HAL (עם הסיומת .hal
) ובסכמות XSD של קובצי התצורה, כפי שמתואר בהמשך.
איור 1. ממשק HAL של אודיו.
קובצי תצורה
קובצי תצורה של XML של מדיניות האודיו ואפקטים של האודיו נחשבים לחלק מממשק Audio HIDL HAL. הקבצים האלה חייבים לעמוד בדרישות של הסכימות שלהם, והתאימות מאומתת באמצעות בדיקות VTS.
כחלק מהטמעת ה-HAL של HIDL אודיו, צריך ליצור קובץ תצורה של מדיניות אודיו שמתאר את הטופולוגיה של האודיו. כדי שהמסגרת תוכל להשתמש ביכולות ה-HAL של האודיו, צריך להצהיר עליהן בקובץ audio_policy_configuration.xml
.
Audio HIDL HAL API
בקטע הזה מתוארים ממשקי ה-API של Core, אפקטים ו-Common HAL API ל-HIDL.
Core 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/
) היא מעטפת סביב הטמעת HAL מהתקופה שלפני Treble באמצעות ספריות קודמות משותפות.
הטמעת ברירת המחדל יכולה גם לשמש כחומר עזר כשמטמיעים גרסאות חדשות של אודיו HAL שמקיימות אינטראקציה ישירות עם מנהלי התקנים של ליבה.
אפקטים עם HAL
בטבלה הבאה מפורטים המיקומים של רכיבי HAL שימושיים של Effects באמצעות 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 משותף
ממשק ה-HAL API המשותף באמצעות HIDL מכיל את הרכיבים הבאים:
- ההגדרות (
/hardware/interfaces/audio/common/6.0/types.hal
) שמשותפות על ידי ממשקי ה-API מסוג Core ו-Effective API. - כלי עזר (
/hardware/interfaces/audio/common/all-versions
) שיעזרו לכם לכתוב קוד ב-HIDL API להטמעות, ללקוחות ולבדיקות.
עדכונים ל-Audio HAL V7
יש שינויים משמעותיים בגרסה 7 של Audio HAL ב-Android 12, כפי שמתואר בקטע הזה. Audio HAL V7 מבצע את הפעולות הבאות:
- מאחד את מודלי הנתונים שבהם משתמשים המסגרת ו-HAL.
- מזעור הכפילויות בין סוגי נתונים מסוג HIDL (טיפוסים) לבין סכימת ה-XML שמשמשת להגדרת מדיניות האודיו.
באופן ספציפי, שינויים מבוצעים באזורים הבאים ב-Audio HAL V7:
השינויים האלה מוסברים בפירוט רב יותר בקטעים הרלוונטיים.
ערכים ממוספרים
החל מגרסה 7 של Audio HAL, הסוגים המנויים שמשמשים בקובץ התצורה של מדיניות האודיו מוגדרים רק בסכימה של XSD ולא ב-HIDL.
ב-Audio HAL V6, ערכים של סוגי enum (כמו AudioFormat
) ב-types.hal
מוגדרים גם בסכימת ה-XSD של קובץ התצורה של מדיניות האודיו, וכך נוצרת כפילות. כדי להימנע מכך ב-V7, סוגי ה-enum משתנים ל-string
וכל ערכי המספור האפשריים מפורטים בסכימת XSD במקום זאת.
באיור 2 מוצגת השוואה בין חלק מהשינויים בסוג המניין AudioFormat
בגרסה 7:
איור 2. השוואה בין חלק מהשינויים ב-enum של AudioFormat.
ברשימה הבאה מפורטים סוגי המאפיינים של enum שהומרו ל-string
:
AudioChannelMask
AudioContentType
AudioDevice
: ספק שניתן להרחיבAudioFormat
: ספק שניתן להרחיבAudioGainMode
AudioSource
AudioStreamType
AudioUsage
העברת ערכי 'טיפוסים בני מנייה (enum)'
ערכים של מחרוזות משמשים להעברת מידע כערכים של ספירה מעבר לגבול של ממשק HAL. גם המסגרת וגם מעטפת ה-HAL משתמשות בערכים של Enumeration שלמים להטמעת לוגיקה עסקית, ומשתמשות בגישה להמרה שמתוארת באיור 3:
איור 3. העברת ערכי enum של מחרוזת.
לדוגמה, כדי להעביר ערך של פורמט אודיו מה-framework לספק:
- ערך המאפיין enum של
AudioFormat
מומר לערך מחרוזת ב-libaudiohal
ומוענק ל-HAL. - בצד ה-HAL, מעטפת ברירת המחדל ממירה את המחרוזת לערך enum, שמוענק ל-HAL הקודם.
שינויים בסכימת XML
רשימות מלאות של ערכי enum בהגדרת הסכימה של XML (XSD) מאפשרות לבצע אימות טוב יותר של קובץ ה-XML של הגדרת מדיניות האודיו על ידי VTS. ביצענו שינויים בקובץ התצורה של מדיניות האודיו שמשמש ב-HAL V7 כדי לעמוד בדרישות של 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 ואילך, משתמשים לעיתים קרובות ב-triple של <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}
ריכזנו כאן כמה דוגמאות לתוספי ספקים חוקיים בגרסה 7:
VX_GOOGLE_VR
VX_QCI_AMBIENT_MIC
פרטי הגרסה
בטבלה הבאה מופיע מספר הגרסה של HAL לכל מהדורת Android:
גרסת Android | גרסת HIDL HAL |
---|---|
Android 13 | 7.1 |
12 Android | 7.0 |
Android 11 | 6.0 |
Android 10 | 5.0 |
9 Android | 4.0 |
Android 8 | 2.0 |