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

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

הטמעת עזר

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

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

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

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

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

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

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

הטמעה

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

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

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

  • android.scaler.availableRecommendedStreamConfigurations: קבוצת המשנה המומלצת של הגדרות הסטרימינג לתרחישי שימוש ספציפיים. ההצהרה כוללת קובצי bitmap שמציינים את תרחישי השימוש המוצעים, בפורמט [1 << PREVIEW | 1 << RECORD..]. תרחישים לדוגמה מוסיפים רשומה נוספת לקבוצת הערכים (tuple) הרגילה (format, width, height, input). אסור להשתמש בתרחישים ציבוריים קיימים, או בביטים אחרים שהוגדרו בטווח [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.

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

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

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

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

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

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

אימות

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

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

החל מגרסה 15 של Android, פלטפורמת Android מספקת API לשליחת שאילתות לגבי שילובי תכונות. ה-API הזה מאפשר ללקוחות המצלמה לשלוח שאילתה אם המכשיר תומך בשילוב מסוים של תכונות. ה-API הזה נחוץ כי ה-API של המצלמה 2 בונה תכונות שונות כמו 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 ו- Camera ITS (CTS Verifier):

VTS

CTS

מצלמת ITS