הפניה ל-Struct של camera_info

הפניה ל-Struct של camera_info

#include < camera_common.h >

שדות נתונים

int  מול
 
int  orientation
 
uint32_t  device_version
 
const camera_metadata_t static_camera_characteristics
 
int  resource_cost
 
char **  conflicting_devices
 
size_t  conflicting_devices_length
 

תיאור מפורט

ההגדרה מופיעה בשורה 161 בקובץ camera_common.h .

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

char** conflicting_devices

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

השדה הזה מיועד לציין שמכשיר המצלמה הזה הוא שילוב של כמה מכשירי מצלמה אחרים, או שיש לו יחסי תלות בחומרה שאוסרים שימוש בו-זמנית. אם אין יחסי תלות, יכול להיות שהשדה הזה יחזיר ערך NULL כדי לציין זאת.

שירות המצלמה לעולם לא יפתח בו-זמנית אף אחד מהמכשירים ברשימה הזו בזמן שמכשיר המצלמה הזה פתוח.

מחרוזות שמשויכות לשדה הזה לא יימחקו על ידי שירות המצלמה, והן חייבות להישאר במכשיר בזמן שהוא מחובר.

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ואילך:

לא תקף. אפשר להניח שהערך הוא NULL. אין לקרוא את השדה הזה.

CAMERA_MODULE_API_VERSION_2_4 ואילך:

תמיד תקף.

ההגדרה מופיעה בשורה 404 בקובץ camera_common.h .

size_t conflicting_devices_length

האורך של המערך שצוין בשדה conflicting_devices.

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ואילך:

לא תקף. אפשר להניח שהערך הוא 0. אין לקרוא את השדה הזה.

CAMERA_MODULE_API_VERSION_2_4 ואילך:

תמיד תקף.

ההגדרה מופיעה בשורה 419 בקובץ camera_common.h .

uint32_t device_version

הערך של camera_device_t.common.version.

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_1_0:

לא תקף. אפשר להניח שהערך הוא CAMERA_DEVICE_API_VERSION_1_0. אין לקרוא את השדה הזה.

CAMERA_MODULE_API_VERSION_2_0 ואילך:

תמיד תקף

ההגדרה מופיעה בשורה 219 בקובץ camera_common.h .

int facing

הכיוון שאליו פונה המצלמה. ההגדרות של כיוון המצלמה מפורטות בקובץ system/core/include/system/camera.h.

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ואילך:

הערך צריך להיות CAMERA_FACING_BACK או CAMERA_FACING_FRONT.

CAMERA_MODULE_API_VERSION_2_4 ואילך:

הערך צריך להיות CAMERA_FACING_BACK, ‏ CAMERA_FACING_FRONT או CAMERA_FACING_EXTERNAL.

ההגדרה מופיעה בשורה 177 בקובץ camera_common.h .

int orientation

הכיוון של התמונה במצלמה. הערך הוא הזווית שבה צריך לסובב את התמונה מהמצלמה בכיוון השעון כדי שהיא תוצג בצורה נכונה במסך בכיוון הטבעי שלה. הערך צריך להיות 0, 90, 180 או 270.

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

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ואילך:

תקף בכל הגרסאות של camera_module .

CAMERA_MODULE_API_VERSION_2_4 ואילך:

תקף אם כיוון המצלמה הוא CAMERA_FACING_BACK או CAMERA_FACING_FRONT, לא תקף אם כיוון המצלמה הוא CAMERA_FACING_EXTERNAL.

ההגדרה מופיעה בשורה 202 בקובץ camera_common.h .

int resource_cost

'עלות' המשאב הכולל של השימוש במצלמה הזו, שמוצג כערך שלם בטווח [0, 100], כאשר הערך 100 מייצג את השימוש הכולל במשאב המשותף שהוא צוואר בקבוק המגביל של מערכת המשנה של המצלמה. יכול להיות שמדובר באומדן גס מאוד, והוא משמש כהנחיה לשירות המצלמה כדי לקבוע מתי לא לאפשר לכמה אפליקציות לפתוח בו-זמנית מצלמות שונות שפורסמו על ידי שירות המצלמה.

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

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

השדה הזה ישמש לקביעת אם אפליקציות ברקע מורשות להשתמש במכשיר המצלמה הזה בזמן שאפליקציות אחרות משתמשות במכשירי מצלמה אחרים. הערה: שירות המצלמה לעולם לא יאפשר לכמה אפליקציות לפתוח בו-זמנית את אותו מכשיר מצלמה.

תרחישים לדוגמה:

לדוגמה: 1: מכשיר מצלמה 0 = מצלמה אחורית מכשיר מצלמה 1 = מצלמה קדמית

  • שימוש בשתי המצלמות גורם להאטה משמעותית של קצב הפריימים בגלל רוחב הפס המוגבל של ספק האינטרנט.

הגדרה:

מכשיר מצלמה 0 – resource_cost = 51 conflicting_devices = null מכשיר מצלמה 1 – resource_cost = 51 conflicting_devices = null

תוצאה:

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

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

