ב-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
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureIntegrationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/cameraDeviceSetupTest.java
מצלמה ITS
- cts/apps/cameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/cameraITS/tests/scene6/test_session_characteristics_zoom.py