מערכת 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 לשאילתות לגבי שילובי תכונות
החל מ-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
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
מבחן התאימות של המצלמה (Camera ITS)