הגדרות של מקורות נתונים

‫Android כולל תכונות שמאפשרות ללקוחות של המצלמה לבחור את הסטרימינג האופטימלי של המצלמה לתרחישי שימוש ספציפיים, ולוודא ששילובי סטרימינג מסוימים נתמכים על ידי מכשיר המצלמה. הגדרת שידור מתייחסת לשידור ממצלמה אחת שהוגדר במכשיר המצלמה, ושילוב שידורים מתייחס לאחת או יותר קבוצות של שידורים שהוגדרו במכשיר המצלמה. מידע נוסף על התכונות האלה זמין במאמרים בנושא הגדרות מומלצות של הזרמת נתונים וAPI לשאילתות על שילובי תכונות.

הטמעה לדוגמה

יש הטמעה לדוגמה בצד הספק של הזרמים המומלצים להגדרה ושל ה-API להפעלת שאילתות על תכונות של שילוב זרמים. אפשר למצוא את ההטמעה הזו בכתובת QCamera3HWI.cpp.

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

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

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

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

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

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

הטמעה

כדי להטמיע את התכונה הזו, פועלים לפי השלבים הבאים.

רשומות מטא-נתונים

כדי להפעיל את התכונה הזו, Camera HAL צריך לאכלס את רשומות המטא-נתונים הסטטיות הבאות:

  • android.scaler.availableRecommendedStreamConfigurations: קבוצת המשנה המומלצת של הגדרות השידור לתרחישי שימוש ספציפיים. ההצהרה משתמשת במפות סיביות שמציינות את תרחישי השימוש המוצעים בפורמט [1 << PREVIEW | 1 << RECORD..]. תרחישי השימוש מרחיבים את הטופל הרגיל (פורמט, רוחב, גובה, קלט) עם רשומה נוספת. אסור להגדיר ביטים בטווח [PUBLIC_END, VENDOR_START], אלא אם הם משמשים לתרחישי שימוש ציבוריים קיימים.

    המידע הזה מאוחסן בתג המטא-נתונים availableRecommendedStreamConfigurations.

    בדוגמה הבאה מוצגת מערך של הגדרות מומלצות לסטרימינג במצלמה שתומכת רק ברזולוציות 4K ו-1080p. שתי הרזולוציות מועדפות לצילום וידאו, אבל רק 1080p מוצעת לתצוגה מקדימה.

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (זמין רק אם המכשיר תומך בכך): הגדרות מומלצות של זרם נתונים של מרחב עומק שמוצעות למכשיר המצלמה הזה. בדומה לרשומת המטא-נתונים שלמעלה, מפת סיביות של תרחישי שימוש נוספים מציינת את תרחישי השימוש המוצעים.

    המידע הזה מאוחסן בתג המטא-נתונים availableRecommendedInputOutputFormatsMap.

  • android.scaler.availableRecommendedInputOutputFormatsMap (זמין רק אם המכשיר תומך בכך): מיפוי של פורמטים מומלצים של תמונות שמוצעים למכשיר המצלמה הזה עבור זרמי קלט, לפורמטים התואמים של הפלט.

    המידע הזה מאוחסן בתג המטא-נתונים availableRecommendedDepthStreamConfigurations.

המידע הזה זמין ללקוחות המצלמה דרך ממשק RecommendedStreamConfigurationMap API.

תרחישים לדוגמה שחובה להשתמש בהם

צריך לספק הגדרות מומלצות לשידור במקרים הבאים, ולעמוד בדרישות המתאימות:

תרחיש לדוגמה דרישה
PREVIEW תצוגה מקדימה חייבת לכלול רק הגדרות של זרם מעובד שלא נתקע, עם פורמטים של פלט כמו YUV_420_888 ו-IMPLEMENTATION_DEFINED.
RECORD רשומה של סרטון חייבת לכלול הגדרות של סטרימינג שתואמות לפרופילים של מדיה נתמכת שמפורסמים בפורמט IMPLEMENTATION_DEFINED.
VIDEO_SNAPSHOT תמונת מצב לגבי הסרטון חייבת לכלול הגדרות של הזרמת נתונים שהן לפחות בגודל של הרזולוציות המקסימליות של ההקלטה, ורק עם השילוב של פורמט/מרחב נתונים BLOB + DATASPACE_JFIF (JPEG). ההגדרות לא אמורות לגרום לבעיות בתצוגה המקדימה, והן צריכות לאפשר הפעלה ב-30 פריימים לשנייה.
SNAPSHOT ההגדרות של זרם התמונות צריכות לכלול לפחות הגדרה אחת עם גודל שקרוב ל-android.sensor.info.activeArraySize עם שילוב של BLOB + DATASPACE_JFIF (JPEG). בהתחשב במגבלות על יחס גובה-רוחב, יישור ומגבלות אחרות שספציפיות לספק, השטח של הגודל המקסימלי המומלץ לא יכול להיות קטן מ-97% מהשטח של מערך החיישנים.
ZSL (אם נתמך) אם מכשיר המצלמה תומך באפשרות הזו, צריך לפרסם את ההגדרות המומלצות של זרם הקלט רק יחד עם פורמטים אחרים של פלט שעברו עיבוד או שהושהה.
RAW (אם נתמך) אם מכשיר המצלמה תומך בכך, הגדרות מומלצות של שידורי RAW צריכות לכלול רק פורמטים של פלט שמבוססים על RAW.

