תמיכה בכמה מצלמות

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

תמיכה בכמה מצלמות

איור 1. תמיכה בכמה מצלמות

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

דוגמאות ומקורות

יש לפרסם מכשירים עם כמה מצלמות באמצעות יכולת לוגית לכמה מצלמות.

לקוחות המצלמה יכולים לשלוח שאילתה על מזהה המצלמה של המכשירים הפיזיים הספציפיים היא עשויה ליצור ממצלמה לוגית getPhysicalCameraIds() המזהים שמוחזרים כחלק מהתוצאה משמשים לשליטה במכשירים פיזיים. בנפרד, setPhysicalCameraId() אפשר להריץ שאילתות על התוצאות של בקשות ספציפיות כאלה באמצעות הפעלה getPhysicalCameraResults()

בקשות נפרדות למצלמה פיזית עשויות לתמוך רק בחלק מוגבל של . מפתחים יכולים להתקשר כדי לקבל רשימה של הפרמטרים הנתמכים getAvailablePhysicalCameraRequestKeys()

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

הטמעה

רשימת משימות לתמיכה

כדי להוסיף מכשירים לוגיים עם כמה מצלמות בצד עם ממשק HAL:

במכשירים עם Android 9, נדרשת מצלמה תמיכה בהחלפת זרם YUV/RAW לוגי אחד בשידורים פיזיים של בגודל זהה (לא רלוונטי לשידורים בפורמט RAW) ובאותו פורמט משני מכשירים פיזיים מצלמות. האפשרות הזו לא רלוונטית למכשירים עם Android 10.

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

מפת ההגדרה של השידור

למצלמה לוגית, שילובי החובה של הסטרימינג למכשיר המצלמה של רמת חומרה מסוימת זהה לנדרש CameraDevice.createCaptureSession כל השידורים במפת הגדרת השידור חייבים להיות זרמים לוגיים.

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

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

שילוב מובטח של שידורים

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

מתקן מצלמה בחיבור לוגי צריך לפעול בדיוק כמו מצלמה פיזית. בהתאם לרמת החומרה וליכולות שלו. מומלץ קבוצת פיצ'רים זו היא קבוצת-על של מצלמות פיזיות בודדות.

במכשירים עם Android 9, לכל אחד מהם שילוב של סטרימינג, המצלמה הלוגית חייבת לתמוך ב:

  • החלפת YUV_420_888 לוגי אחד או זרם גולמי אחד עם שני שידורים פיזיים של ואותו גודל ופורמט, כל אחד מהם ממצלמה פיזית נפרדת, הגודל והפורמט שנתמכים על ידי המצלמות הפיזיות.

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

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

שיקולי ביצועים ועוצמה

  • ביצועים:

    • הגדרה וסטרימינג של שידורים פיזיים עשויים להאט קצב הצילום של המצלמה הלוגית בגלל אילוצי משאבים.
    • החלת הגדרות המצלמה הפיזית עלולה להאט את קצב הצילום אם המצלמות הבסיסיות משתלבות בקצב פריימים שונה.
  • הספק:

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

התאמה אישית

אתם יכולים להתאים אישית את הטמעת המכשיר בדרכים הבאות.

  • הפלט הממוזג של מצלמת המצלמה הלוגית תלוי לחלוטין ב-HAL יישום בפועל. ההחלטה על האופן שבו נגזרים זרמים לוגיים משולבים המצלמות הפיזיות שקופות לאפליקציה ולמצלמת Android .
  • אפשר לקבל תמיכה בבקשות פיזיות ובתוצאות פיזיות נפרדות. קבוצת הפרמטרים הזמינים בבקשות כאלה גם תלויה לחלוטין בהטמעה הספציפית של ה-HAL.
  • החל מגרסה 10 של Android, תכונת HAL יכולה להפחית את מספר מצלמות שאפליקציה מסוימת יכולה לפתוח ישירות באמצעות בחירה שלא לפרסם את כל מזהי ה-PHYStrial_ID או חלק מהם getCameraIdList אנחנו מתקשרים אל getPhysicalCameraCharacteristics חייב להחזיר לאחר מכן את המאפיינים של המצלמה הפיזית.

אימות

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

שלוש הבדיקות האלה (ITS) מטרגטות מערכות מרובות מצלמות כדי לאפשר מיזוג של תמונות:

הבדיקות בסצנה 1 ובסצנה 4 פועלות עם בדיקת ITS-in-a-box מתקן הבדיקה של test_multi_camera_match טוענת שרמת הבהירות של מרכז התמונות תואם כששתי המצלמות מופעלות. בדיקת test_multi_camera_alignment טוענת שהריווח בין המצלמה, הכיוונים, ופרמטרים של עיוות נטענים כמו שצריך. אם במערכת מרובת המצלמות כולל מצלמת Wide FoV (>90o), נדרשת גרסת rev2 של תיבת ה-ITS.

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

כל התיבות זמינות דרך AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) וגם MYWAY ייצור (www.myway.tw, sales@myway.tw). בנוסף, ניתן לרכוש את תיבת ה-ITS של Rev1 דרך West-Mark (www.west-mark.com, dgoodman@west-mark.com).

שיטות מומלצות

