עזרה בנושא המבנה camera3_stream
#include <
camera3.h
>
שדות נתונים |
|
int | stream_type |
uint32_t | width |
uint32_t | height |
int | format |
uint32_t | שימוש |
uint32_t | max_buffers |
void * | priv |
android_dataspace_t | data_space |
int | rotation |
void * | reserved [7] |
תיאור מפורט
camera3_stream_t:
ידית של מקור קלט או פלט יחיד של מצלמה. ה-framework מגדיר את הסטרימינג לפי רזולוציית המאגר והפורמט שלו, ובנוסף לפי HAL עם דגלי השימוש של gralloc ומספר המאגרים המקסימלי בזמן אמת.
ה-framework הוא הבעלים של מבני הסטרימינג, אבל הפונקציה configure_streams() מעבירה את ההפניות ל- camera3_stream ל-HAL, והן תקפות עד לסיום הקריאה הראשונה הבאה של configure_streams() ש לא כוללת את ה-camera3_stream כארגומנטים, או עד לסיום הקריאה של close().
כל המאפיינים של camera3_stream שנשלטים על ידי המסגרת הם בלתי ניתנים לשינוי אחרי שה- camera3_stream מועבר ל-configure_streams(). HAL יכול לשנות את הפרמטרים שנשלטים על ידי HAL רק במהלך קריאה ל-configure_streams(), מלבד התוכן של המצביע הפרטי.
אם קריאה ל-configure_streams() מחזירה שגיאה לא קטלנית, כל המקורות הפעילים יישארו תקפים כאילו לא בוצעה קריאה ל-configure_streams().
נקודת הקצה של הסטרימינג לא גלויה למכשיר ה-HAL של המצלמה. בגרסה DEVICE_API_VERSION_3_1, השדה הזה השתנה כדי לשתף את דגלים של שימוש של צרכנים בשידורים שבהם המצלמה היא יוצרת (סוגי שידורים מסוג OUTPUT ו-BIDIRECTIONAL). אפשר לעיין בשדה השימוש בהמשך.
מסמכי תיעוד של שדה
android_dataspace_t data_space |
שדה שמתאר את התוכן של המאגר הזמני. הפורמט והמאפיינים של מאגר הנתונים מגדירים את הפריסה והמבנה של מאגרי הנתונים של מקור הנתונים, ואילו dataSpace מגדיר את המשמעות של הנתונים במאגר.
ברוב הפורמטים, המאפיין dataSpace מגדיר את מרחב הצבעים של נתוני התמונה. בנוסף, בפורמטים מסוימים, dataSpace מציין אם מתבקש נתון שמבוסס על תמונה או על עומק. פרטים על הפורמטים ועל הערכים התקינים של dataSpace לכל פורמט מופיעים בקובץ system/core/include/system/graphics.h.
פרטי הגרסה:
< CAMERA_DEVICE_API_VERSION_3_3:
לא מוגדר ואין לגשת אליו. צריך להניח ש-dataSpace הוא HAL_DATASPACE_UNKNOWN, ומרחב הצבעים המתאים וכו' צריכים להיקבע לפי דגלי השימוש והפורמט.
= CAMERA_DEVICE_API_VERSION_3_3:
תמיד מוגדרת על ידי שירות המצלמה. HAL חייב להשתמש במרחב הנתונים הזה כדי להגדיר את השידור למרחב הצבעים הנכון, או כדי לבחור בין פלט צבע ופלט עומק, אם יש תמיכה בכך. הערכים של מרחב הנתונים הם ההגדרות הקודמות בקובץ graphics.h
>= CAMERA_DEVICE_API_VERSION_3_4:
תמיד מוגדרת על ידי שירות המצלמה. HAL חייב להשתמש במרחב הנתונים הזה כדי להגדיר את השידור למרחב הצבעים הנכון, או כדי לבחור בין פלט צבע ופלט עומק, אם יש תמיכה בכך. הערכים של מרחב הנתונים מוגדרים באמצעות הגדרות מרחב הנתונים של V0 בקובץ graphics.h
פורמט int |
פורמט הפיקסלים של מאגרי הנתונים בשידור הזה. הפורמט הוא ערך מהרשימה HAL_PIXEL_FORMAT_* בקובץ system/core/include/system/graphics.h, או מהכותרות הספציפיות למכשיר.
אם משתמשים ב-HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, מודול gralloc של הפלטפורמה יבחר פורמט על סמך דגלים של שימוש שסופקו על ידי מכשיר המצלמה ונקודת הקצה השנייה של הסטרימינג.
<= CAMERA_DEVICE_API_VERSION_3_1:
אם יש צורך, מכשיר ה-HAL של המצלמה צריך לבדוק את המאגרים שהועברו אליו בקריאה הבאה של register_stream_buffers() כדי לקבל את פרטי הפורמט הספציפיים להטמעה.
>= CAMERA_DEVICE_API_VERSION_3_2:
המערכת לא תבצע קריאה ל-register_stream_buffers(), ולכן ה-HAL צריך להגדיר את צינור עיבוד הנתונים של ה-ISP והחיישן על סמך הגדלים, דגלי השימוש והפורמטים של הזרמים שהוגדרו.
uint32_t height |
uint32_t max_buffers |
void* priv |
רוטציית int |
סיבוב הפלט הנדרש של הסטרימינג, אחד מהערכים של camera3_stream_rotation_t. HAL צריך לבדוק את זה יחד עם רוחב ועומק הזרם. לדוגמה, אם הזווית של הסיבוב היא 90 מעלות והרוחב והגובה של הסטרימינג הם 720 ו-1,280 בהתאמה, שירות המצלמה יספק מאגרים בגודל 720x1,280, ו-HAL צריך לצלם תמונה בגודל 1,280x720 ולסובב את התמונה ב-90 מעלות נגד כיוון השעון. שדה הסיבוב לא פועל כשסוג הסטרימינג הוא קלט. Camera HAL חייב להתעלם משדה הסיבוב של מקור קלט.
<= CAMERA_DEVICE_API_VERSION_3_2:
לא מוגדר ואי אפשר לגשת אליו. אסור ל-HAL להחיל סיבוב על תמונות הפלט.
>= CAMERA_DEVICE_API_VERSION_3_3:
תמיד מוגדר על ידי שירות המצלמה. HAL חייב לבדוק את השדה הזה במהלך הגדרת הסטרימינג, ולהחזיר את הערך -EINVAL אם HAL לא יכול לבצע רוטציה כזו. HAL תמיד חייב לתמוך ב-CAMERA3_STREAM_ROTATION_0, כך שקריאה ל-configure_streams() לא יכולה להיכשל בגלל סיבוב לא נתמך אם שדה הסיבוב של כל הזרמים הוא CAMERA3_STREAM_ROTATION_0.
int stream_type |
שימוש ב-uint32_t |
דגלי השימוש של gralloc לזרם הזה, לפי הצורך של HAL. דגלים של שימוש מוגדרים ב- gralloc.h (GRALLOC_USAGE_*), או בכותרות ספציפיות למכשיר.
במקרה של מקורות פלט, אלה דגלי השימוש של הבעלים ב-HAL. במקרה של מקורות קלט, אלה דגלים של שימוש של צרכן ב-HAL. דגלי השימוש מהבעלים ומצרכן הנתונים ישולבו יחד ויועברו למודול HAL של gralloc בפלטפורמה כדי להקצות את מאגרי ה-gralloc לכל שידור.
פרטי הגרסה:
== CAMERA_DEVICE_API_VERSION_3_0:
אין ערך ראשוני מובטח כשהשדה מועבר דרך configure_streams(). HAL לא יכול להשתמש בשדה הזה כקלט, והוא חייב לכתוב בשדה הזה את דגלים השימוש שלו.
>= CAMERA_DEVICE_API_VERSION_3_1:
עבור stream_type OUTPUT ו-BIDIRECTIONAL, כשהערך מועבר דרך configure_streams(), הערך הראשוני שלו הוא דגלים של שימוש של הצרכן. ה-HAL עשוי להשתמש בדגלים האלה של הצרכנים כדי לקבוע את הגדרת הסטרימינג. עבור stream_type INPUT, כשהערך מועבר דרך configure_streams(), הערך הראשוני שלו הוא 0. בכל השידורים שמועברים דרך configure_streams(), HAL חייב לכתוב בשדה הזה את דגלים השימוש שלו.
התיעוד של המבנה הזה נוצר מהקובץ הבא:
- hardware/libhardware/include/hardware/ camera3.h