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

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