באודיו של Android, הסוג audio_devices_t
משמש לייצוג סוג מכשיר האודיו. הוא נמצא בשימוש נרחב בקוד מקור של אודיו כשדה ביט לסינון או לבחירה של מכשיר אחד או יותר שצוינו. עד Android 11 הייתה מגבלה של 30
סוגי התקני קלט/פלט אודיו, ואין משבצות מיותרות להוספת סוגים חדשים של התקני אודיו. ביצענו
הוסרה המגבלה על מספר הסוגים של התקני אודיו לאפשר
סוגים חדשים של התקני אודיו יתווספו.
כדי להסיר את המגבלה על מספר הסוגים של התקני אודיו, מונה ערכים במקום מסכות ביטים.
כל סוגי מכשירי האודיו הקיימים נשארים כפי שהם. השדה AUDIO_DEVICE_BIT_IN
עדיין משמש להבדיל בין מכשירי קלט או פלט. כשמוסיפים סוגים חדשים של התקני אודיו,
מונה ערכים של הפערים בין הערכים הקיימים.
ליצרני ציוד מקורי (OEM) אסור להשתמש ב-audio_devices_t
כמסכה קטנה, כי זה עלול לגרום
תוצאות לא צפויות כשמוסיפים סוגים חדשים של התקני אודיו עם ספירה.
דוגמאות ומקור
לפני Android 11, היו שני שימושים אופייניים של מכשירי אודיו בתור מסיכות ביט.
- שימוש בערך
audio_devices_t
כדי לייצג כמה התקני אודיו. - המערכת בודקת אם הערך של
audio_devices_t
מכיל סוגים של התקני אודיו מקטגוריה מסוימת.
כדי לייצג כמה סוגים של התקני אודיו, מחלקה בשם DeviceTypeSet
/libaudiofoundation/include/media/AudioContainers.h
נעשה בו שימוש, שהוא קונטיינר std::set
של audio_devices_t
.
המחלקה מוצהרת ברמת הזמינות של הספק
libaudiofoundation
. לייצוג
אודיו מרובים
אפשר להשתמש בסוגי מכשירים בקוד C, במערך או ברשימה של audio_devices_t
.
כדי לבדוק אם סוג מכשיר מסוים שייך לקטגוריה מסוימת, משתמשים בפונקציות העזר audio_is_.*_device
ב-/system/media/audio/include/system/audio.h
.
לסוגים שונים של מכשירי אודיו, צריך להשתמש בפונקציות עזר ב-libaudiofoundation
. עבור
לדוגמה, השתמשו
areAllOfSameDeviceType (DeviceTypeSet, std::function
ב-
AudioContainers.h
כדי לבדוק אם כל הסוגים הנתונים של מכשירי אודיו.
הם מאותו הסוג.
הטמעה
יצרני ציוד מקורי צריכים להסיר את הייצוג של שדה הביטים של סוג מכשיר האודיו מההטמעה של HAL האודיו.
- הסרת כל האחסון של המכשירים בשדה ביט.
אין להשתמש ב-
audio_devices_t
כדי לייצג כמה התקני אודיו שונים. במקום זאת, צריך להשתמש ברשימה או בווקטור. - להפסיק להשתמש בפעולות ביטים להשוואות של סוגי מכשירים.
לפני Android 11, אפשר להשתמש בסוגים של התקני אודיו Bitfield. במקרה כזה, מקובל להשתמש בפעולות ביטים להשוואות בין סוגי מכשירים. כשמוסיפים סוגים חדשים של מכשירי אודיו עם ספירה, פעולות הביט עלולות לגרום מתוצאות בלתי צפויות. במקום זאת, כדאי להשתמש בפונקציות עזר. אם יש מופע אחד סוג התקן האודיו, ואז להשתמש בהשוואה ישירה כדי להשוות בין שני הערכים. כדי לבדוק אם סוג מכשיר האודיו שייך לקטגוריה מסוימת, משתמשים בפונקציות העזר ב-
/system/media/audio/include/system/audio.h
. לדוגמה,audio_is_output_device(audio_devices_t device)
- הפסקת השימוש בערכים מוגדרים מראש לקבוצות של סוגי התקני אודיו.
יש כמה ערכים מוגדרים מראש לקבוצות של סוגי התקני אודיו,
AUDIO_DEVICE_OUT_ALL
, ב:system/media/audio/include/system/audio-base-utils.h
. כל הערכים האלה שמורים, אבל ייתכן שהוצאו משימוש כי הם לא יהיו נכונים כשתיצרו ספירה חדשה נוספו סוגים של התקני אודיו. הוגדרו קבוצות חדשות של סוגים של התקני אודיוaudio-base-utils.h
, שהם מערכים של סוגים של התקני אודיו, כמוAUDIO_DEVICE_OUT_ALL_ARRAY
. - יישום של
create_audio_patch()
ושלrelease_audio_patch()
שיטות לניתוב במקוםset_parameters
.השיטה
set_parameters
משתמשת בסוגי מכשירי אודיו כ-bitfield, כך שיכולות להיות תוצאות בלתי צפויות אם מתווספים סוגי מכשירי אודיו חדשים שמפורטים ברשימה.בשלב הזה, נדרשים שני סוגים של תיקוני אודיו:
- ערבוב לתיקונים למכשיר, להפעלה
- מכשיר לערבוב תיקונים, להקלטה
בעדכונים הבאים, יכול להיות שיידרש תיקון נוסף להעברה בין מכשירים.
כשיוצרים תיקון אודיו, אם נקודת האחיזה של התיקון לא שצוין, ה-HAL של האודיו נדרש כדי ליצור נקודת אחיזה ייחודית לתיקון זיהוי תיקון האודיו. אחרת, רכיב ה-HAL של האודיו צריך להשתמש בנקודת האחיזה הנתונה לתיקון אודיו כדי לעדכן את תיקון האודיו.
אם משתמשים ב-HAL אודיו מדור קודם וב-wrapper של AOSP HIDL, ה-HAL של האודיו הקודם צריך להגדיר את גרסת ה-HAL הראשית ל-3.0.
כדי להפעיל את תכונת התיקון של האודיו, צריך להגדיר את גרסת ה-HAL הראשית של האודיו ל-3.0 ואילך. מידע נוסף זמין ב-
Device::supportsAudioPatches()
בהטמעת HIDL שמוגדרת כברירת מחדל, וגם ב-HAL של האודיו ל-Cuttlefish.
התאמה אישית
אי אפשר להשבית את התכונה או לבטל את הרפורמה של מכשירי האודיו במסגרת שמאפשרת להוסיף סוגים של מכשירי אודיו.
כל סוגי מכשירי האודיו שנוספו מאפשרים לייצג סוג מכשיר באמצעות קבוצת ביט אחת, כך שההטמעות הנוכחיות של HAL עדיין פועלות.
אם יתווספו סוגים חדשים של מכשירי אודיו ו-OEMs ירצו להשתמש בהם, הם יצטרכו לשדרג את הטמעת HAL של האודיו ולעבור ל-HIDL בגרסה 6.0 ואילך. זו
נדרש כדי לשדרג את גרסת ה-HAL הראשית ל-3.0 וליישם את
create_audio_patch
ו-release_audio_patch
, כי
שימוש ב-set_parameters
לניתוב הזרם עלול לגרום לתוצאות בלתי צפויות כאשר
נוספו סוגים חדשים של התקני אודיו.
אימות
יצרני ציוד מקורי (OEM) צריכים לבצע את העבודה הנדרשת כדי לעדכן את הטמעות ה-HAL שלהם. VTS עבור כדי לוודא שההטמעה פועלת כראוי, אפשר להשתמש ב-HAL של אודיו. כל הבדיקות מופיעות בקבצי ה-VTS.