שכבת ההפשטה של חומרת המצלמה (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 עם סיומת HAL
במכשירים עם Android מגרסה 13 ואילך, המצלמה framework כולל תמיכה בתקשורת עם HALs של מצלמת AIDL. גם המסגרת של המצלמה יש תמיכה במצלמת HIDL במצלמת HIDL, אך נוספו תכונות של המצלמה מערכת Android מגרסה 13 ואילך זמינה רק דרך ממשקי AIDL של מצלמת HAL. כדי להטמיע תכונות כאלה במכשירים שמשדרגים Android מגרסה 13 ואילך, יצרני מכשירים חייבים להעביר את תהליך HAL שלהם משימוש בממשקי מצלמה של HIDL למצלמת AIDL ממשקים.
מידע נוסף על היתרונות של AIDL זמין במאמר AIDL ל-HALs.
הטמעת AIDL של מצלמת HAL
למידע נוסף על הטמעה של מצלמת AIDL עם HAL, אפשר לעיין במאמר הבא:
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
תכונות HAL3 של המצלמה
המטרה של העיצוב מחדש של Android Camera API היא להגביר באופן משמעותי היכולת של האפליקציות לשלוט במערכת המשנה של המצלמה במכשירי Android לארגן מחדש את ה-API כדי שיהיה יעיל ומתחזק יותר. הפורמט הנוסף עם התכונה הזו, קל יותר לפתח אפליקציות מצלמה באיכות גבוהה ב-Android מכשירים שיכולים לפעול בצורה אמינה במספר מוצרים, ועדיין משתמשים אלגוריתמים ספציפיים למכשיר, כשהדבר אפשרי, כדי למקסם את האיכות או של ביצועים.
גרסה 3 של מערכת המשנה של המצלמה מבססת את מצבי הפעולה תצוגה מאוחדת אחת, שבה אפשר להשתמש כדי להטמיע כל אחד מהמצבים הקודמים ועוד כמה סוגים אחרים, כמו רצף רצף. כך מתקבלת שליטה טובה יותר למשתמשים פוקוס וחשיפה ועוד לאחר עיבוד, כמו הפחתת רעש, ניגודיות וחידוד. בנוסף, התצוגה הפשוטה הזו מאפשרת להגיש בקשה בקלות מפתחים להשתמש בפונקציות השונות של המצלמה.
ה-API יוצר מודל של מערכת המשנה של המצלמה כצינור עיבוד נתונים שממיר בקשות לצילומי פריימים לתוך פריימים, על בסיס של 1:1. הבקשות כוללים את כל פרטי התצורה לגבי תיעוד ועיבוד של מסגרת. פרטים אלה כוללים רזולוציה ופורמט פיקסלים; חיישן ידני, עדשה ופלאש בקרה; מצבי הפעלה של 3A; RAW->בקרת עיבוד YUV; יצירת נתונים סטטיסטיים; וכן הלאה.
במילים פשוטות, ה-framework של האפליקציה מבקש פריים מהמצלמה ומערכת המשנה של המצלמה מחזירה תוצאות לשידור פלט. לחשבון נוסף לכך, מטא-נתונים שמכילים מידע כמו מרחבי צבעים ועדשות נוצרת הצללה לכל קבוצה של תוצאות. אפשר לחשוב על גרסה 3 כצינור עיבוד נתונים למצלמה החד-כיוונית של גרסה 1. היא ממירה כל צילום לתמונה אחת שצולמה על ידי החיישן, והיא מעובדת לגורמים הבאים:
- אובייקט תוצאה עם מטא-נתונים לגבי הצילום.
- מאגר אחד עד N של נתוני תמונה נשמרים במאגרי נתונים זמניים, כל אחד מהם יופיע בפלטפורמת יעד משלו.
הקבוצה של פלטפורמות הפלט האפשריות מוגדרת מראש:
- כל משטח הוא יעד לרצף של מאגרי תמונות של ורזולוציה.
- אפשר להגדיר רק מספר קטן של פלטפורמות כפלט בו-זמנית (כ-3).
בקשה מכילה את כל הגדרות הצילום הרצויות ואת רשימת הפלט
כדי לדחוף מאגר נתונים של תמונות לבקשה הזו (מתוך סך כל
שהוגדרה). בקשה יכולה להיות תמונה אחת (עם capture()
), או
ניתן לחזור על הפרמטר הזה ללא הגבלת זמן (עם setRepeatingRequest()
). צילומי מסך
יש עדיפות על פני בקשות חוזרות.
![דגם הנתונים של המצלמה](https://source.android.com/static/docs/core/camera/images/camera_simple_model.png?authuser=8&hl=he)
איור 1. מודל הפעולה המרכזי של המצלמה
סקירה כללית של מצלמת HAL1
גרסה 1 של מערכת המשנה של המצלמה עוצבה כקופסה שחורה עם ובשלושת מצבי ההפעלה הבאים:
- תצוגה מקדימה
- הקלטת וידאו
- צילום סטילס
בכל מצב יש יכולות מעט שונות וחופפות. הצלחת קשה ליישם תכונות חדשות כמו מצב רצף, את מצבי התפעול.
![תרשים בלוק המצלמה](https://source.android.com/static/docs/core/camera/images/camera_block.png?authuser=8&hl=he)
איור 2. רכיבי מצלמה
מערכת Android 7.0 תמשיך לתמוך במצלמה עם HAL1 כי הרבה מכשירים עדיין מסתמכים על את זה. בנוסף, שירות מצלמת Android תומך בהטמעה של הנחיות HAL (1 ו-3), שימושי כאשר רוצים לתמוך במצלמה קדמית פחות אפשרית מצלמה עם מצלמה HAL1 ומצלמה אחורית מתקדמת יותר עם מצלמה HAL3.
יש מצלמה אחת מודול (עם מצלמה משלה) גרסה מספר), שמפרט כמה התקני מצלמה עצמאיים שלכל אחד מהם את מספר הגרסה שלהם. כדי לקבל תמיכה יש צורך במודול מצלמה 2 ואילך במכשירים מגרסה 2 ואילך, ומודולים כאלה של מצלמה יכולים לכלול שילוב של מצלמה (לזה אנחנו מתכוונים כשאנחנו אומרים ש-Android תומך בהטמעה של מודעות עם ללקוחות פוטנציאליים).