כדי לנצל באופן מלא את התכונות שמופעלות על ידי ריבוי מצלמות, תוך שמירה על תאימות של אפליקציה, צריך לפעול לפי השיטות המומלצות הבאות מכשיר עם כמה מצלמות:

  • (Android 10 ואילך) הסתרת מצלמות משנה פיזיות של getCameraIdList הפעולה הזו מצמצמת את מספר המצלמות שאפשר לפתוח ישירות באמצעות כך שלא יהיה צורך להפעיל לוגיקה מורכבת של בחירת מצלמה.
  • (Android מגרסה 11 ואילך) לרשת לוגית מרובת מצלמות במכשיר שתומך בזום אופטי, הטמעתי את המקודד ANDROID_CONTROL_ZOOM_RATIO API, ושימוש ב-ANDROID_SCALER_CROP_REGION לחיתוך ביחס גובה-רוחב בלבד. ANDROID_CONTROL_ZOOM_RATIO מאפשרת למכשיר להקטין את התצוגה ולשמור על דיוק. במקרה הזה, ערך ה-HAL חייב להתאים את מערכת הקואורדינטות של ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES, וגם ANDROID_STATISTICS_FACE_LANDMARKS לטיפול בהמשך מרחק התצוגה בתור המערך הפעיל של החיישן. לקבלת מידע נוסף על האופן שבו ANDROID_SCALER_CROP_REGION פועל יחד עם ANDROID_CONTROL_ZOOM_RATIO, ראו camera3_crop_reprocess#cropping.
  • עבור מכשירים עם כמה מצלמות עם מצלמות פיזיות עם מצלמות יכולות, יש לוודא שהמכשיר מפרסם תמיכה בערך מסוים או טווח של פקד מסוים, רק אם כל טווח הזום תומך בערך או טווח. לדוגמה, אם המצלמה הלוגית מורכבת ממצלמת Ultrawide, במצלמת טלפוטו, לבצע את הפעולות הבאות:
    • אם גודל המערך הפעיל של המצלמות הפיזיות שונה, היא צריכה לבצע מיפוי מהמערכים הפעילים של המצלמות הפיזיות המערך הפעיל של המצלמה הלוגית עבור ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES, וגם ANDROID_STATISTICS_FACE_LANDMARKS כך שמנקודת המבט של האפליקציה, מערכת הקואורדינטות היא גודל המערך הפעיל של המצלמה הלוגית.
    • אם מצלמת הטלפוטו ורחבה תומכות במיקוד אוטומטי, אבל טכנולוגיית Ultrawide המצלמה מוגדרת למיקוד קבוע, צריך לוודא שהמצלמה הלוגית מפרסמת מיקוד אוטומטי תמיכה. רכיב ה-HAL חייב לדמות מכונה למצב של מיקוד אוטומטי בטכנולוגיית Ultrawide כך שכשהאפליקציה מקטינה את התצוגה לעדשת Ultrawide, שהמצלמה הפיזית שבבסיסה מתמקדת בפוקוס קבוע שקוף לאפליקציה, והמכונות במצב מיקוד אוטומטי במצבי AF הנתמכים פועלים מה מצופה.
    • אם המצלמות לרוחב ומצלמות הטלפוטו תומכות ב-4K @ 60fps, מצלמת Ultrawide תומכת רק ב- 4K @ 30fps או ב-1080p ב- 60 fps, אבל לא 4K @ 60fps, עליך לוודא שהמצלמה הלוגית לא מפרסמת איכות 4k @ 60 fps בהגדרות הסטרימינג הנתמכות. כך ניתן להבטיח תקינות היכולות של המצלמה הלוגית, כדי להבטיח שהאפליקציה לא נתקלים בבעיה שאי אפשר להשיג 4k @ 60fps ANDROID_CONTROL_ZOOM_RATIO קטן מ-1.
  • בוהק מ-Android 10, מערכת לוגית מרובת מצלמות אין צורך לתמוך בשילובים של שידורים שכוללים שידורים חיים. אם תקן HAL תומך בשילוב עם שידורים פיזיים:
    • (Android 11 ואילך) לטיפול טוב יותר בשימוש כגון העומק מסטריאו ומעקב אחר תנועה, יוצרים את שדה הראייה של פלטי הסטרימינג הפיזיות עד כמה שהחומרה יכולה לקבל. עם זאת, אם זרם פיזי וזרם לוגי מגיעים מאותו מקור מצלמה פיזית, מגבלות חומרה עשויות לאלץ את שדה הראייה של כדי שיהיה זהה לזרם הלוגי.
    • כדי להתמודד עם לחץ הזיכרון שנוצר בגלל מספר שידורים פיזיים, לוודא שהאפליקציות משתמשות ב-discardFreeBuffers כדי להקצות את מאגרי הנתונים הזמניים (חוצצים) שמשחררים על ידי הצרכן, אבל עדיין לא הוסרו על ידי המפיק) אם שידור פיזי צפוי להיות ללא פעילות במשך פרק זמן מסוים.
    • אם שידורים פיזיים ממצלמות פיזיות שונות בדרך כלל לא מצורפים לאותה בקשה, צריך לוודא שהאפליקציות משתמשות ב-surface group כך שתור אחד של מאגר נתונים זמני ישמש לגיבוי שני משטחים הפונים לאפליקציות, והפחתת צריכת הזיכרון.