ב-Android Audio, הערך 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, כך שיכולות להיות תוצאות בלתי צפויות אם מתווספים סוגי מכשירי אודיו חדשים שמפורטים ברשימה.בשלב הזה, נדרשים שני סוגים של תיקוני אודיו:
- מיקס לתיקוני מכשיר, להפעלה
- מכשיר לערבוב תיקונים, להקלטה
בעדכונים הבאים, יכול להיות שיהיה צורך בתיקונים נוספים להעברה בין מכשירים.
כשיוצרים תיקון אודיו, אם לא מציינים את ה-handle של התיקון, ה-HAL של האודיו נדרש ליצור handle ייחודי של תיקון שיכול לזהות את תיקון האודיו. אחרת, ה-HAL של האודיו צריך להשתמש במזהה התיקון של האודיו כדי לעדכן את התיקון של האודיו.
אם משתמשים ב-HAL אודיו מדור קודם וב-AOSP HIDL wrapper, צריך להגדיר את גרסת ה-HAL הראשית ל-3.0 ב-HAL אודיו מדור קודם.
כדי להפעיל את תכונת התיקון של האודיו, צריך להגדיר את גרסת ה-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
לניתוב הסטרימינג עלול לגרום לתוצאות לא צפויות כשמוסיפים סוגי מכשירים חדשים של אודיו.
אימות
היצרנים צריכים לעדכן את הטמעות ה-HAL שלהם. אפשר להשתמש ב-VTS ל-HAL של אודיו כדי לאמת שההטמעה פועלת כמצופה. כל הבדיקות מופיעות בקבצי ה-VTS.