מאגר של מסגרות מצלמה

נוסף ב-ARCore 1.17.0

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

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

תנאים מוקדמים

האחסון הזמני של תמונות מצלמה מופעל בכל אחד מהתנאים הבאים:

  1. כשהאפליקציה מופעלת, צריך להפעיל את Session.setCameraTextureNames(ids) עם כמה מזהי מרקם.

  2. כשמופעלת אחת או יותר מהתכונות של ARCore שמחייבות אגירת נתונים פנימית. נכון לעכשיו, התכונות הבאות כוללות:

    • תמונות מורחבות
    • פנים מוגדלות
  3. במכשירים מסוימים שנתמכים ב-ARCore שנדרשים בהם אגירת נתונים פנימית כדי לפעול בצורה תקינה.

בודקים אם השהיית הפריימים מופעלת

כדי לבדוק אם במכשיר מסוים ובסשן AR מסוים מופעלת אגירת נתונים של פריימים (נקרא גם 'עיכוב פריימים'), צריך להשתמש בפלט של Logcat של adb:

# Camera frame buffering is turned off when frame delay is zero.
adb logcat | grep 'Update Frame Delay'
… I native  : session.cc:3141 Update Frame Delay to 0 frames.
# Camera frame buffering is turned on when frame count is non-zero.
# Note: The size of the buffer can vary over time.
adb logcat | grep 'Update Frame Delay'
… I native  : session.cc:3141 Update Frame Delay to 6 frames.

… I native  : session.cc:3141 Update Frame Delay to 4 frames.

… I native  : session.cc:3141 Update Frame Delay to 2 frames.

זיכרון

כל עוד פריים של מצלמה שנשמר במאגר נתונים זמני מגדילה את ניצול הזיכרון. לדוגמה, טקסטורה של 1080p צורכת כ-6MB מהזיכרון (המתקבלות על ידי הכפלת רזולוציה של 1,920 x 1,080 ב-3 בייטים של נתוני RGB לכל פיקסל).

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

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

  • צינור עיבוד הנתונים של האפליקציה

  • מודל השרשור של האפליקציות

  • הארכיטקטורה של המעבד (CPU) של המכשיר

  • מערכת התזמון של מערכת ההפעלה

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

הפעלת אחסון זמני

כדי להנחות את ARCore באילו מרקמים להשתמש כדי לאחסן מאגר של פריימים נכנסים של המצלמה, צריך להשתמש ב-Session.setCameraTextureNames(ids) כדי לספק מערך של מזהה מרקם אחד או יותר. הפונקציה הזו מופעלת רק אחרי יצירת הסשן, והיא בדרך כלל מופעלת רק פעם אחת.

במהלך כל קריאה ל-Session.update(), ARCore מחליפה את המרקם הבא בתור ברצף. אם האפליקציה מגדירה רק מזהה מרקם אחד, אותו מרקם יוחלף בכל פעם.

בעזרת Frame.getCameraTextureName() ניתן לקבוע את מזהה המרקם שמשויך למסגרת הנוכחית.