באודיו ב-Android, audio_devices_t
משמש לייצוג סוג מכשיר האודיו. הוא נמצא בשימוש נרחב בקוד המקור של אודיו כשדה ביטים לסינון או לבחירה של מכשיר אחד או יותר שצוינו. לפני Android 11, הייתה מגבלה של 30 סוגים של מכשירי קלט/פלט אודיו, ולא היו משבצות פנויות להוספה של סוגים חדשים של מכשירי אודיו. הסרנו את המגבלה על מספר הסוגים של מכשירי אודיו כדי לאפשר הוספה של סוגים חדשים של מכשירי אודיו.
כדי להסיר את המגבלה על מספר סוגי מכשירי האודיו, סוגי מכשירי האודיו הם עכשיו ערכים ממוספרים במקום מסכות ביטים.
כל סוגי מכשירי האודיו הקיימים נשארים כמו שהם. עדיין משתמשים ב-AUDIO_DEVICE_BIT_IN
כדי להבחין בין מכשירי קלט או פלט. כשמוסיפים סוגים חדשים של מכשירי אודיו, הם מופיעים כערכים ממוספרים בפערים בין הערכים הקיימים.
יצרני ציוד מקורי לא צריכים להשתמש ב-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, אפשר להשתמש בסוגים של מכשירי אודיו כשדה סיביות. במקרה כזה, נהוג להשתמש בפעולות על ביטים כדי להשוות בין סוגי מכשירים. כשמוסיפים סוגים חדשים של מכשירי אודיו ממוספרים, פעולות הביטים עלולות לגרום לתוצאות לא צפויות. במקום זאת, אפשר להשתמש בפונקציות עזר. אם יש סוג אחד של מכשיר אודיו, אפשר להשוות ישירות בין שני הערכים. כדי לבדוק אם סוג של מכשיר אודיו שייך לקטגוריה מסוימת, אפשר להשתמש בפונקציות העזר ב-
/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
. - מטמיעים את ה-methods
create_audio_patch()
ו-release_audio_patch()
לניתוב במקוםset_parameters
.השיטה
set_parameters
משתמשת בסוגים של מכשירי אודיו כשדה סיביות, ולכן יכולות להיות תוצאות לא צפויות אם יתווספו סוגים חדשים של מכשירי אודיו שנספרו.נכון לעכשיו, יש שני סוגים של תיקוני אודיו שנדרשים:
- מיקס לתיקוני מכשירים, להפעלה
- מכשיר למיקס של תיקונים, להקלטה
בעדכונים הבאים, יכול להיות שיידרשו תיקונים נוספים למכשיר למכשיר.
כשיוצרים תיקון אודיו, אם לא מציינים את ה-handle של התיקון, שכבת ה-HAL של האודיו נדרשת ליצור handle ייחודי של התיקון שיכול לזהות את תיקון האודיו. אחרת, ה-HAL של האודיו צריך להשתמש בנקודת האחיזה שצוינה לתיקון האודיו כדי לעדכן את תיקון האודיו.
אם משתמשים ב-HAL מדור קודם של אודיו וב-wrapper של AOSP HIDL, ה-HAL מדור קודם של אודיו צריך להגדיר את גרסת ה-HAL הראשית ל-3.0.
כדי להפעיל את התכונה של תיקון אודיו, שכבת HAL של האודיו צריכה להגדיר את גרסת ה-HAL הראשית ל-3.0 או לגרסה גבוהה יותר. מידע נוסף זמין במאמר
Device::supportsAudioPatches()
בנושא הטמעת HIDL כברירת מחדל, שזמין גם ב-audio HAL עבור Cuttlefish.
התאמה אישית
אי אפשר להשבית את התכונה או לבטל את השינוי במבנה של מכשיר האודיו במסגרת שמאפשרת להוסיף סוגים של מכשירי אודיו.
כל סוגי מכשירי האודיו שנוספו מאפשרים לייצג סוג מכשיר באמצעות ביט יחיד שמוגדר, כך שהטמעות HAL הנוכחיות עדיין פועלות.
אם נוספים סוגים חדשים של מכשירי אודיו ויצרני ציוד מקורי רוצים להשתמש בהם, הם צריכים לשדרג את ההטמעה של HAL האודיו ולעבור ל-HIDL בגרסה 6.0 ומעלה. חובה לשדרג את גרסת ה-HAL הראשית ל-3.0 ולהטמיע את השיטות create_audio_patch
ו-release_audio_patch
, כי שימוש ב-set_parameters
לניתוב הזרם עלול לגרום לתוצאות בלתי צפויות כשמוסיפים סוגים חדשים של מכשירי אודיו.
אימות
יצרני ציוד מקורי (OEM) צריכים לעדכן את ההטמעות שלהם ב-HAL. אפשר להשתמש ב-VTS עבור Audio HAL כדי לוודא שההטמעה פועלת כמצופה. אפשר למצוא את כל הבדיקות בקבצי VTS.