חומר עזר בנושא המבנה camera3_callback_ops

חומר עזר בנושא המבנה camera3_callback_ops

#include < camera3.h >

שדות נתונים

void(*  process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *result)
 
void(*  notify )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg)
 

תיאור מפורט

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

תיעוד השדות

void(* notify)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg)

notify:

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

יכול להיות שכמה תהליכים יקראו ל- notify() בו-זמנית.

‪<= CAMERA_DEVICE_API_VERSION_3_1:

ההתראה על תחילת החשיפה לבקשה נתונה חייבת להישלח על ידי HAL לפני הקריאה הראשונה אל process_capture_result() עבור הבקשה הזו.

>= CAMERA_DEVICE_API_VERSION_3_2:

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


דרישות הביצועים:

זו קריאה לא חוסמת. המסגרת תחזיר את השיחה הזו תוך 5 אלפיות השנייה.

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

‪void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *result)

process_capture_result:

שליחת תוצאות מלוכידה שהושלמה אל המסגרת. process_capture_result() may be invoked multiple times by the HAL in response to a single capture request. לדוגמה, אפשר להחזיר את המטא-נתונים ואת המאגרים ברזולוציה נמוכה בקריאה אחת, ואת מאגרי ה-JPEG שעברו עיבוד בקריאה מאוחרת יותר, ברגע שהם זמינים. כל קריאה חייבת לכלול את מספר הפריימים של הבקשה שעבורה היא מחזירה מטא-נתונים או מאגרי נתונים זמניים.

רכיב (מאגר או מטא-נתונים) של התוצאה המלאה יכול להיכלל רק בקריאה אחת של process_capture_result. ממשק HAL צריך להחזיר מאגר נתונים זמני לכל זרם, ואת המטא נתונים של התוצאה, לכל בקשה באחת מהקריאות של process_capture_result, גם במקרה של שגיאות שמובילות ליצירת חלק מהפלט. אסור לבצע קריאה לשיטה process_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 פריימים או שווה להם.

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


התיעוד של המבנה הזה נוצר מהקובץ הבא: