HIDL Audio HAL, HIDL Audio HAL

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

audio_hal

איור 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:

audioformat-change

איור 2. השוואה של חלק מהשינויים ב-AudioFormat enum.

עיין ברשימה הבאה עבור סוגי ה-enum שהומרו string :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : ניתן להרחבה על ידי הספק
  • AudioFormat : הספק ניתן להרחבה
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

העברת ערכי ה-enum של מחרוזת

ערכי מחרוזת משמשים להעברת מידע כערכי ספירה על פני גבול ממשק HAL. הן המסגרת והן עוטפת HAL משתמשות בערכי ה-enum של מספרים שלמים ליישום היגיון עסקי ומשתמשות בגישת ההמרה המתוארת באיור 3 :

audio-passing-values

איור 3. העברת ערכי ה-enum של מחרוזת.

כדוגמה, כדי להעביר ערך של סוג פורמט אודיו מהמסגרת לספק:

  1. ערך ה-enum של AudioFormat מומר לערך מחרוזת ב- libaudiohal ומועבר ל-HAL.
  2. בצד 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