מצבי 3A ומעבר מצב

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

כאשר המכשיר נפתח, כל מצבי 3A הבודדים חייבים להיות STATE_INACTIVE. תצורת הזרם אינה מאפסת את 3A. לדוגמה, יש לשמור על מיקוד נעול על פני הקריאה configure() .

הפעלת פעולת 3A כרוכה פשוט בהגדרת ערך הטריגר הרלוונטי בהגדרות של הבקשה הבאה כדי לציין את התחלת ההפעלה. לדוגמה, הטריגר להתחלת סריקת מיקוד אוטומטי הוא הגדרת הערך ANDROID_CONTROL_AF_TRIGGER ל-ANDROID_CONTROL_AF_TRIGGER_START עבור בקשה אחת; וביטול סריקת מיקוד אוטומטי מופעל על ידי הגדרת ANDROID_CONTROL_AF_TRIGGER ל-ANDROID_CONTRL_AF_TRIGGER_CANCEL. אחרת, הערך לא קיים או יוגדר ל-ANDROID_CONTROL_AF_TRIGGER_IDLE. כל בקשה עם ערך טריגר שהוגדר לערך שאינו IDLE תטופל כאירוע הפעלה עצמאי.

ברמה העליונה, 3A נשלט על ידי ההגדרה ANDROID_CONTROL_MODE. הוא בוחר בין לא 3A (ANDROID_CONTROL_MODE_OFF), מצב אוטומטי רגיל (ANDROID_CONTROL_MODE_AUTO), ושימוש בהגדרת מצב הסצנה (ANDROID_CONTROL_USE_SCENE_MODE):

  • במצב OFF, כל אחד ממצבי הפוקוס האוטומטי (AF), החשיפה האוטומטית (AE) ואיזון הלבן האוטומטי (AWB) אינדיבידואליים כבויים למעשה, ואף אחד מבקרי הצילום לא יעבור על ידי שגרות 3A.
  • במצב AUTO, מצבי AF, AE ו-AWB כולם מריצים אלגוריתמים עצמאיים משלהם, ויש להם מצב, מצב וערכי מטא נתונים משלהם, כפי שמופיע בסעיף הבא.
  • ב-USE_SCENE_MODE, יש להשתמש בערך של הערך ANDROID_CONTROL_SCENE_MODE כדי לקבוע את ההתנהגות של שגרות 3A. במצבי SCENE_MODE שאינם FACE_PRIORITY, ה-HAL חייב לעקוף את הערכים של ANDROID_CONTROL_AE/AWB/AF_MODE כדי להיות המצב שהוא מעדיף עבור ה-SCENE_MODE שנבחר. לדוגמה, ה-HAL עשוי להעדיף את SCENE_MODE_NIGHT כדי להשתמש במצב CONTINUOUS_FOCUS AF. יש להתעלם מכל בחירת משתמש של AE/AWB/AF_MODE כאשר סצנה עבור מצבי סצנה אלו.
  • עבור SCENE_MODE_FACE_PRIORITY, בקרות ה-AE/AWB/AFMODE פועלות כמו ב-ANDROID_CONTROL_MODE_AUTO, אך שגרות 3A חייבות להטות לכיוון מדידה והתמקדות בכל הפנים שזוהו בסצינה.

הגדרות מיקוד אוטומטי וערכים של תוצאות

ערכי מטא נתונים עיקריים
ANDROID_CONTROL_AF_MODE בקרה לבחירת מצב המיקוד האוטומטי הנוכחי. מוגדר על ידי המסגרת בהגדרות הבקשה.
AF_MODE_OFF AF מושבת; המסגרת/אפליקציה שולטת ישירות במיקום העדשה.
AF_MODE_AUTO פוקוס אוטומטי עם סריקה אחת. אין תנועת עדשה אלא אם מופעלת AF.
AF_MODE_MACRO פוקוס אוטומטי בסריקה אחת מקרוב. אין תנועת עדשה אלא אם מופעלת AF
AF_MODE_CONTINUOUS_VIDEO מיקוד רציף חלק, להקלטת וידאו. ההפעלה נועלת מיד את המיקוד במיקום הנוכחי. ביטול ממשיך את המיקוד המתמשך.
AF_MODE_CONTINUOUS_PICTURE מיקוד רציף מהיר, לצילום סטילס אפס-תריס. מיקוד הפעלת נעילות לאחר שהסוויפ הפעיל כעת מסתיים. ביטול ממשיך את המיקוד המתמשך.
AF_MODE_EDOF מיקוד עומק שדה מורחב מתקדם. אין סריקת פוקוס אוטומטי, כך שלהפעלת אחד או ביטול אחד אין השפעה. התמונות ממוקדות אוטומטית על ידי ה-HAL.
ANDROID_CONTROL_AF_STATE מטא נתונים דינמיים המתארים את מצב אלגוריתם ה-AF הנוכחי, המדווח על ידי HAL במטא נתונים של התוצאה.
AF_STATE_INACTIVE לא בוצע מיקוד, או שהאלגוריתם אופס. העדשה לא זזה. תמיד המצב עבור MODE_OFF או MODE_EDOF. כאשר המכשיר נפתח, הוא חייב להתחיל במצב זה.
AF_STATE_PASSIVE_SCAN אלגוריתם מיקוד מתמשך סורק כעת למיקוד טוב. העדשה זזה.
AF_STATE_PASSIVE_FOCUSED אלגוריתם מיקוד מתמשך מאמין שהוא ממוקד היטב. העדשה לא זזה. ה-HAL עשוי לעזוב באופן ספונטני את המצב הזה.
AF_STATE_PASSIVE_UNFOCUSED אלגוריתם מיקוד מתמשך מאמין שהוא לא ממוקד היטב. העדשה לא זזה. ה-HAL עשוי לעזוב באופן ספונטני את המצב הזה.
AF_STATE_ACTIVE_SCAN סריקה שהופעלה על ידי המשתמש מתבצעת.
AF_STATE_FOCUSED_LOCKED אלגוריתם AF מאמין שהוא ממוקד. העדשה לא זזה.
AF_STATE_NOT_FOCUSED_LOCKED אלגוריתם AF לא הצליח להתמקד. העדשה לא זזה.
ANDROID_CONTROL_AF_TRIGGER בקרה להפעלת סריקת פוקוס אוטומטי, שמשמעותה תלויה במצב ובמצב. מוגדר על ידי המסגרת בהגדרות הבקשה.
AF_TRIGGER_IDLE אין טריגר נוכחי.
AF_TRIGGER_START הפעל התחלה של סריקת AF. ההשפעה תלויה במצב ובמצב.
AF_TRIGGER_CANCEL בטל את סריקת ה-AF הנוכחית אם יש, ואפס את האלגוריתם לברירת המחדל.
ערכי מטא נתונים נוספים
ANDROID_CONTROL_AF_REGIONS בקרה לבחירת אזורי שדה הראייה (FOV) שבהם יש להשתמש כדי לקבוע מיקוד טוב. זה חל על כל מצבי AF הסורקים למיקוד. מוגדר על ידי המסגרת בהגדרות הבקשה.

הגדרות חשיפה אוטומטית וערכים של תוצאות

ערכי מטא נתונים עיקריים
ANDROID_CONTROL_AE_MODE בקרה לבחירת מצב החשיפה האוטומטית הנוכחית. מוגדר על ידי המסגרת בהגדרות הבקשה.
AE_MODE_OFF החשיפה האוטומטית מושבתת; המשתמש שולט בחשיפה, רווח, משך פריים והבזק.
AE_MODE_ON חשיפה אוטומטית רגילה, עם בקרת פלאש מושבתת. המשתמש יכול להגדיר את המבזק לירי או למצב לפיד.
AE_MODE_ON_AUTO_FLASH חשיפה אוטומטית רגילה, עם פלאש מופעל לפי שיקול דעתה של HAL ללכידה מוקדמת ולצילום סטילס. בקרת משתמש בפלאש מושבתת.
AE_MODE_ON_ALWAYS_FLASH חשיפה אוטומטית רגילה, עם פלאש מופעל תמיד ללכידה, ולפי שיקול דעתה של HAL ללכידה מוקדמת. בקרת משתמש בפלאש מושבתת.
AE_MODE_ON_AUTO_FLASH_REDEYE חשיפה אוטומטית רגילה, עם פלאש מופעל לפי שיקול דעתה של HAL ללכידה מוקדמת ולצילום סטילס. השתמש בפרץ פלאש בסוף רצף הלכידה המוקדמת כדי להפחית עיניים אדומות בתמונה הסופית. בקרת משתמש בפלאש מושבתת.
ANDROID_CONTROL_AE_STATE מטא נתונים דינמיים המתארים את מצב אלגוריתם ה-AE הנוכחי, המדווח על ידי ה-HAL במטא נתונים של התוצאה.
AE_STATE_INACTIVE מצב AE ראשוני לאחר החלפת מצב. כאשר המכשיר נפתח, הוא חייב להתחיל במצב זה.
AE_STATE_SEARCHING AE אינו מתכנס לערך טוב ומתאים את פרמטרי החשיפה.
AE_STATE_CONVERGED AE מצא ערכי חשיפה טובים עבור הסצנה הנוכחית, ופרמטרי החשיפה אינם משתנים. HAL עשויה לעזוב באופן ספונטני את המצב הזה כדי לחפש פתרון טוב יותר.
AE_STATE_LOCKED AE ננעל עם הפקד AE_LOCK. ערכי החשיפה אינם משתנים.
AE_STATE_FLASH_REQUIRED ה-HAL התכנסה חשיפה אך מאמין שדרוש פלאש לתמונה בהירה מספיק. משמש לקביעה אם ניתן להשתמש במסגרת אפס-תריס-פיגור.
AE_STATE_PRECAPTURE ה-HAL נמצא באמצע רצף לכידה מוקדמת. בהתאם למצב AE, מצב זה עשוי לכלול הפעלת הפלאש לצורך מדידה או פרץ של פעימות הבזק להפחתת עיניים אדומות.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER שליטה על התחלת רצף מדידה לפני צילום תמונה באיכות גבוהה. מוגדר על ידי המסגרת בהגדרות הבקשה.
PRECAPTURE_TRIGGER_IDLE אין טריגר נוכחי.
PRECAPTURE_TRIGGER_START התחל רצף לכידה מוקדמת. ה-HAL צריך להשתמש בבקשות הבאות כדי למדוד חשיפה טובה/איזון לבן עבור לכידה עתידית ברזולוציה גבוהה.
ערכי מטא נתונים נוספים
ANDROID_CONTROL_AE_LOCK בקרה לנעילה של פקדי AE לערכים הנוכחיים שלהם.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION בקרה לכוונון נקודת הבהירות של אלגוריתם AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE בקרה לבחירת טווח קצב הפריימים היעד עבור אלגוריתם ה-AE. שגרת ה-AE אינה יכולה לשנות את קצב הפריימים כך שהוא מחוץ לגבולות אלה.
ANDROID_CONTROL_AE_REGIONS בקרה לבחירת האזורים של ה-FOV שבהם יש להשתמש כדי לקבוע רמות חשיפה טובות. זה חל על כל מצבי ה-AE מלבד OFF.

הגדרות איזון לבן אוטומטי וערכים של תוצאות

