הגדרות של סטרימינג

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

הטמעת קובצי עזר

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

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

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

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

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

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

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

הטמעה

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

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

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

  • android.scaler.availableRecommendedStreamConfigurations: קבוצת משנה מומלצת של הגדרות סטרימינג לתרחישים לדוגמה ספציפיים. משתמשת במפת סיביות (bitmaps) שמשקפת את התרחישים לדוגמה המוצעים בפורמט של [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 FPS.
SNAPSHOT תצורות של תמונת מצב של הסטרימינג חייבות לכלול לפחות הגדרה אחת עם גודל סגור אל android.sensor.info.activeArraySize עם BLOB + שילוב של DATASPACE_JFIF פורמט/מרחב נתונים (JPEG). בהתחשבות הגבלות על יחס גובה-רוחב, התאמה והגבלות אחרות ספציפיות לספק, השטח של הגודל המקסימלי המוצע לא יכול להיות קטן מ-97% מהחיישן של גודל המערך.
ZSL (אם נתמך) אם נתמכות במכשיר המצלמה, ההגדרות המומלצות של מקור הקלט יש לפרסם רק יחד עם פלט אחר מעובד או מושהה פורמטים.
RAW (אם נתמך) אם התכונה נתמכת במכשיר המצלמה, מומלץ להגדיר את הסטרימינג הגולמי חייבת לכלול רק פורמטים של פלט המבוססים על RAW.

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

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

אימות

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

ממשק API לשליחת שאילתות לגבי שילובי פיצ'רים

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

הדרישות

כדי לתמוך ב-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 ועוד בדיקות ITS (CTS Verifier) של המצלמה:

VTS

CTS

מצלמה ITS