מידע על המבנה camera2_device_ops
#include <
camera2.h
>
שדות נתונים |
|
int(* | set_request_queue_src_ops )(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* | notify_request_queue_not_empty )(const struct camera2_device *) |
int(* | set_frame_queue_dst_ops )(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* | get_in_progress_count )(const struct camera2_device *) |
int(* | flush_captures_in_progress )(const struct camera2_device *) |
int(* | construct_default_request )(const struct camera2_device *, int request_template, camera_metadata_t **request) |
int(* | allocate_stream )(const struct camera2_device *, uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers) |
int(* | register_stream_buffers )(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
int(* | release_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | allocate_reprocess_stream )(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
int(* | allocate_reprocess_stream_from_stream )(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id) |
int(* | release_reprocess_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | trigger_action )(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
int(* | set_notify_callback )(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* | get_metadata_vendor_tag_ops )(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* | dump )(const struct camera2_device *, int fd) |
int(* | get_instance_metadata )(const struct camera2_device *, camera_metadata **instance_metadata) |
תיאור מפורט
מסמכי תיעוד של שדה
int(* allocate_reprocess_stream)(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
allocate_reprocess_stream:
הקצאת מקור קלט חדש לשימוש, שמוגדר לפי רוחב, גובה ופורמט הפיקסלים של מאגר הפלט. אם הפונקציה מצליחה, היא מחזירה את המזהה של הסטרימינג החדש, את דגלים השימוש של gralloc ואת מספר המאגרים שאפשר לקבל בו-זמנית. תנאי שגיאה:
- שליחת בקשה לשילוב של רוחב/גובה/פורמט שלא מופיע ברשימת התכונות הסטטיות הנתמכות על ידי החיישן
- בקשה להגדרת יותר מדי מקורות נתונים לעיבוד חוזר בבת אחת.
פרמטרים של קלט:
- width, height, format: מפרט למאגרים ששולחים דרך הסטרימינג הזה. הפורמט חייב להיות ערך מהרשימה HAL_PIXEL_FORMAT_* .
- reprocess_stream_ops: מבנה של מצביע פונקציה לקבלה ולשחרור של מאגרי נתונים זמניים בשידור הזה. מקור הנתונים הבסיסי יוגדר על סמך הפלט של usage ו-max_buffers.
פרמטרים של פלט:
- stream_id: מספר שלם ללא סימן (unsigned) שמזהה את הסטרימינג הזה. הערך הזה משמש בבקשות נכנסות לזיהוי הסטרימינג, ובשחרור הסטרימינג. המזהים האלה ממוספרים בנפרד ממזהי מקורות הקלט.
- consumer_usage: מסכת השימוש ב-gralloc שנדרשת למכשיר ה-HAL כדי לצרוך את סוג הנתונים המבוקש. המערכת משתמשת בו כדי להקצות מאגרי gralloc חדשים לתור מאגרי ה-stream.
- max_buffers: המספר המקסימלי של מאגרי נתונים שיכול להיות שמכשיר ה-HAL יצטרך לקבל בו-זמנית. לא ניתן לאסוף במכשיר יותר מאגרים בו-זמנית מאשר הערך הזה.
int(* allocate_reprocess_stream_from_stream)(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id) |
allocate_reprocess_stream_from_stream:
הקצאה של מקור קלט חדש לשימוש, שישתמש במאגרים שהוקצו למקור פלט קיים. כלומר, אחרי שה-HAL מציב מאגר בתור של מקור הנתונים הפלט, יכול להיות שהוא יראה את אותו מאגר מועבר אליו ממקור הנתונים של עיבוד הקלט מחדש. אחרי שה-HAL משחרר את המאגר חזרה לשידור לעיבוד מחדש, הוא יוחזר לתור הפלט לשימוש חוזר.
תנאי שגיאה:
- שימוש בזרם פלט בפורמט או בגודל לא מתאימים כבסיס לזרם העיבוד מחדש.
- ניסיון להקצות יותר מדי מקורות נתונים לעיבוד חוזר בו-זמנית.
פרמטרים של קלט:
- output_stream_id: המזהה של מקור פלט קיים שיש לו גודל ופורמט שמתאימים לעיבוד מחדש.
- reprocess_stream_ops: מבנה של מצביע פונקציה לקבלה ולשחרור של מאגרי נתונים זמניים בשידור הזה. השידור הבסיסי ישתמש באותם מזהים של מאגרי גרפיקה שבהם משתמש שידור הפלט.
פרמטרים של פלט:
- stream_id: מספר שלם ללא סימן (unsigned) שמזהה את הסטרימינג הזה. הערך הזה משמש בבקשות נכנסות לזיהוי הסטרימינג, ובשחרור הסטרימינג. המזהים האלה ממוספרים בנפרד ממזהי מקורות הקלט.
לקוח HAL תמיד צריך לשחרר את מקור הנתונים לעיבוד מחדש לפני שהוא משחרר את מקור הנתונים של הפלט שעליו הוא מבוסס.
int(* allocate_stream)(const struct camera2_device *,uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *usage, uint32_t *max_buffers) |
allocate_stream:
הקצאת מקור פלט חדש לשימוש, שמוגדר לפי רוחב, גובה, יעד ואפשרות גם פורמט הפיקסלים של מאגר הפלט. אם הפונקציה תצליח, היא תחזיר את המזהה של הסטרימינג החדש, את דגלים לשימוש ב-gralloc, את מספר המינימום של מאגרים בתור ואולי את פורמט הפיקסלים. תנאי שגיאה:
- שליחת בקשה לשילוב של רוחב/גובה/פורמט שלא מופיע ברשימת התכונות הסטטיות הנתמכות על ידי החיישן
- בקשה ליותר מדי סטרימינג מסוג פורמט נתון (לדוגמה, 2 סטרימינג גולמי של Bayer).
פרמטרים של קלט:
- width, height, format: מפרט למאגרים ששולחים דרך הסטרימינג הזה. הפורמט הוא ערך מהרשימה HAL_PIXEL_FORMAT_* . אם משתמשים ב-HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, מודול gralloc של הפלטפורמה יבחר פורמט על סמך דגלים של שימוש שסופקו על ידי HAL של המצלמה ועל ידי צרכן הסטרימינג. אם צריך, HAL המצלמה צריך לבדוק את מאגרי הנתונים (buffers) שהועברו אליו בקריאה register_stream_buffers כדי לקבל את הפורמט הספציפי להטמעה.
- stream_ops: מבנה של מצביע פונקציה לקבלת מאגרי נתונים זמניים ולצירוף אותם לתור עבור השידור הזה. מקור הנתונים הבסיסי יוגדר על סמך הפלט של usage ו-max_buffers. אסור לקרוא לשיטות במבנה הזה עד שהפונקציה allocate_stream מחזירה תשובה.
פרמטרים של פלט:
- stream_id: מספר שלם ללא סימן (unsigned) שמזהה את הסטרימינג הזה. הערך הזה משמש בבקשות נכנסות לזיהוי הסטרימינג, ובשחרור הסטרימינג.
- שימוש: מסכת השימוש של gralloc שנדרשת למכשיר ה-HAL כדי ליצור את סוג הנתונים המבוקש. המערכת משתמשת בו כדי להקצות מאגרי gralloc חדשים לתור מאגרי ה-stream.
- max_buffers: המספר המקסימלי של מאגרים שיכול להיות שיהיה צורך להסיר מהתור של מכשיר ה-HAL בו-זמנית. המכשיר לא יכול להסיר מהתור יותר מאגרים מאשר הערך הזה בו-זמנית.
int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request) |
יצירת בקשת ברירת מחדל שמולאו בה פרטים לתרחישים רגילים של שימוש במצלמה.
המכשיר חייב להחזיר בקשה מלאה שמוגדרת בהתאם לתרחיש לדוגמה המבוקש, והיא חייבת להיות אחת מהרשימות של CAMERA2_TEMPLATE_* . חובה לכלול את כל שדות בקרת הבקשה, מלבד android.request.outputStreams.
צריך להקצות את מאגר המטא-נתונים המוחזר באמצעות allocate_camera_metadata. ה-framework מקבל בעלות על המאגר הזמני.
int(* dump)(const struct camera2_device *, int fd) |
int(* flush_captures_in_progress)(const struct camera2_device *) |
מחיקת כל התמונות והסרטונים שנמצאים בתהליך צילום. הנתונים האלה כוללים את כל הבקשות שהוסרו מהתור (רגילות או לעיבוד חוזר) שעדיין לא הוסיפו פלט לשידור או לתור המסגרות. צריך להשלים את הצילום באופן רגיל אם הוא הושלם חלקית. לא ניתן להסיר בקשות חדשות מתוך תור הבקשות עד שהאחזור יושלם.
int(* get_in_progress_count)(const struct camera2_device *) |
int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata) |
אחזור מטא-נתונים ספציפיים למכונה של המכשיר. המטא-נתונים האלה חייבים להיות קבועים למכונה אחת של מכשיר המצלמה, אבל יכול להיות שהם יהיו שונים בין קריאות ל-open(). ההפניה camera_metadata שהוחזרה צריכה להיות תקפה עד שמפעילים את שיטת close() של המכשיר.
פרטי הגרסה:
CAMERA_DEVICE_API_VERSION_2_0:
הרשת לא זמינה. יכול להיות שהמסגרת לא תהיה מסוגלת לגשת למצביע הפונקציה הזה.
CAMERA_DEVICE_API_VERSION_2_1:
תקין. המערכת יכולה להפעיל את הפונקציה הזו.
int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* notify_request_queue_not_empty)(const struct camera2_device *) |
int(* register_stream_buffers)(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
רישום מאגרים למקור נתונים נתון. הקריאה הזו מתבצעת אחרי קריאה מוצלחת של allocate_stream, ולפני שהבקשה הראשונה שמפנה לסטרימינג מתווספת לתור. השיטה הזו נועדה לאפשר למכשיר ה-HAL למפות את המאגרים או להכין אותם באופן אחר לשימוש מאוחר יותר. מובטח שהערך של num_buffers יהיה לפחות max_buffers (מ-allocate_stream), אבל הוא עשוי להיות גדול יותר. מאגרי הנתונים כבר יהיו נעולים לשימוש. בסיום השיחה, כל המאגרים צריכים להיות מוכנים להחזרה לתור. אם פורמט הסטרימינג הוגדר כ-HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ה-HAL של המצלמה צריך לבדוק את מאגרי הנתונים המועברים כאן כדי לקבוע אם יש מידע על פורמט הפיקסלים שהוא פרטי לפלטפורמה.
int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* release_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
התיעוד של המבנה הזה נוצר מהקובץ הבא:
- hardware/libhardware/include/hardware/ camera2.h