ערכי מטא נתונים עיקריים
ANDROID_CONTROL_AWB_MODE בקרה לבחירת מצב איזון הלבן הנוכחי.
AWB_MODE_OFF איזון לבן אוטומטי מושבת. משתמש שולט במטריצת צבע.
AWB_MODE_AUTO איזון לבן אוטומטי מופעל; 3A שולט בהמרת צבע, אולי באמצעות טרנספורמציות מורכבות יותר ממטריצה ​​פשוטה.
AWB_MODE_INCANDESCENT הגדרות איזון לבן קבועות טובות לתאורת ליבון פנימית (טונגסטן), בערך 2700K.
AWB_MODE_FLUORESCENT הגדרות איזון לבן קבועות טובות לתאורת פלורסנט, בערך 5000K.
AWB_MODE_WARM_FLUORESCENT הגדרות איזון לבן קבועות טובות לתאורת פלורסנט, בערך 3000K.
AWB_MODE_DAYLIGHT הגדרות איזון לבן קבועות טובות לאור יום, בערך 5500K.
AWB_MODE_CLOUDY_DAYLIGHT הגדרות איזון לבן קבועות טובות לאור יום מעונן, בערך 6500K.
AWB_MODE_TWILIGHT הגדרות איזון לבן קבועות טובות לשקיעה/זריחה כמעט, בערך 15000K.
AWB_MODE_SHADE הגדרות איזון לבן קבועות טובות לאזורים המוארים בעקיפין על ידי השמש, בערך 7500K.
ANDROID_CONTROL_AWB_STATE מטא נתונים דינמיים המתארים את מצב אלגוריתם ה-AWB הנוכחי, המדווח על ידי HAL במטא נתונים של התוצאה.
AWB_STATE_INACTIVE מצב AWB ראשוני לאחר החלפת מצב. כאשר המכשיר נפתח, הוא חייב להתחיל במצב זה.
AWB_STATE_SEARCHING AWB אינו מתכנס לערך טוב והוא משנה את פרמטרי התאמת הצבע.
AWB_STATE_CONVERGED AWB מצא ערכי התאמת צבע טובים עבור הסצנה הנוכחית, והפרמטרים אינם משתנים. HAL עשויה לעזוב באופן ספונטני את המצב הזה כדי לחפש פתרון טוב יותר.
AWB_STATE_LOCKED AWB ננעל עם הפקד AWB_LOCK. ערכי התאמת הצבע אינם משתנים.
ערכי מטא נתונים נוספים
ANDROID_CONTROL_AWB_LOCK בקרה לנעילה של התאמות צבע AWB לערכים הנוכחיים שלהם.
ANDROID_CONTROL_AWB_REGIONS בקרה לבחירת האזורים של ה-FOV שבהם יש להשתמש כדי לקבוע איזון צבע טוב. זה חל רק על מצב איזון לבן אוטומטי.

הערות כלליות למעבר מכונות מדינה

מעבר בין מצבי AF, AE או AWB תמיד מאפס את מצב האלגוריתם ל-INACTIVE. באופן דומה, מעבר בין CONTROL_MODE או CONTROL_SCENE_MODE אם CONTROL_MODE == USE_SCENE_MODE מאפס את כל מצבי האלגוריתם ל-INACTIVE.

הטבלאות שלהלן הן לפי מצב.

מכונות מדינת AF

מצב = AF_MODE_OFF או AF_MODE_EDOF
מדינה סיבת טרנספורמציה מדינה חדשה הערות
לֹא פָּעִיל AF מושבת
מצב = AF_MODE_AUTO או AF_MODE_MACRO
מדינה סיבת טרנספורמציה מדינה חדשה הערות
לֹא פָּעִיל AF_TRIGGER ACTIVE_SCAN

התחל ניקוי AF

העדשה זזה כעת

ACTIVE_SCAN סוויפ AF נעשה FOCUSED_LOCKED

אם AF מצליח

העדשה נעולה כעת

ACTIVE_SCAN סוויפ AF נעשה NOT_FOCUSED_LOCKED

אם AF מצליח

העדשה נעולה כעת