תרחישים אחרים לדוגמה

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

אימות

כדי לבדוק את ההטמעה של הזרמים המומלצים להגדרות, מריצים את הבדיקות הבאות של CTS ו-VTS:

API to query feature combinations

החל מ-Android 15, פלטפורמת Android מספקת API לשאילתת שילובים של תכונות. ה-API הזה מאפשר ללקוחות המצלמה לבדוק אם המכשיר יכול לתמוך בשילוב מסוים של תכונות. ה-API הזה נחוץ כי מודלים של תכונות שונות כמו 4K, ‏ 60fps,‏ וידאו HDR, ‏ UltraHDR, ‏ זום רחב במיוחד וייצוב, מוגדרים ב-Camera2 API כפקדים אורתוגונליים.

דרישות

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

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

בנוסף, כדי לעמוד בדרישות של סיווג ביצועים של מדיה ברמה 15, המצלמה האחורית הראשית צריכה לתמוך בייצוב של תצוגה מקדימה עם תצוגה מקדימה של HLG10 ב-10 ביט עבור תצוגה מקדימה של ‎1080p ו-‎720p וקובצי JPEG בגודל מקסימלי. פרטים נוספים על הדרישות האלה מופיעים בקטע 2.2.7.2. מצלמה של ה-CDD.

הטמעה

כדי לתמוך ב-API לשאילתות על שילובי תכונות, צריך להטמיע את ממשקי ה-API הבאים לשאילתות על שילובי תכונות בגרסה 3 של ICameraDevice:

  • constructDefaultRequestSettings: יוצר את הגדרות ברירת המחדל לסוג CaptureRequest שצוין. ה-HAL יכול להשתמש בהטמעה של ICameraDeviceSession::constructDefaultRequestSettings.

  • isStreamCombinationWithSettingsSupported: בודק אם המכשיר תומך בשילוב מסוים של סטרימינג מהמצלמה עם פרמטרים של סשן ומפתחות נוספים של CaptureRequest. הפונקציה צריכה להחזיר true לשילובים נתמכים ו-false לשילובים של תכונות שלא נתמכות. שכבת ה-HAL יכולה להשתמש בהטמעה של isStreamCombinationSupported ולהוסיף תמיכה לבדיקת ההגדרות של CaptureRequest שמועברות ב-sessionParams.

  • getSessionCharacteristics: מקבלת שילוב נתמך של מקורות נתונים עם פרמטרים של סשן ומחזירה את המאפיינים הספציפיים לסשן.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: רשימה של כל ההגדרות הנפוצות של הסשן. התצורות האלה מאומתות באמצעות בדיקות תאימות.

בגרסאות שקדמו לגרסה 3 של ממשק ICameraDevice, ה-HAL צריך להטמיע את השיטה isStreamCombinationSupported.

מידע נוסף על שילובי התכונות שנשלחים כשאילתות ל-API זמין במסמכי העזרה בנושא sessionConfigurationQueryVersion ב-system/media/camera/docs/metadata_definitions.xml.

למידע על יישום לדוגמה של התכונה הזו, אפשר לעיין במאמר hardware/google/camera/devices/EmulatedCamera/hwl/.

ממשקי API ציבוריים

אפליקציות יכולות להשתמש בממשקי ה-API הציבוריים הבאים כדי לשלוח שאילתות לגבי שילובי התכונות הנתמכים במכשיר:

  • CameraDevice.CameraDeviceSetup: ייצוג מוגבל של CameraDevice שאפשר להשתמש בו כדי לשלוח שאילתות לגבי שילובי תכונות בלי שנדרש מופע של CameraDevice.

  • getCameraDeviceSetup: מחזירה אובייקט CameraDeviceSetup עבור מזהה מצלמה נתון אם הפונקציה isCameraDeviceSetupSupported מחזירה true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: תומך בשאילתות של שילוב תכונות אם הערך הזה הוא VANILLA_ICE_CREAM או גבוה יותר.

  • OutputConfiguration: מחלקת תיאור של פלט המצלמה, שיכולה להכיל משטח מושהה למטרת שאילתות שילוב של תכונות עם השהיה נמוכה.

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

אימות

כדי לאמת את ההטמעה של התכונה הזו, משתמשים בבדיקות הבאות של VTS,‏ CTS ו-Camera ITS (CTS Verifier):

VTS

CTS

מערכת ITS למצלמות