מגבלת סוגי מכשירים

באודיו של 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 של אודיו.

  1. הסרת כל האחסון של המכשירים בשדה ביט.

    אין להשתמש ב-audio_devices_t כדי לייצג כמה התקני אודיו שונים. במקום זאת, צריך להשתמש ברשימה או בווקטור.

  2. הפסקת השימוש בפעולות ביט להשוואות בין סוגי מכשירים.

    לפני Android 11, אפשר להשתמש בסוגים של התקני אודיו Bitfield. במקרה כזה, לעיתים קרובות מקובל להשתמש בפעולות בביט לסוגי מכשירים והשוואות. כשמוסיפים סוגים חדשים של מכשירי אודיו עם ספירה, פעולות הביט עלולות לגרום מתוצאות בלתי צפויות. במקום זאת, השתמשו בפונקציות מסייעות במקום זאת. אם יש מופע אחד סוג התקן האודיו, ואז להשתמש בהשוואה ישירה כדי להשוות בין שני הערכים. כדי לבדוק אם האודיו סוג המכשיר הוא מקטגוריה מסוימת, יש להשתמש בפונקציות עזר /system/media/audio/include/system/audio.h לדוגמה, audio_is_output_device(audio_devices_t device)

  3. הפסקת השימוש בערכים מוגדרים מראש לקבוצות של סוגי התקני אודיו.

    יש כמה ערכים מוגדרים מראש לקבוצות של סוגי התקני אודיו, AUDIO_DEVICE_OUT_ALL, ב system/media/audio/include/system/audio-base-utils.h. כל הערכים האלה שמורים, אבל ייתכן שהוצאו משימוש כי הם לא יהיו נכונים כשתיצרו ספירה חדשה נוספו סוגים של התקני אודיו. הוגדרו קבוצות חדשות של סוגים של התקני אודיו audio-base-utils.h, שהם מערכים של סוגים של התקני אודיו, כמו AUDIO_DEVICE_OUT_ALL_ARRAY.

  4. יישום של create_audio_patch() ושל release_audio_patch() שיטות לניתוב במקום set_parameters.

    השיטה set_parameters משתמשת בסוגים של מכשירי אודיו בתור שדה ביט, לכן תוצאות לא צפויות אם יתווספו סוגים חדשים של מכשירי אודיו עם ספירה.

    בשלב הזה, נדרשים שני סוגים של תיקונים לאודיו:

    • ערבוב לתיקונים למכשיר, להפעלה
    • מכשיר למיקס תיקונים, להקלטה

    בעדכונים הבאים, יכול להיות שיהיה צורך בתיקונים נוספים ממכשיר למכשיר.

    כשיוצרים תיקון אודיו, אם נקודת האחיזה של התיקון לא שצוין, ה-HAL של האודיו נדרש כדי ליצור נקודת אחיזה ייחודית לתיקון זיהוי תיקון האודיו. אחרת, רכיב ה-HAL של האודיו צריך להשתמש בנקודת האחיזה הנתונה לתיקון אודיו כדי לעדכן את תיקון האודיו.

    אם משתמשים ב-HAL אודיו מדור קודם וב-wrapper של AOSP HIDL, ה-HAL של האודיו הקודם צריך להגדיר את גרסת ה-HAL הראשית ל-3.0.

    כדי להפעיל את תכונת תיקון האודיו, תכונת ה-HAL של האודיו צריכה להגדיר גרסת ה-HAL הראשית ל-3.0 או גבוהה יותר. יש לעיין בDevice::supportsAudioPatches() ב הטמעת HIDL המוגדרת כברירת מחדל לקבלת מידע נוסף, שניתן למצוא גם באודיו HAL לדיונון.

התאמה אישית

אין אפשרות לכבות את התכונה או לבטל את ארגון הקוד מחדש של התקן האודיו שמאפשרת להוסיף סוגים של התקני אודיו.

כל סוגי התקני האודיו שנוספו מאפשרים לייצג סוג מכשיר עם ביט יחיד, כך שהטמעות ה-HAL הנוכחיות עדיין פועלות.

אם מוסיפים סוגים חדשים של מכשירי אודיו ויצרני ה-OEM רוצים להשתמש בהם, צריכים לשדרג את הטמעת ה-HAL של האודיו ולעבור ל-HIDL בגרסה 6.0 ומעלה. זו נדרש כדי לשדרג את גרסת ה-HAL הראשית ל-3.0 וליישם את create_audio_patch ו-release_audio_patch, כי שימוש ב-set_parameters לניתוב הזרם עלול לגרום לתוצאות בלתי צפויות כאשר נוספו סוגים חדשים של התקני אודיו.

אימות

יצרני ציוד מקורי (OEM) צריכים לבצע את העבודה הנדרשת כדי לעדכן את הטמעות ה-HAL שלהם. VTS עבור כדי לוודא שההטמעה פועלת כמצופה, אפשר להשתמש ב-HAL של אודיו. הכול אפשר למצוא את הבדיקות קובצי VTS.