שכבת ההפשטה של חומרת המצלמה (HAL) ב-Android מחברת את הרמה הגבוהה יותר ממשקי API של framework של מצלמה android.hardware.camera2 לחומרה ולמנהל ההתקן של המצלמה. החל מ-Android 13, הפיתוח של ממשק ה-HAL של המצלמה מתבצע באמצעות AIDL. ב-Android 8.0 הושק Treble, שעבר את Camera HAL API לממשק יציב שמוגדר על ידי שפת התיאור של ממשק HAL (HIDL). אם פיתחתם בעבר מודול ומנהל התקן של מצלמה עם HAL ל-Android 7.0, ונמוכה יותר, להיות מודעים ושינויים בצינור עיבוד הנתונים של המצלמה.
AIDL camera HAL
במכשירים עם Android מגרסה 13 ואילך, מסגרת המצלמה כוללת תמיכה ב-HAL של מצלמת AIDL. מסגרת המצלמה תומכת גם ב-HAL של מצלמה מסוג HIDL, אבל תכונות המצלמה שנוספו ב-Android 13 ואילך זמינות רק דרך ממשקי ה-HAL של מצלמה מסוג AIDL. כדי להטמיע תכונות כאלה במכשירים ששודרגו ל-Android 13 ואילך, יצרני המכשירים צריכים להעביר את תהליך ה-HAL שלהם משימוש בממשקי מצלמה של HIDL לממשקי מצלמה של AIDL.
במאמר AIDL ל-HALs מוסבר על היתרונות של AIDL.
הטמעת HAL של מצלמה ב-AIDL
להטמעה לדוגמה של HAL של מצלמה ב-AIDL, ראו hardware/google/camera/common/hal/aidl_service/
.
מפרטי מצלמת AIDL עם HAL נמצאים במיקומים הבאים:
- ספק המצלמה:
hardware/interfaces/camera/provider/aidl/
- מכשיר המצלמה:
hardware/interfaces/camera/device/aidl/
- מטא-נתונים של המצלמה:
hardware/interfaces/camera/metadata/aidl/
- סוגים נפוצים של נתונים:
hardware/interfaces/camera/common/aidl/
במכשירים שעוברים אל AIDL, יכול להיות שיצרני המכשירים יצטרכו לשנות את מדיניות SELinux (sepolicy) וקובצי RC, בהתאם לקוד שלנו.
אימות HAL של מצלמת AIDL
כדי לבדוק את הטמעת ה-HAL של מצלמת AIDL, צריך לוודא שהמכשיר עובר את כל
בדיקות CTS ו-VTS. ב-Android 13 מופיע הבדיקה AIDL VTS,
VtsAidlHalCameraProvider_TargetTest.cpp
.
תכונות של Camera HAL3
המטרה של העיצוב המחודש של Android Camera API היא להגביר באופן משמעותי היכולת של האפליקציות לשלוט במערכת המשנה של המצלמה במכשירי Android לארגן מחדש את ה-API כדי שיהיה יעיל ומתחזק יותר. הפורמט הנוסף עם התכונה הזו, קל יותר לפתח אפליקציות מצלמה באיכות גבוהה ב-Android מכשירים שיכולים לפעול בצורה אמינה במספר מוצרים, ועדיין משתמשים אלגוריתמים ספציפיים למכשיר, כשהדבר אפשרי, כדי למקסם את האיכות או של ביצועים.
בגרסה 3 של מערכת המשנה של המצלמה, מצבי הפעולה מחולקים לתצוגה מאוחדת אחת, שאפשר להשתמש בה כדי להטמיע כל אחד מהמצבים הקודמים ועוד כמה מצבים, כמו מצב צילום רצוף. כך המשתמשים יכולים לשלוט טוב יותר בפוקוס ובחשיפה, ולבצע יותר עיבוד לאחר הצילום, כמו הפחתת רעש, הגברת הניגודיות והחדרה. בנוסף, התצוגה הפשוטה הזו מאפשרת למפתחי האפליקציות להשתמש בקלות רבה יותר בפונקציות השונות של המצלמה.
ה-API מדגים את מערכת המשנה של המצלמה כצינור עיבוד נתונים שממיר בקשות נכנסות לצילום פריים לפריימים, על בסיס 1:1. הבקשות כוללים את כל פרטי התצורה לגבי תיעוד ועיבוד של מסגרת. פרטים אלה כוללים רזולוציה ופורמט פיקסלים; חיישן ידני, עדשה ופלאש בקרה; מצבי הפעלה של 3A; RAW->בקרת עיבוד YUV; יצירת נתונים סטטיסטיים; וכן הלאה.
במילים פשוטות, מסגרת האפליקציה מבקשת מסגרת מהתת-מערכת של המצלמה, ותת-מערכת המצלמה מחזירה תוצאות לזרם פלט. בנוסף, נוצרים מטא-נתונים שמכילים מידע כמו מרחבי צבעים והצללה של עדשות לכל קבוצת תוצאות. אפשר לחשוב על מצלמה בגרסה 3 בתור צינור עיבוד נתונים לשידור החד-כיווני של מצלמה בגרסה 1. היא ממירה כל צילום לתמונה אחת שצולמה על ידי החיישן, והיא מעובדת לגורמים הבאים:
- אובייקט תוצאה עם מטא-נתונים לגבי הצילום.
- מאגר אחד עד N של נתוני תמונה נשמרים במאגרי נתונים זמניים, כל אחד מהם יופיע בפלטפורמת יעד משלו.
קבוצת פלטפורמות הפלט האפשריות מוגדרת מראש:
- כל פלטפורמה היא יעד של מקור נתונים של מאגרי תמונות ברזולוציה קבועה.
- אפשר להגדיר רק מספר קטן של פלטפורמות כפלט בו-זמנית (כ-3).
בקשה מכילה את כל הגדרות הצילום הרצויות ואת רשימת הפלט
כדי לדחוף מאגר נתונים של תמונות לבקשה הזו (מתוך סך כל
שהוגדרה). בקשה יכולה להיות חד-פעמית (עם capture()
) או לחזור על עצמה ללא הגבלת זמן (עם setRepeatingRequest()
). לצילום יש עדיפות על פני בקשות חוזרות.
סקירה כללית על Camera HAL1
גרסה 1 של מערכת המשנה של המצלמה עוצבה כקופסה שחורה עם ובשלושת מצבי ההפעלה הבאים:
- תצוגה מקדימה
- הקלטת וידאו
- צילום סטילס
בכל מצב יש יכולות מעט שונות וחופפות. לכן היה קשה להטמיע תכונות חדשות כמו מצב צילום רצוף, שנמצא בין שני מצבי הפעולה.
Android 7.0 ממשיך לתמוך ב-HAL1 של המצלמה, כי עדיין יש הרבה מכשירים שמסתמכים עליו. בנוסף, שירות המצלמה של Android תומך בהטמעה של שתי ממשקי ה-HAL (1 ו-3). הדבר שימושי כשרוצים לתמוך במצלמה קדמית עם יכולות נמוכות יותר באמצעות camera HAL1 ובמצלמה אחורית מתקדמת יותר באמצעות camera HAL3.
יש מודול יחיד של HAL למצלמה (עם מספר גרסה משלו), שמפרט כמה מכשירים עצמאיים של מצלמה, לכל אחד מהם מספר גרסה משלו. כדי לתמוך במכשירים מגרסה 2 ואילך, נדרשת מודול מצלמה מגרסה 2 ואילך. מודולים כאלה יכולים לכלול שילוב של גרסאות של מכשירי מצלמה (זה מה שאנחנו מתכוונים אליו כשאנחנו אומרים ש-Android תומך בהטמעה של שתי ה-HAL).