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

ב-Android 10 חדש: תכונות שמאפשרות לקוחות מצלמות כדי לבחור מצלמה אופטימלית סטרימינג לתרחישים ספציפיים, וכדי להבטיח ששילובים מסוימים של מקורות נתונים נתמכות במכשיר המצלמה. הגדרה של מקור נתונים מתייחסת הסטרימינג במצלמה שהוגדר במכשיר המצלמה ושילוב של סטרימינג מתייחס לקבוצת סטרימינג אחת או יותר שהוגדרה במכשיר המצלמה. למידע נוסף על של התכונות האלה, ההגדרות המומלצות של השידורים 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 תומכת ב-API כדי לשלוח שאילתות לגבי שילובים של מקורות נתונים. הטמעה ה-API הזה מאפשר ללקוחות המצלמה להריץ שאילתות בצורה בטוחה על שילובים של שידורי סטרימינג בכל שלב אחרי קבלת כתובת URL תקינה מכשיר מצלמה להסיר את התקורה של אתחול סשן של צילום מצלמה, ייתכן שיהיו מקרים נוספים של חריגות במצלמה, כולל שבירה של המצלמה, ומאפשרת לשלוח שאילתות מהירות יותר.

התכונה הזו גם מאפשרת ללקוחות המצלמה לקבל רשימה של שילובים של שידורים חיים נאספות בהתאם הנחיות עבור CameraDevice ורמת האיכות הנתמכת (HW) הנתמכת. אפשר לאכוף בדיקות CTS את הנכונות של תוצאות שאילתה במידה רבה ככל האפשר, הכוללת קבוצת משנה קטנה של את שילובי מקורות הנתונים הנפוצים ביותר.

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

הטמעה

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

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

  • OK: השאילתה לשילוב של מקור הנתונים הצליחה.
  • METHOD_NOT_SUPPORTED: המצלמה לא תומכת בשידור שאילתה משולבת.
  • INTERNAL_ERROR: לא ניתן להשלים את שאילתת השילוב של מקור הנתונים בגלל שגיאה פנימית.

ה-API מחזיר את הערך True אם שילוב מקורות הנתונים נתמך. אחרת, מחזירה FALSE.

המסגרת משתמשת ב-API הציבורי isSessionConfigurationSupported כדי לבדוק אם המצלמה תומכת בהגדרת הסשן הספציפית במכשיר.

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

אימות

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

מודולים של CTS למצלמה:

VTS של מצלמה:

VtsHalCameraProviderV2_4TargetTest.cpp