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

באודיו של אנדרואיד, audio_devices_t משמש לייצוג סוג מכשיר האודיו. הוא נמצא בשימוש נרחב בקוד מקור אודיו כשדה סיביות לסינון או בחירת מכשיר אחד או יותר. לפני אנדרואיד 11, הייתה מגבלה של 30 סוגי מכשירי קלט/פלט שמע, וללא חריצים פנויים להוספת סוגי מכשירי שמע חדשים. הסרנו את המגבלה על מספר סוגי מכשירי השמע כדי לאפשר הוספת סוגי מכשירי שמע חדשים.

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

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

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

דוגמאות ומקור

לפני אנדרואיד 11, היו שני שימושים טיפוסיים בסוגי מכשירי שמע כמסיכות סיביות.

  • שימוש בערך audio_devices_t כדי לייצג התקני שמע מרובים.
  • בדיקה אם הערך audio_devices_t מכיל סוגי התקני שמע מקטגוריה שצוינה.

כדי לייצג סוגי מכשירי שמע מרובים, נעשה שימוש במחלקה בשם DeviceTypeSet ב- /libaudiofoundation/include/media/AudioContainers.h /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 ) areAllOfSameDeviceType (DeviceTypeSet, std::function ) ב- AudioContainers.h כדי לבדוק אם כל סוגי מכשירי האודיו הנתונים הם מאותו סוג.

יישום

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

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

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

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

    לפני אנדרואיד 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 אודיו מדור קודם ובעטיפה של AOSP HIDL, ה-HAL האודיו מדור קודם צריך להגדיר את גרסת ה-HAL הראשית ל-3.0.

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

התאמה אישית

לא ניתן לכבות את התכונה, או להחזיר את מכשיר השמע מחדש במסגרת המאפשרת להוסיף סוגי מכשירי שמע.

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

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

מַתַן תוֹקֵף

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