ב-Android מגרסה 13 ומטה, ממשק Audio HAL
מוגדר באמצעות HIDL בקובצי HIDL HAL (עם
התוסף .hal
) וגם
סכימות XSD עבור
קובצי התצורה שמוצגים באופן הבא.
איור 1. ממשק אודיו עם HAL.
קובצי תצורה
קובצי תצורת XML של מדיניות אודיו ואפקטים אודיו נחשבים לחלק של ממשק Audio HIDL HAL. הקבצים האלה חייבים להתאים לסכימות שלהם, התאימות מאומתת באמצעות בדיקות VTS.
כחלק מההטמעה של HIDL HAL, צריך ליצור
קובץ תצורה של מדיניות האודיו
שמתארת את הטופולוגיה של האודיו. חובה להצהיר על יכולות אודיו עם HAL ב
את הקובץ audio_policy_configuration.xml
של ה-framework כדי להשתמש בהם.
ממשק API של אודיו HIDL HAL
בקטע הזה מתוארים ממשקי ה-API של Core, אפקטים ו-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 שימושיים:
רכיב Core 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/
)
הוא wrapper במסגרת ההטמעה לפני טרבל HAL באמצעות
ספריות משותפות מדור קודם.
גם הטמעת ברירת המחדל יכולה להיחשב כחומר עזר כאשר
להטמיע גרסאות חדשות של אודיו HAL שמקיימות אינטראקציה עם מנהלי התקנים של ליבה
ישירות.
אפקטים עם HAL
הטבלה הבאה מפרטת את המיקום של רכיבי HAL שימושיים שמשתמשים בהם HIDL:
רכיב HAL של אפקטים | מיקום |
---|---|
הגרסה העדכנית של ה-API | /hardware/interfaces/audio/effect/6.0/
|
סכימת XSD של קובץ תצורת אפקט | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
למידע נוסף, ראה הטמעה לדוגמה של
אפקטים HAL API בכתובת /hardware/interfaces/audio/effect/all-versions/default/
ובקטע Audio אפקטים.
HAL נפוץ
ה-Common HAL API שמשתמש ב-HIDL מכיל את הרכיבים הבאים:
- ההגדרות (
/hardware/interfaces/audio/common/6.0/types.hal
) שותפו על ידי ממשקי ה-API של Core ו-Effective API. - כלי תחזוקה (
/hardware/interfaces/audio/common/all-versions
) ששימשו לעזרה תכנות מול ממשקי API של HIDL להטמעות, ללקוחות ולבדיקות.
עדכונים ל-Audio HAL V7
יש שינויים משמעותיים בגרסה 7 של Audio HAL Android 12 כמו שמתואר בקטע הזה. אודיו HAL V7 מבצע את הפעולות הבאות:
- מאחד המודלים של הנתונים שמשמשים את ה-framework ו-HAL.
- צמצום הכפילויות בין סוגי נתונים HIDL (טיפוסים) לסכימת XML שמשמשת להגדרת מדיניות האודיו.
באופן ספציפי, שינויים מבוצעים באזורים הבאים ב-Audio HAL V7:
השינויים האלה נדון בהרחבה בחלקים המתאימים.
ערכים של ספירה
הפעלה ב-Audio HAL V7, סוגי ספירה שנעשה בהם שימוש בהגדרה של מדיניות האודיו מוגדרים רק בסכימת XSD ולא ב-HIDL.
באודיו 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. גם המסגרת וגם wrapper של HAL משתמש בערכי enum שלמים להטמעת לוגיקה עסקית גישת ההמרות שמתוארת באיור 3:
איור 3. ערכי enum של מחרוזת מועברים.
לדוגמה, כדי להעביר ערך של סוג פורמט אודיו מה-framework אל ספק:
- הערך 'טיפוסים בני מנייה (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 של כל גרסת Android:
גרסת Android | גרסת HIDL HAL |
---|---|
Android 13 | 7.1 |
12 Android | 7.0 |
Android 11 | 6.0 |
10 Android | 5.0 |
9 Android | 4.0 |
8 Android | 2.0 |