HIDL Audio HAL

ב-Android מגרסה 13 ומטה, ממשק Audio HAL מוגדר באמצעות HIDL בקובצי HIDL HAL (עם התוסף .hal) וגם סכימות XSD עבור קובצי התצורה שמוצגים באופן הבא.

audio_hal (אודיו_הל)

איור 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 אל ספק:

  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 של כל גרסת 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