Camera HAL

שכבת ההפשטה של חומרת המצלמה (HAL) ב-Android מחברת בין ממשקי ה-API של מסגרת המצלמה ברמה גבוהה יותר ב-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. מסגרת המצלמה תומכת גם ב-HIDL camera HALs, אבל תכונות המצלמה שנוספו ב-Android 13 ואילך זמינות רק דרך ממשקי AIDL camera HAL. כדי להטמיע תכונות כאלה במכשירים שמשודרגים ל-Android מגרסה 13 ואילך, יצרני המכשירים צריכים להעביר את תהליך ה-HAL שלהם משימוש בממשקי מצלמה של HIDL לשימוש בממשקי מצלמה של AIDL.

מידע נוסף על היתרונות של AIDL זמין במאמר בנושא AIDL ל-HAL.

הטמעה של AIDL camera HAL

למידע על הטמעה לדוגמה של AIDL Camera HAL, אפשר לעיין ב hardware/google/camera/common/hal/aidl_service/.

המפרטים של AIDL camera HAL נמצאים במיקומים הבאים:

יצרני מכשירים שעוברים ל-AIDL עשויים להצטרך לשנות את מדיניות SELinux של Android‏ (sepolicy) ואת קובצי ה-RC בהתאם למבנה הקוד.

אימות של AIDL camera HAL

כדי לבדוק את ההטמעה של AIDL camera HAL, מוודאים שהמכשיר עובר את כל הבדיקות של 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()). ללכידות יש עדיפות על פני בקשות חוזרות.

מודל נתונים של מצלמה

איור 1. מודל הפעולה של ליבת המצלמה

סקירה כללית של Camera HAL1

גרסה 1 של מערכת המשנה של המצלמה תוכננה כקופסה שחורה עם אמצעי בקרה ברמה גבוהה ושלושה מצבי הפעלה:

  • תצוגה מקדימה
  • הקלטת וידאו
  • צילום תמונת סטילס

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

תרשים בלוקים של המצלמה

איור 2. רכיבי המצלמה

מערכת Android 7.0 ממשיכה לתמוך ב-HAL1 של המצלמה, כי מכשירים רבים עדיין מסתמכים עליו. בנוסף, שירות המצלמה של Android תומך בהטמעה של שני רכיבי HAL ‏ (1 ו-3), וזה שימושי כשרוצים לתמוך במצלמה קדמית עם יכולות פחותות באמצעות camera HAL1, ובמצלמה אחורית מתקדמת יותר באמצעות camera HAL3.

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