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

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

הטמעת עזר

יש הטמעה של הפניה של הבעלים של השירות של מקורות הנתונים המומלצים וה-API לשליחת שאילתות לגבי תכונות שילוב של מקורות נתונים. ההטמעה הזו מופיעה בקובץ QCamera3HWI.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 קובץ snapshot של וידאו חייב לכלול הגדרות של מקור נתונים (stream) שגדולות לפחות כמו הרזולוציות המקסימליות של ההקלטה, ורק בשילוב של הפורמט/מרחב הנתונים BLOB + DATASPACE_JFIF (JPEG). ההגדרות לא אמורות לגרום לבעיות בתצוגה המקדימה, והן אמורות לפעול במהירות 30fps.
SNAPSHOT הגדרות של מקור נתונים של קובץ snapshot חייבות לכלול לפחות מקור אחד בגודל קרוב ל-android.sensor.info.activeArraySize עם השילוב של הפורמט/מרחב הנתונים BLOB + DATASPACE_JFIF (JPEG). בהתחשב במגבלות על יחס גובה-רוחב, עליימות ומגבלות אחרות ספציפיות לספק, האזור של הגודל המוצע המקסימלי לא יכול להיות קטן מ-97% מהאזור של גודל מערך החיישנים.
ZSL (אם יש תמיכה) אם המצלמה תומכת בכך, צריך לפרסם את ההגדרות המומלצות של מקור הנתונים רק יחד עם פורמטים אחרים של פלט שעברו עיבוד או פורמטים של פלט עם השהיה.
RAW (אם יש תמיכה) אם המצלמה תומכת בכך, ההגדרות המומלצות של סטרימינג בפורמט RAW חייבות לכלול רק פורמטים של פלט מבוססי RAW.

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

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

אימות

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

API לשליחת שאילתות לגבי שילובי תכונות

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

הדרישות

כדי לתמוך ב-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