ACTIVE_SCAN AF_CANCEL לֹא פָּעִיל

בטל/אפס AF

העדשה נעולה כעת

FOCUSED_LOCKED AF_CANCEL לֹא פָּעִיל בטל/אפס AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

התחל סוויפ חדש

העדשה זזה כעת

NOT_FOCUSED_LOCKED AF_CANCEL לֹא פָּעִיל בטל/אפס AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

התחל סוויפ חדש

העדשה זזה כעת

כל המדינות שינוי מצב לֹא פָּעִיל
מצב = AF_MODE_CONTINUOUS_VIDEO
מדינה סיבת טרנספורמציה מדינה חדשה הערות
לֹא פָּעִיל HAL יוזם סריקה חדשה PASSIVE_SCAN

התחל ניקוי AF

העדשה זזה כעת

לֹא פָּעִיל AF_TRIGGER NOT_FOCUSED_LOCKED

שאילתת מצב AF

העדשה נעולה כעת

PASSIVE_SCAN HAL משלים את הסריקה הנוכחית PASSIVE_FOCUSED

סיום סריקת AF

העדשה נעולה כעת

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

שינוי מיידי אם המיקוד טוב

העדשה נעולה כעת

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

שינוי מיידי אם המיקוד גרוע

העדשה נעולה כעת

PASSIVE_SCAN AF_CANCEL לֹא פָּעִיל

אפס את מיקום העדשה

העדשה נעולה כעת

PASSIVE_FOCUSED HAL יוזם סריקה חדשה PASSIVE_SCAN

התחל סריקת AF

העדשה זזה כעת

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

שינוי מיידי אם המיקוד טוב

העדשה נעולה כעת

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED שינוי מיידי אם המיקוד גרוע

העדשה נעולה כעת

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED ללא השפעה
FOCUSED_LOCKED AF_CANCEL לֹא פָּעִיל הפעל מחדש את סריקת AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED ללא השפעה
NOT_FOCUSED_LOCKED AF_CANCEL לֹא פָּעִיל הפעל מחדש את סריקת AF
מצב = AF_MODE_CONTINUOUS_PICTURE
מדינה סיבת טרנספורמציה מדינה חדשה הערות
לֹא פָּעִיל HAL יוזם סריקה חדשה PASSIVE_SCAN

התחל סריקת AF

העדשה זזה כעת

לֹא פָּעִיל AF_TRIGGER NOT_FOCUSED_LOCKED

שאילתת מצב AF

העדשה נעולה כעת

PASSIVE_SCAN HAL משלים את הסריקה הנוכחית PASSIVE_FOCUSED סיום סריקת AF

העדשה נעולה כעת

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

שינוי בסופו של דבר פעם אחת להתמקד טוב

העדשה נעולה כעת

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

טרנספורמציה בסופו של דבר אם לא יכולה להתמקד

העדשה נעולה כעת

PASSIVE_SCAN AF_CANCEL לֹא פָּעִיל

אפס את מיקום העדשה

העדשה נעולה כעת

PASSIVE_FOCUSED HAL יוזם סריקה חדשה PASSIVE_SCAN

התחל סריקת AF

העדשה זזה כעת

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

שינוי מיידי אם המיקוד טוב

העדשה נעולה כעת

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

שינוי מיידי אם המיקוד גרוע

העדשה נעולה כעת

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED ללא השפעה
FOCUSED_LOCKED AF_CANCEL לֹא פָּעִיל הפעל מחדש את סריקת AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED ללא השפעה
NOT_FOCUSED_LOCKED AF_CANCEL לֹא פָּעִיל הפעל מחדש את סריקת AF

מכונות מצב AE ו-AWB

מכונות המצב AE ו-AWB זהות לרוב. ל-AE יש מצבים נוספים של FLASH_REQUIRED ו-PRECAPTURE. אז יש להתעלם משורות למטה המתייחסות לשני המצבים הללו עבור מכונת המצבים AWB.

