ב-Android 13 ובגרסאות קודמות, ממשק Audio HAL מוגדר באמצעות HIDL בקובצי HAL של HIDL (עם התוסף .hal
) ובסכמות XSD של קובצי התצורה, כפי שמתואר בהמשך.
איור 1. ממשק HAL של אודיו.
קובצי תצורה
קובצי תצורה של מדיניות אודיו ואפקטים קוליים בפורמט XML נחשבים לחלק מממשק Audio HIDL HAL. הקבצים האלה חייבים לעמוד בתקנים של הסכימות שלהם, והתאימות מאומתת באמצעות בדיקות VTS.
כחלק מהטמעת ה-HAL של HIDL אודיו, צריך ליצור קובץ תצורה של מדיניות אודיו שמתאר את הטופולוגיה של האודיו. כדי שהמסגרת תוכל להשתמש ביכולות ה-HAL של האודיו, צריך להצהיר עליהן בקובץ audio_policy_configuration.xml
.
Audio HIDL HAL API
בקטע הזה מתוארים ממשקי ה-API של הליבה, ההשפעות וה-HAL המשותף ל-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 באמצעות ספריות קודמות משותפות.
אפשר להשתמש בהטמעת ברירת המחדל גם כמקור מידע כשמטמיעים גרסאות חדשות של Audio HALs שמתקשרות ישירות עם מנהלי הליבה.
Effects 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 ו-Effect. - כלי עזר (
/hardware/interfaces/audio/common/all-versions
) שיעזרו לכם לכתוב קוד ב-HIDL API להטמעות, ללקוחות ולבדיקות.
עדכונים ל-Audio HAL V7
יש שינויים משמעותיים בגרסה 7 של Audio HAL ב-Android 12, כפי שמתואר בקטע הזה. Audio HAL V7 מבצע את הפעולות הבאות:
- מאחד את מודלי הנתונים שבהם משתמשים המסגרת ו-HAL.
- מפחית את הכפילות בין סוגי הנתונים של HIDL (enums) לבין הסכימה של ה-XML המשמשת להגדרת מדיניות האודיו.
באופן ספציפי, השינויים מתבצעים בתחומים הבאים ב-Audio HAL V7:
השינויים האלה מוסברים בפירוט רב יותר בקטעים הרלוונטיים.
ערכים מפורטים
החל מגרסה 7 של Audio HAL, הסוגים המנויים שמשמשים בקובץ התצורה של מדיניות האודיו מוגדרים רק בסכימה של XSD ולא ב-HIDL.
ב-Audio HAL V6, ערכים של סוגי enum (כמו AudioFormat
) ב-types.hal
מוגדרים גם בסכימת ה-XSD של קובץ התצורה של מדיניות האודיו, וכך נוצרת כפילות. כדי למנוע זאת בגרסה 7, סוגי המניין השתנו ל-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 של מחרוזת.
לדוגמה, כדי להעביר ערך של סוג פורמט אודיו מהמסגרת לספק:
- ערך המאפיין 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
. כדי להמיר קובץ תצורה של מדיניות אודיו בגרסה 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 ואילך, משתמשים לעיתים קרובות ב-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 |
Android 9 | 4.0 |
Android 8 | 2.0 |