עזרה בנושא המבנה camera2_request_queue_src_ops
#include <
camera2.h
>
שדות נתונים |
|
int(* | request_count )(const struct camera2_request_queue_src_ops *q) |
int(* | dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
int(* | free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
תיאור מפורט
פרוטוקול של תור בקשות קלט:
המסגרת מכילה את התור ואת התוכן שלו. בהתחלה, התור ריק.
- כשמאגר המטא-נתונים הראשון מועבר לתור, המסגרת שולחת אות למכשיר באמצעות קריאה ל-notify_request_queue_not_empty().
- אחרי קבלת ההודעה notify_request_queue_not_empty, המכשיר צריך להפעיל את dequeue() ברגע שהוא מוכן לטפל במאגר הבא.
- אחרי שהמכשיר מעבד מאגר ומוכן למאגר הבא, הוא צריך לבצע קריאה חוזרת ל-dequeue() במקום להמתין להתראה. אם אין מאגרים זמינים, הפונקציה dequeue() תחזיר את הערך NULL. לאחר מכן, כשמאגר זמין, המסגרת צריכה לקרוא שוב ל-notify_request_queue_not_empty(). אם המכשיר מקבל חזרה NULL מ-dequeue, הוא לא צריך לשלוח שוב שאילתה לתור עד שמתקבלת מהמקור קריאה ל-notify_request_queue_not_empty().
- אם המכשיר קורא לפונקציה buffer_count() ומקבל 0, זה לא אומר שהמסגרת תספק קריאה ל-notify_request_queue_not_empty(). המסגרת תספק התראה כזו רק אחרי שהמכשיר יקבל ערך NULL מ-dequeue, או בהפעלה הראשונית.
- הקריאה dequeue() בתגובה ל-notify_request_queue_not_empty() עשויה להיות באותו שרשור כמו הקריאה notify_request_queue_not_empty(), ועשויה להתבצע מתוך הקריאה notify.
- צריך להחזיר את כל מאגרי הבקשות שהוצאו מהתור למסגרת באמצעות קריאה ל-free_request, כולל במקרים של שגיאות, בקשה לניקוי המכשיר או כשהמכשיר נכבה.
מסמכי תיעוד של שדה
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
אחזור מאגר מטא-נתונים מהמסגרת. הפונקציה מחזירה את הערך OK אם אין שגיאה. אם התור ריק, הפונקציה מחזירה NULL במאגר. במקרה כזה, המכשיר צריך להמתין להודעה notify_request_queue_not_empty() לפני שינסה שוב להסיר את הבקשה מהתור. מאגרים שנוצרים בדרך הזו צריך להחזיר למסגרת באמצעות free_request() .
int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
int(* request_count)(const struct camera2_request_queue_src_ops *q) |
התיעוד של המבנה הזה נוצר מהקובץ הבא:
- hardware/libhardware/include/hardware/ camera2.h