מצב = AE_MODE_OFF / מצב AWB לא אוטומטי
מדינה סיבת טרנספורמציה מדינה חדשה הערות
לֹא פָּעִיל AE/AWB מושבת
מצב = AE_MODE_ON_* / AWB_MODE_AUTO
מדינה סיבת טרנספורמציה מדינה חדשה הערות
לֹא פָּעִיל HAL יוזם סריקת AE/AWB מחפש
לֹא פָּעִיל AE/AWB_LOCK פועל נָעוּל ערכים נעולים
מחפש HAL מסיים סריקת AE/AWB התכנסו ערכים טובים, לא משתנים
מחפש HAL מסיים סריקת AE FLASH_REQUIRED מתכנס אך כהה מדי ללא הבזק
מחפש AE/AWB_LOCK פועל נָעוּל ערכים נעולים
התכנסו HAL יוזם סריקת AE/AWB מחפש ערכים נעולים
התכנסו AE/AWB_LOCK פועל נָעוּל ערכים נעולים
FLASH_REQUIRED HAL יוזם סריקת AE/AWB מחפש ערכים נעולים
FLASH_REQUIRED AE/AWB_LOCK פועל נָעוּל ערכים נעולים
נָעוּל AE/AWB_LOCK כבוי מחפש הערכים לא טובים לאחר ביטול הנעילה
נָעוּל AE/AWB_LOCK כבוי התכנסו ערכים טובים לאחר ביטול הנעילה
נָעוּל AE_LOCK כבוי FLASH_REQUIRED חשיפה טובה, אבל כהה מדי
כל מדינות ה-AE PRECAPTURE_START קדם התחל רצף לכידה מוקדמת
קדם הרצף הסתיים, AE_LOCK כבוי התכנסו מוכן לצילום באיכות גבוהה
קדם הרצף הסתיים, AE_LOCK פועל נָעוּל מוכן לצילום באיכות גבוהה

הפעלת שליטה ידנית

מספר פקדים מעורבים גם בקביעת התצורה של בלוקים 3A של ההתקן כדי לאפשר שליטה ישירה באפליקציה.

מודל HAL לבקרת 3A הוא שלכל בקשה, ה-HAL בודק את מצב שדות הבקרה של 3A. אם שגרת 3A כלשהי מופעלת, אז השגרה הזו עוקפת את משתני הבקרה המתייחסים לשגרה זו, וערכי העקיפה הללו זמינים אז במטא-נתונים של התוצאה עבור אותו לכידה. כך, למשל, אם חשיפה אוטומטית מופעלת בבקשה, ה-HAL צריך לדרוס את שדות החשיפה, הרווח ומשך הפריימים (ואולי את שדות ההבזק, בהתאם למצב AE) של הבקשה. רשימת הפקדים הרלוונטיים היא:

שם שליטה יחידה הערות
android.control.mode enum: כבוי, אוטומטי, USE_SCENE_MODE בקרת 3A ברמה גבוהה. כאשר מוגדר כ-OFF, כל בקרת 3A על ידי ה-HAL מושבתת. האפליקציה חייבת להגדיר את השדות לפרמטרי לכידה בעצמה. כאשר מוגדר ל-AUTO, פקדי האלגוריתם הבודדים ב-android.control.* נמצאים בתוקף, כגון android.control.afMode. כאשר הוא מוגדר ל-USE_SCENE_MODE, הפקדים הבודדים ב-android.control.* מושבתים לרוב, וה-HAL מיישם את אחת מהגדרות מצב הסצנה (כגון ACTION, SUNSET או PARTY) כרצונו.
android.control.afMode enum OFF פירושו שליטה ידנית במיקוד העדשה באמצעות android.lens.focusDistance.
android.control.aeMode enum OFF פירושו שליטה ידנית של משך חשיפה/רווח/פריים דרך android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enum OFF פירושו שליטה ידנית באיזון הלבן.