באנדרואיד 13 ומטה, ממשק Audio HAL מוגדר באמצעות HIDL בקבצי HIDL HAL (עם סיומת .hal
) וסכימות XSD עבור קבצי התצורה, המוצגים כדלקמן.
איור 1. ממשק Audio HAL.
קבצי תצורה
מדיניות אודיו ואפקטי אודיו קובצי תצורה של XML נחשבים לחלק מממשק Audio HIDL HAL. קבצים אלה חייבים להתאים לסכמות שלהם, וההתאמה מאומתת על ידי בדיקות VTS.
כחלק מיישום האודיו HIDL HAL, עליך ליצור קובץ תצורה של מדיניות אודיו המתאר את טופולוגיית האודיו. יש להצהיר על יכולות HAL של שמע בקובץ audio_policy_configuration.xml
כדי שהמסגרת תשתמש בהן.
אודיו HIDL HAL 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 באמצעות ספריות משותפות מדור קודם. מימוש ברירת המחדל יכול להיחשב גם כהפניה בעת הטמעת גרסאות חדשות של אודיו HALs המקיימות אינטראקציה ישירה עם מנהלי התקנים של ליבה.
אפקטים HAL
הטבלה הבאה מפרטת את המיקום של רכיבי Effects HAL שימושיים באמצעות HIDL:
אפקטים רכיב HAL | מקום |
---|---|
הגרסה האחרונה של API | /hardware/interfaces/audio/effect/6.0/ |
סכימת XSD של קובץ תצורת אפקט | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd |
למידע נוסף, ראה יישום לדוגמה של ה-API של Effects HAL בכתובת /hardware/interfaces/audio/effect/all-versions/default/
ובקטע אפקטי אודיו .
HAL נפוץ
ה-API הנפוץ של HAL המשתמש ב-HIDL מכיל את הדברים הבאים:
- הגדרות (
/hardware/interfaces/audio/common/6.0/types.hal
) משותפות ל-Core and Effect APIs. - כלי עזר (
/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 משווה כמה מהשינויים לסוג AudioFormat
enum ב-V7:
איור 2. השוואה של חלק מהשינויים ב-AudioFormat enum.
עיין ברשימה הבאה עבור סוגי ה-enum שהומרו string
:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: ניתן להרחבה על ידי הספק -
AudioFormat
: הספק ניתן להרחבה -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
העברת ערכי ה-enum של מחרוזת
ערכי מחרוזת משמשים להעברת מידע כערכי ספירה על פני גבול ממשק HAL. הן המסגרת והן עוטפת HAL משתמשות בערכי ה-enum של מספרים שלמים ליישום היגיון עסקי ומשתמשות בגישת ההמרה המתוארת באיור 3 :
איור 3. העברת ערכי ה-enum של מחרוזת.
כדוגמה, כדי להעביר ערך של סוג פורמט אודיו מהמסגרת לספק:
- ערך ה-enum של
AudioFormat
מומר לערך מחרוזת ב-libaudiohal
ומועבר ל-HAL. - בצד HAL, עטיפת ברירת המחדל ממירה את המחרוזת לערך 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 |