הפנייה למבנה camera3_capture_result

הפנייה למבנה camera3_capture_result

#include < camera3.h >

שדות נתונים

uint32_t מספר מסגרת
const camera_metadata_t * תוֹצָאָה
uint32_t num_output_buffers
const camera3_stream_buffer_t * output_buffers
const camera3_stream_buffer_t * input_buffer
uint32_t תוצאה_חלקית

תיאור מפורט

camera3_capture_result_t:

תוצאה של לכידה/עיבוד מחדש בודד על ידי התקן HAL של המצלמה. זה נשלח למסגרת באופן אסינכרוני עם process_capture_result(), בתגובה לבקשת לכידה בודדת שנשלחה ל-HAL עם process_capture_request(). קריאות process_capture_result() מרובות עשויות להתבצע על ידי ה-HAL עבור כל בקשה.

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

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

>= CAMERA_DEVICE_API_VERSION_3_2:

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

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

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

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

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

הגדרה בשורה 2251 של קובץ camera3.h .

תיעוד שטח

uint32_t frame_number

מספר המסגרת הוא מספר שלם שהולך ומתגבר שנקבע על ידי המסגרת בבקשה שהוגשה לזיהוי ייחודי של לכידה זו. הוא משמש גם לזיהוי הבקשה בהתראות אסינכרוניות שנשלחות אל camera3_callback_ops_t.notify() .

הגדרה בשורה 2258 של קובץ camera3.h .

const camera3_stream_buffer_t * input_buffer

>= CAMERA_DEVICE_API_VERSION_3_2:

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

ה-HAL צריך להתמודד עם גדרות הסנכרון באותו אופן שבו הם נעשים עבור output_buffers.

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

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

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

הגדרה בשורה 2361 של קובץ camera3.h .

uint32_t num_output_buffers

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

הגדרה בשורה 2296 של קובץ camera3.h .

const camera3_stream_buffer_t * output_buffers

האחיזה עבור מאגרי זרם הפלט עבור לכידה זו. ייתכן שהם עדיין לא מולאו בזמן שה-HAL קורא ל-process_capture_result(); המסגרת תחכה לגדרות סנכרון השחרור שסופקו על ידי ה-HAL לפני שתקרא את המאגרים.

ה-HAL חייב להגדיר את גדר סנכרון השחרור של מאגר הזרם ל-fd סנכרון חוקי, או ל-1 אם המאגר כבר התמלא.

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

יש להגדיר את גדר הרכישה ל-1 עבור כל מאגרי הפלט. אם num_output_buffers הוא אפס, זה עשוי להיות NULL. במקרה זה, לפחות עוד קריאת process_capture_result חייבת להתבצע על ידי ה-HAL כדי לספק את מאגרי הפלט.

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

>= CAMERA_DEVICE_API_VERSION_3_2:

ניתן לשלוח מאגרי Gralloc למסגרת למסגרת לפני ה-SHUTTER-notify המתאים.

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

מאגרים שנמסרו למסגרת לא ישוגרו לשכבת האפליקציה עד שתתקבל חותמת זמן של תחילת החשיפה באמצעות קריאת SHUTTER notify() . מומלץ מאוד לשלוח את השיחה בהקדם האפשרי.

הגדרה בשורה 2335 של קובץ camera3.h .

uint32_t partial_result

>= CAMERA_DEVICE_API_VERSION_3_2:

על מנת לנצל תוצאות חלקיות, ה-HAL חייב להגדיר את המטא-נתונים הסטטיים android.request.partialResultCount למספר התוצאות החלקיות שהוא ישלח עבור כל מסגרת.

כל תוצאת לכידה חדשה עם תוצאה חלקית חייבת להגדיר את השדה הזה (partial_result) לערך כולל מובהק בין 1 ל-android.request.partialResultCount.

ל-HALs שאינם רוצים לנצל את התכונה הזו אסור להגדיר android.request.partialResultCount או partial_result לערך שונה מ-1.

יש להגדיר ערך זה ל-0 כאשר תוצאת לכידה מכילה מאגרים בלבד וללא מטא נתונים.

הגדרה בשורה 2381 של קובץ camera3.h .

const camera_metadata_t * תוצאה

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

רק קריאה אחת ל-process_capture_result() עם frame_number נתון עשויה לכלול את המטא נתונים של התוצאה. כל שאר הקריאות לאותו frame_number חייבות להגדיר זאת ל-NULL.

אם הייתה שגיאה בהפקת המטא נתונים של התוצאה, התוצאה חייבת להיות מאגר מטא נתונים ריק, ויש לקרוא ל-notify() עם ERROR_RESULT.

>= CAMERA_DEVICE_API_VERSION_3_2:

קריאות מרובות ל-proces_capture_result() עם frame_number נתון עשויות לכלול את המטא נתונים של התוצאה.

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

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

הגדרה בשורה 2285 של קובץ camera3.h .


התיעוד עבור מבנה זה נוצר מהקובץ הבא:
  • hardware/libhardware/include/hardware/ camera3.h