camera3_callback_ops סימוכין למבנה
#include < camera3.h >
שדות נתונים | |
בָּטֵל(* | process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *result) |
בָּטֵל(* | הודע )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
תיאור מפורט
תיעוד שטח
void(* notify)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
לְהוֹדִיעַ:
התקשרות חוזרת של הודעה אסינכרונית מה-HAL, נפטרה מסיבות שונות. רק למידע שאינו תלוי בלכידת פריים, או שדורשים תזמון ספציפי. הבעלות על מבנה ההודעה נשארת ב-HAL, וההודעה צריכה להיות תקפה רק למשך השיחה הזו.
שרשורים מרובים עשויים לקרוא ל- notify() בו זמנית.
<= CAMERA_DEVICE_API_VERSION_3_1:
ההודעה על תחילת החשיפה עבור בקשה נתונה חייבת להישלח על ידי HAL לפני ביצוע הקריאה הראשונה אל process_capture_result() עבור אותה בקשה.
>= CAMERA_DEVICE_API_VERSION_3_2:
מאגרים שנמסרו למסגרת לא ישוגרו לשכבת האפליקציה עד שתתקבל חותמת זמן של תחילת חשיפה (או חותמת תחילת חשיפה של תמונת קלט עבור בקשת עיבוד מחדש) באמצעות קריאת SHUTTER notify() . מומלץ מאוד לשלוח שיחה זו מוקדם ככל האפשר.
דרישות ביצועים:
זוהי שיחה לא חוסמת. המסגרת תחזיר את השיחה הזו בעוד 5 אלפיות השנייה.
void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *result) |
process_capture_result:
שלח תוצאות מלכידה שהושלמה למסגרת. process_capture_result() עשוי להיות מופעל מספר פעמים על ידי ה-HAL בתגובה לבקשת לכידה אחת. זה מאפשר, למשל, להחזיר את המטא-נתונים והמאגרים ברזולוציה נמוכה בקריאה אחת, ומאגרי JPEG שעובדו לאחר מכן בקריאה מאוחרת יותר, ברגע שהוא זמין. כל קריאה חייבת לכלול את מספר המסגרת של הבקשה שהיא מחזירה מטא נתונים או מאגרים עבורה.
ניתן לכלול רכיב (מאגר או מטא נתונים) של התוצאה השלמה רק בקריאה אחת של process_capture_result. מאגר עבור כל זרם, והמטא נתונים של התוצאה, חייבים להיות מוחזרים על ידי ה-HAL עבור כל בקשה באחת מהקריאות process_capture_result, גם במקרה של שגיאות המייצרות חלק מהפלט. קריאה ל- proces_capture_result() ללא מאגרי פלט או מטא נתונים של תוצאה אינה מותרת.
סדר החזרת המטא נתונים ומאגרים עבור תוצאה בודדת אינו משנה, אך יש להחזיר מאגרים עבור זרם נתון בסדר FIFO. אז המאגר עבור בקשה 5 עבור זרם A חייב להיות תמיד מוחזר לפני המאגר עבור בקשה 6 עבור זרם A. זה חל גם על המטא נתונים של התוצאה; יש להחזיר את המטא נתונים עבור בקשה 5 לפני המטא נתונים עבור בקשה 6.
עם זאת, זרמים שונים אינם תלויים זה בזה, כך שמקובל וצפוי שהמאגר עבור בקשה 5 עבור זרם A עשוי להיות מוחזר לאחר שהמאגר עבור בקשה 6 עבור זרם B הוא. ומקובל שמטא-נתונים של התוצאה עבור בקשה 6 עבור זרם B מוחזרים לפני המאגר עבור בקשה 5 עבור זרם A.
ה-HAL שומר על הבעלות על מבנה התוצאה, שרק צריך להיות תקף כדי לגשת במהלך שיחה זו. המסגרת תעתיק את כל מה שהיא צריכה לפני שהקריאה הזו תחזור.
עדיין אין צורך למלא את מאגרי הפלט; המסגרת תחכה על גדר הסנכרון של שחרור חוצץ הזרם לפני קריאת נתוני המאגר. לכן, שיטה זו צריכה להיקרא על ידי ה-HAL בהקדם האפשרי, גם אם חלק או כל מאגרי הפלט עדיין במילוי. ה-HAL חייב לכלול גדרות סנכרון שחרור חוקיות לכל כניסת מאגר זרם של output_buffers, או -1 אם מאגר הזרם הזה כבר מלא.
אם לא ניתן לבנות את מאגר התוצאות עבור בקשה, ה-HAL צריך להחזיר מאגר מטא נתונים ריק, אך עדיין לספק את מאגרי הפלט ואת גדרות הסנכרון שלהם. בנוסף, יש לקרוא ל-notify() עם הודעת ERROR_RESULT.
אם לא ניתן למלא מאגר פלט, יש להגדיר את שדה המצב שלו ל-STATUS_ERROR. בנוסף, יש לקרוא ל-notify() עם הודעת ERROR_BUFFER.
אם הלכידה כולה נכשלה, עדיין צריך לקרוא לשיטה הזו כדי להחזיר את מאגרי הפלט למסגרת. כל מצבי המאגר צריכים להיות STATUS_ERROR, והמטא נתונים של התוצאה צריכים להיות מאגר ריק. בנוסף, יש לקרוא ל-notify() עם הודעת ERROR_REQUEST. במקרה זה, אין לשלוח הודעות ERROR_RESULT/ERROR_BUFFER בודדות.
דרישות ביצועים:
זוהי שיחה לא חוסמת. המסגרת תחזיר את השיחה הזו בעוד 5 אלפיות השנייה.
זמן האחזור של הצינור (ראה S7 להגדרה) צריך להיות פחות או שווה ל-4 מרווחי פריימים, וחייב להיות קטן או שווה ל-8 מרווחי פריימים.
התיעוד עבור מבנה זה נוצר מהקובץ הבא:
- hardware/libhardware/include/hardware/ camera3.h