לדוגמה: 2: מכשיר מצלמה 0 = מצלמה אחורית ימנית, מכשיר מצלמה 1 = מצלמה אחורית ימנית, מכשיר מצלמה 2 = מצלמה סטריאו משולבת שמשתמשת בחיישנים של המצלמה האחורית הימנית והשמאלית שמשמשים את המכשירים 0 ו-1, מכשיר מצלמה 3 = מצלמה קדמית

  • עקב מגבלות חומרה, אפשר לפתוח עד שתי מצלמות בו-זמנית. אסור להשתמש במצלמת הסטריאו המשולבת בו-זמנית עם אף אחד משני המכשירים של המצלמה האחורית (מכשיר 0, ‏ 1), ובדרך כלל נדרש רוחב פס גדול מדי כדי להשתמש בה בו-זמנית עם המצלמה הקדמית (מכשיר 3).

הגדרה:

מכשיר מצלמה 0 – resource_cost = 50 conflicting_devices = { 2 } מכשיר מצלמה 1 – resource_cost = 50 conflicting_devices = { 2 } מכשיר מצלמה 2 – resource_cost = 100 conflicting_devices = { 0, 1 } מכשיר מצלמה 3 – resource_cost = 50 conflicting_devices = null

תוצאה:

על סמך השדות conflicting_devices, שירות המצלמה מבטיח שלעולם לא יתאפשרו הקבוצות הבאות של מכשירים פתוחים: { 1, 2 },‏ { 0, 2 }.

על סמך השדות resource_cost, אם אפליקציה בחזית עם תעדוף גבוה משתמשת במכשיר המצלמה 0, אפליקציה ברקע תהיה רשאית לפתוח את מכשיר המצלמה 1 או 3 (אבל תהיה חייבת לנתק אותו שוב אם אפליקציית החזית פתחה מכשיר אחר).

יכול להיות שהאפליקציה עם העדיפות הגבוהה ביותר תנסה עדיין לפתוח בו-זמנית את המכשירים 0, 2 ו-3, אבל יכול להיות שה-HAL ייכשל בקריאות הפתיחה או ההגדרה של השילוב הזה.

לדוגמה: 3: מכשיר מצלמה 0 = מצלמה אחורית, מכשיר מצלמה 1 = מצלמה קדמית, מכשיר מצלמה 2 = מצלמה קדמית לצריכת אנרגיה נמוכה שמשתמשת באותו חיישן כמו מכשיר 1, אבל חושפת רק רזולוציות של זרם תמונות שאפשר להשתמש בהן במצב צריכת אנרגיה נמוכה

  • אי אפשר להשתמש בשתי המצלמות הקדמיות (מכשיר 1, 2) בו-זמנית בגלל חיישן פיזי משותף. יכול להיות שלא ניתן יהיה להשתמש במצלמה האחורית ובמצלמה הקדמית 'בעוצמה גבוהה' (מכשיר 1) בהגדרות מסוימות של סטרימינג בגלל מגבלות חומרה, אבל תמיד אפשר להשתמש באפשרות של המצלמה הקדמית 'בעוצמה נמוכה' כי יש לה חומרה ייעודית מיוחדת.

    הגדרה:

    מכשיר מצלמה 0 – resource_cost = 100 conflicting_devices = null מכשיר מצלמה 1 – resource_cost = 100 conflicting_devices = { 2 } מכשיר מצלמה 2 – resource_cost = 0 conflicting_devices = { 1 } תוצאה:

    על סמך השדות conflicting_devices, שירות המצלמה מבטיח שלעולם לא יתאפשרו הקבוצות הבאות של מכשירים פתוחים: { 1, 2 }.

    על סמך השדות resource_cost, רק האפליקציה עם העדיפות הגבוהה ביותר יכולה לנסות לפתוח את המכשירים 0 ו-1 בו-זמנית. אם אפליקציה עם עדיפות גבוהה יותר לא משתמשת במכשיר 1 או 2, אפליקציית רקע עם עדיפות נמוכה עשויה לפתוח את מכשיר 2 (אבל היא תאלץ לנתק אותו אם אפליקציה עם עדיפות גבוהה יותר תפתח את מכשיר 1 או 2 לאחר מכן).

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_2_3 ואילך:

לא תקף. אפשר להניח שהערך הוא 100. אין לקרוא את השדה הזה.

CAMERA_MODULE_API_VERSION_2_4 ואילך:

תמיד תקף.

ההגדרה מופיעה בשורה 376 בקובץ camera_common.h .

const camera_metadata_t * static_camera_characteristics

המאפיינים הקבועים של המצלמה, כולל כל המטא-נתונים הסטטיים של המצלמה שצוינו ב-system/media/camera/docs/docs.html. זה צריך להיות מאגר מטא-נתונים ממוין, והמבצע הקורא לא יכול לשנות או לפנות אותו. ההפניה אמורה להישאר תקפה כל עוד מודול המצלמה פועל, ואי אפשר לשנות את הערכים בה אחרי שהיא מוחזרת על ידי get_camera_info().

פרטי הגרסה (על סמך camera_module_t.common.module_api_version):

CAMERA_MODULE_API_VERSION_1_0:

לא תקף. מאפיינים נוספים לא זמינים. אין לקרוא את השדה הזה.

CAMERA_MODULE_API_VERSION_2_0 ואילך:

תקף אם device_version >= CAMERA_DEVICE_API_VERSION_2_0. אין לקרוא אחרת.

ההגדרה מופיעה בשורה 241 בקובץ camera_common.h .


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