מידע על המבנה camera2_device_ops

מידע על המבנה 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)
 

תיאור מפורט

ההגדרה מופיעה בשורה 527 בקובץ camera2.h .

מסמכי תיעוד של שדה

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 יצטרך לקבל בו-זמנית. לא ניתן לאסוף במכשיר יותר מאגרים בו-זמנית מאשר הערך הזה.

ההגדרה מופיעה בשורה 708 בקובץ camera2.h .

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 תמיד צריך לשחרר את מקור הנתונים לעיבוד מחדש לפני שהוא משחרר את מקור הנתונים של הפלט שעליו הוא מבוסס.

ההגדרה נמצאת בשורה 754 בקובץ camera2.h .

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 בו-זמנית. המכשיר לא יכול להסיר מהתור יותר מאגרים מאשר הערך הזה בו-זמנית.

ההגדרה מופיעה בשורה 632 בקובץ camera2.h .

int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request)

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

המכשיר חייב להחזיר בקשה מלאה שמוגדרת בהתאם לתרחיש לדוגמה המבוקש, והיא חייבת להיות אחת מהרשימות של CAMERA2_TEMPLATE_* ‎. חובה לכלול את כל שדות בקרת הבקשה, מלבד android.request.outputStreams.

צריך להקצות את מאגר המטא-נתונים המוחזר באמצעות allocate_camera_metadata. ה-framework מקבל בעלות על המאגר הזמני.

ההגדרה מופיעה בשורה 580 בקובץ camera2.h .

int(* dump)(const struct camera2_device *, int fd)

יצירת תמונת מצב של חומרת המצלמה

ההגדרה מופיעה בשורה 801 בקובץ camera2.h .

int(* flush_captures_in_progress)(const struct camera2_device *)

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

ההגדרה מופיעה בשורה 567 בקובץ camera2.h .

int(* get_in_progress_count)(const struct camera2_device *)

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

ההגדרה מופיעה בשורה 558 בקובץ camera2.h .

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:

תקין. המערכת יכולה להפעיל את הפונקציה הזו.

ההגדרה מופיעה בשורה 820 בקובץ camera2.h .

int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops)

שיטות לקבלת מידע על תג המטא-נתונים של תוסף הספק. יכול להגדיר את ops לערך NULL אם לא מוגדרים תגי תוסף של ספקים.

ההגדרה מופיעה בשורה 795 בקובץ camera2.h .

int(* notify_request_queue_not_empty)(const struct camera2_device *)

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

ההגדרה מופיעה בשורה 544 בקובץ camera2.h .

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 של המצלמה צריך לבדוק את מאגרי הנתונים המועברים כאן כדי לקבוע אם יש מידע על פורמט הפיקסלים שהוא פרטי לפלטפורמה.

ההגדרה מופיעה בשורה 657 בקובץ camera2.h .

int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id)

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

ההגדרה מופיעה בשורה 765 בקובץ camera2.h .

int(* release_stream)(const struct camera2_device *, uint32_t stream_id)

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

ההגדרה מופיעה בשורה 667 בקובץ camera2.h .

int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops)

העברה של שיטות ממשק של תור פריימים של פלט

ההגדרה מופיעה בשורה 549 בקובץ camera2.h .

int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user)

הגדרת קריאה חוזרת (callback) להתרעות

ההגדרה מופיעה בשורה 787 בקובץ camera2.h .

int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops)

העברת שיטות של ממשק תור בקשות הקלט.

ההגדרה מופיעה בשורה 536 בקובץ camera2.h .

int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2)

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

ההגדרה מופיעה בשורה 779 בקובץ camera2.h .


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