דף זה מפרט את ההבדלים בין גרסאות HAL של המצלמה, ממשקי API בדיקות של תאימות לבדיקת תאימות (CTS). הוא כולל גם כמה שינויים ארכיטקטוניים שבוצעו כדי להקשיח ולאבטח את מסגרת המצלמה ב-Android 7.0, מעבר ל-Treble ב-Android 8.0, וספקי העדכונים צריכים לבצע כדי לתמוך בשינויים האלה בהטמעות המצלמה שלהם.
טרמינולוגיה
המונחים הבאים מופיעים בדף הזה:
- API1 של המצלמה
- מסגרת המצלמה ברמת האפליקציה במכשירים עם Android 4.4 ומטה, חשופה
דרך הכיתה
android.hardware.Camera
. - ממשק API2 של מצלמה
- מסגרת המצלמה ברמת האפליקציה במכשירי Android 5.0 ואילך, חשופה
באמצעות חבילת
android.hardware.camera2
. - מצלמה עם HAL
- שכבת מודול המצלמה הוטמעה על ידי ספקי SoC. ציבורי ברמת האפליקציה על בסיס המצלמה עם HAL.
- מצלמה HAL3.1
- גרסת HAL של מכשיר המצלמה שפורסמה עם Android 4.4.
- מצלמה HAL3.2
- גרסת HAL של מכשיר המצלמה שפורסמה עם Android 5.0.
- CTS API1 של המצלמה
- קבוצת בדיקות CTS של מצלמה שפועלות על המצלמה API1.
- CTS API2 של מצלמה
- קבוצה נוספת של בדיקות CTS של מצלמות שפועלות מעל Camera API2.
- טרבל
- מפריד את הטמעת הספק (תוכנה ברמה נמוכה יותר למכשיר ספציפית נכתב על ידי יצרני סיליקון) ב-Android OS דרך ממשק ספק.
- hiDL
- שפת הגדרת ממשק HAL שהושקו ב-Treble ומשמשים לציון הממשק בין HAL המשתמשים שלו.
- VTS
- חבילת בדיקה של ספקים נוספה לצד האפשרות טרבל.
ממשקי API של מצלמה
ב-Android נכללים ממשקי ה-API הבאים של המצלמה.
API1 של המצלמה
מערכת Android 5.0 הוצאה משימוש של Camera API1, וממשיכים להוציא משימוש את הגרסה החדשה פיתוח פלטפורמות מתמקדות ב- Camera API2. אבל תקופת ההפסקה ההדרגתית יהיה ארוך, וגרסאות של Android ימשיכו לתמוך באפליקציות של Camera API1 זמן מה. באופן ספציפי, תמשיך להיות תמיכה בתכונות הבאות:
- ממשקי API1 של המצלמה לאפליקציות. אפליקציות מצלמה שמובנות על גבי המצלמה API1 אמור לפעול כמו שהוא פועל במכשירים שבהם פועלות גרסאות קודמות של Android.
- גרסאות מצלמה עם HAL. כולל תמיכה במצלמה HAL1.0.
ממשק API2 של מצלמה
ה-framework של ממשק ה-API של המצלמה חושף בפני האפליקציה את השליטה במצלמה ברמה נמוכה יותר, כולל תהליכים יעילים של רצף/סטרימינג ללא העתקה מוקדמת ובקרות לכל-פריים של חשיפה, רווח, עלייה באיזון לבן, המרת צבעים, הסרת רעשים, חידוד, ועוד. לקבלת פרטים, אפשר לצפות סקירה כללית על סרטון Google I/O.
מערכת Android בגרסה 5.0 ואילך כוללת את Camera API2; עם זאת, מכשירים שבהם פועלת מערכת Android
יכול להיות שגרסה 5.0 ואילך לא תתמוך בכל התכונות של Camera API2.
נכס אחד (android.info.supportedHardwareLevel
) שאפליקציות יכולות לשלוח לו שאילתות
באמצעות ממשקי Camera API2, מדווחים על אחת משיטות התמיכה הבאות
רמות:
LEGACY
: המכשירים האלה חושפים יכולות לאפליקציות דרך ממשקי API2 של מצלמה עם יכולות זהות בערך להיחשף לאפליקציות דרך ממשקי Camera API1. הקוד של frameworks מדור קודם תרגום רעיוני של קריאות ל- Camera API2 לקריאות API1 של Camera; מכשירים מדור קודם לא תומכים בתכונות API2 של המצלמה, כמו פקדים לכל פריים.LIMITED
: המכשירים האלה תומכים בחלק מהיכולות של Camera API2 (אבל לא בכולם) וצריך להשתמש במצלמה עם HAL 3.2 ואילך.FULL
: המכשירים האלה תומכים בכל היכולות העיקריות של ממשק API2 למצלמה וצריך להשתמש בו עם מצלמת HAL 3.2 ואילך וב-Android מגרסה 5.0 ואילך.LEVEL_3
: המכשירים האלה תומכים בעיבוד מחדש של YUV ובתמונות RAW שלו, והגדרות נוספות של זרם הפלט.EXTERNAL
: המכשירים האלה דומים ל-LIMITED
מכשירים עם כמה חריגים; לדוגמה, נתונים מסוימים מהחיישנים או העדשה לא ידווחו או שקצב הפריימים שלהם פחות יציב. הרמה הזו משמשת לגורמים חיצוניים ממצלמות כמו מצלמות אינטרנט בחיבור USB.
יכולות בודדות נחשפות דרך
מאפיין android.request.availableCapabilities
ב-API של מצלמה
ממשקים. ל-FULL
מכשירים נדרשים MANUAL_SENSOR
וגם
בין היתר, היכולות של MANUAL_POST_PROCESSING
.
היכולת של RAW
היא אופציונלית גם במכשירי FULL
.
מכשירי LIMITED
יכולים לפרסם כל קבוצת משנה של היכולות האלה,
כולל אף אחת מהן. עם זאת, היכולת BACKWARD_COMPATIBLE
חייב להיות מוגדר תמיד.
רמת החומרה הנתמכת של המכשיר, וכן המצלמה הספציפית יכולות API2 שהוא תומך בהן זמינות בתור דגלי התכונות הבאים לאפשר סינון ב-Google Play של אפליקציות המצלמה עם API2.
android.hardware.camera.hardware_level.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
דרישות לגבי CTS
מכשירים עם Android מגרסה 5.0 ואילך חייבים לעבור את הבדיקה של המצלמה API1 CTS, מצלמה בדיקות מצלמות של API2 CTS ו-CTS Verifier.
מכשירים שלא כוללים הטמעת מצלמה HAL3.2 ושלא
יכולת לתמוך בממשקי API2 מלאים של המצלמה עדיין חייבים לעבור את המצלמה
בדיקות API2 CTS של API. עם זאת, המכשיר פועל עם API של מצלמה 2
מצב LEGACY
(שבו הקריאות של Camera API2 ממופות מושגים
לקריאות API1 של Camera) כך שכל בדיקה של Camera API2 CTS קשורה לתכונות או
המערכת מדלגת באופן אוטומטי על יכולות מעבר ל- Camera API1.
במכשירים מדור קודם, בדיקות CTS של Camera API2 שרצות משתמשות ב ממשקים ויכולות חדשות של המצלמה הציבורית 1 בדרישות שלנו. באגים שנחשפו (וגורמים לכשל ב- Camera API2 CTS) כבר קיימים באגים במצלמה הקיימת של המכשיר, ולכן נמצא על ידי אפליקציות קיימות של Camera API1. אנחנו לא מצפים להרבה באגים מהסוג הזה (עם זאת, יש לתקן באגים כאלה כדי לעבור את בדיקות ה-CTS של המצלמה API2).
דרישות עבור VTS
מכשירים שפועלת בהם גרסת Android 8.0 ואילך עם הטמעות HAL מקושרות להעביר את המצלמה בדיקות VTS.
הקשחת מסגרת המצלמה
כדי להקשיח את האבטחה של המדיה ושל ה-framework של המצלמה, מערכת Android 7.0 מזיזה את המצלמה מחוץ לשרת המדיה. החל מ-Android 8.0, כל מצלמה מחוברת טכנולוגיית HAL פועלת בתהליך נפרד משירות המצלמה. יכול להיות שהספקים יצטרכו שינויים ב-HAL של המצלמה, בהתאם ל-API ולגרסאות ה-HAL שנמצאים בשימוש. בסעיפים הבאים מפורט השינויים בארכיטקטורה ב-AP1 וב-AP2 ל-HAL1 HAL3, וגם דרישות כלליות.
שינויים ארכיטקטוניים של API1
הקלטת וידאו ב-API1 עשויה להניח שמקודד המצלמה ומקודד הווידאו חיים באותו אופן תהליך האימות. כשמשתמשים ב-API1 ב:
- HAL3, שירות המצלמה משתמש ב-BuffQueue כדי להעביר מאגרים לא נדרש עדכון ספק.
- HAL1, שתומך בהעברת מטא-נתונים במאגרי נתונים זמניים של סרטונים, הספקים חייבים
צריך לעדכן את ה-HAL כדי להשתמש ב-
kMetadataBufferTypeNativeHandleSource
. (ב-Android כבר אין תמיכה ב-kMetadataBufferTypeCameraSource
7.0.)
שינויים ארכיטקטוניים של API2
ב-API2 ב-HAL1 או ב-HAL3, BufferQueue מעביר את מאגר הנתונים הזמני כדי שהנתיבים האלה ימשיכו לפעול לעבודה. ארכיטקטורת Android 7.0 ל-API2 במערכות הבאות:
- HAL1 לא מושפע מהעברת שירות המצלמה ואין ספק נדרש עדכון.
- HAL3 מושפע, אבל לא צוין עדכון ספק נדרש:
דרישות נוספות
השינויים הארכיטקטוניים שבוצעו להקשחת המדיה ומסגרת המצלמה האבטחה כוללות את דרישות המכשיר הנוספות הבאות.
- כללי. למכשירים נדרש רוחב פס נוסף עקב IPC,
מה שעלול להשפיע על תרחישים לדוגמה של מצלמה שתלויה בזמן, כמו וידאו במהירות גבוהה
מוקלטת. ספקים יכולים למדוד את ההשפעה בפועל על ידי הפעלת
android.hardware.camera2.cts.PerformanceTest
ומצלמת Google אפליקציה לצילום וידאו במהירות גבוהה ב-120/240 FPS. למכשירים נדרש גם כמות קטנה של זיכרון RAM נוסף כדי ליצור את התהליך החדש. - העברת מטא-נתונים במאגרי נתונים זמניים של סרטונים (HAL1 בלבד). אם מדובר ב-HAL1
שומרת מטא-נתונים במקום נתונים אמיתיים של מסגרות YUV במאגרי נתונים זמניים של סרטונים, טכנולוגיית HAL
להשתמש ב-
kMetadataBufferTypeNativeHandleSource
כמאגר נתונים זמני להקליד ולהעבירVideoNativeHandleMetadata
במאגרי נתונים זמניים של סרטונים. (ב-Android כבר אין תמיכה ב-kMetadataBufferTypeCameraSource
7.0.) עםVideoNativeHandleMetadata
, מצלמה ומסגרות מדיה יכולים להעביר את מאגרי הנתונים הזמניים בין תהליכים על ידי עריכת סריאליזציה מבצעת פעולת deserialing של נקודות האחיזה המקוריות כמו שצריך. - הכתובת של מאגר הנתונים הזמני לא תמיד שומרת את אותו מאגר נתונים זמני (HAL3 בלבד). HAL3 מקבל כתובות של מאגר נתונים זמני בכל בקשת צילום לכינויים. ל-HAL אין אפשרות להשתמש בכתובות כדי לזהות חוצצים כי הכתובות יכול לשמור נקודת אחיזה נוספת למאגר הנתונים הזמני אחרי ש-HAL מחזיר את מאגר הנתונים הזמני. עליך לעדכן את HAL כדי להשתמש בנקודות האחיזה למאגר הנתונים של מאגר הנתונים הזמני. לדוגמה, HAL מקבל כתובת א' של מאגר נתונים זמני ששומרת את נקודת האחיזה א' למאגר הנתונים הזמני. אחרי שחוזרת HAL נקודת אחיזה א' למאגר נתונים זמני, כתובת א' של מאגר הנתונים הזמני עשויה לשמור את נקודת האחיזה ב' בפעם הבאה מערכת HAL מקבלת אותו.
- צריך לעדכן את המדיניות של SELinux לשרת המצלמה. אם המיקום כללי המדיניות של SELinux שספציפיים למכשיר מעניקים הרשאות לשרת המדיה להפעלת המצלמה, עליך לעדכן את המדיניות של SELinux כדי לתת לשרת המצלמה הרשאות מתאימות. רביעי לא מומלץ לשכפל את מדיניות SELinux של שרת המדיה לשרת המצלמה (שרת המדיה ושרת המצלמה בדרך כלל דורשים משאבים שונים ). לשרת המצלמה צריכות להיות רק ההרשאות הנדרשות לביצוע המצלמה פונקציונליות והרשאות מיותרות שקשורות למצלמה בשרת המדיה צריך להסיר אותן.
- מפריד בין מצלמת HAL לבין שרת המצלמה. במכשירי Android בגרסה 8.0 ואילך, קיימת הפרדה נוספת של פרוטוקול המצלמה עם הקישוריות בתהליך שונה משרת המצלמה. IPC עובר ממשקים בהגדרת HIDL.
אימות
בכל המכשירים שכוללים מצלמה עם Android 7.0, צריך לבדוק את באמצעות הרצת Android 7.0 CTS. למרות ש-Android 7.0 לא כולל בדיקות CTS חדשות שמאמתות שינויים בשירות המצלמה, בדיקות CTS קיימות נכשלות אם לא ביצעת את העדכונים שצוינו למעלה.
צריך לאמת את כל המכשירים שכוללים מצלמה עם Android מגרסה 8.0 ואילך את הטמעת הספק באמצעות הרצת VTS.
היסטוריית הגרסאות של מצלמה עם HAL
לרשימת בדיקות זמינות להערכת HAL של מצלמת Android, יש לעיין ב בדיקת HAL במצלמה רשימת משימות.
10 Android
מערכת Android 10 כוללת את העדכונים הבאים.
ממשק API של מצלמה
- שיפורים בריבוי מצלמות שמאפשרים למצלמות פיזיות יכול לשמש בנפרד או באמצעות מצלמות לוגיות תואמות, מזהים של מצלמות פיזיות. צפייה תמיכה במספר מצלמות.
- היכולת לבדוק אם הגדרה מסוימת של סשן
ללא תקורת הביצועים של יצירת סשן חדש.
צפייה
CameraDevice
- יכולת לאחזר הגדרות מומלצות של סטרימינג לשימוש נתון
כדי להפוך את הלקוח ליעיל וביצועים טובים יותר. צפייה
getRecommendedStreamConfigurationMap
- תמיכה עבור פורמט תמונה JPEG בעומק. פרטים נוספים זמינים במאמר מפרט עומק דינמי.
- תמיכה עבור פורמט תמונה HEIC. צפייה הדמיה HEIF.
- שיפורים בפרטיות. מפתחות מסוימים נדרשים עבור הלקוח
שיהיה
CAMERA
הרשאות לפני שניתן יהיה לאחזר אותן מ:CameraCharacteristics
צפייהgetKeysNeedingPermission
מצלמה עם HAL
הגרסאות הבאות של מצלמה עם HAL מתעדכנות ב-Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: פרטי המצלמה הסטטית עבור מזהה מצלמה פיזי המגבה לוגי של המצלמה. צפייה תמיכה בריבוי מצלמות. isStreamCombinationSupported
: השיטה הזו תומכת API שעוזר ללקוחות לשלוח שאילתות לגבי תמיכה בהגדרות של סשן. ראו API כדי לשלוח שאילתות לגבי שילובים של מקורות נתונים.
ICameraDeviceSession
-
isReconfigurationNeeded
: שיטה שמציינת למסגרת של המצלמה אם השידור הושלם נדרשת הגדרה מחדש עבור ערכים אפשריים של פרמטרים חדשים של סשנים. הזה עוזרת למנוע עיכובים מיותרים בהגדרה של המצלמה. צפייה שאילתה לגבי הגדרה מחדש של הסשן. - HAL
ממשקי API לניהול מאגר נתונים זמני: ממשקי ה-API האלה מאפשרים ל-HAL למצלמה לשלוח בקשה
חוצים את מסגרת המצלמה רק כאשר יש צורך בכך במקום לאחד אותם
לתעד את הבקשה באמצעות מאגרי הנתונים הזמניים המשויכים אליה בצינור עיבוד הנתונים של המצלמה,
ולכן יכול להיות חיסכון משמעותי בזיכרון.
-
signalStreamFlush
: אותות ל-HAL שהמצלמה עומד לבצעconfigureStreams_3_5
, תקן HAL חייב להחזיר את כל מאגרי הנתונים הזמניים של השידורים הייעודיים. -
configureStreams_3_5
: דומה ל-ICameraDevice3.4.configureStreams
, אבל בתוך בנוסף, המונהstreamConfigCounter
מסופק ל לבדוק מרוץ תהליכים ביןconfigureStreams_3_5
ו-signalStreamFlush
שיחות.
-
עדכונים ל-ICameraDeviceCallback
:
-
requestStreamBuffers
: קריאה חוזרת (callback) סינכרונית שהמצלמה קוראת באמצעות HAL כדי לבקש מהשרת של המצלמה בתהליך אגירת נתונים. צפייהrequestStreamBuffers
-
returnStreamBuffers
: קריאה חוזרת (callback) סינכרונית עבור המצלמה עם HAL כדי להחזיר מאגרי פלט שרת המצלמה. צפייהreturnStreamBuffers
3.4
המקשים הבאים מתווספים למטא-נתונים של המצלמה ב-Android 10.
- פורמטים של תמונות
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- תגי מטא-נתונים של מצלמה
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
ANDROID_HEIC_INFO_SUPPORTED
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- יכולות
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- ערכים של
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
מקשANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- ההגדרות הזמינות של שידור עומק דינמי
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
- ההגדרות הזמינות של שידורי HEIC
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
מודול מצלמה
הגרסאות הבאות של מודול המצלמה מתעדכנות ב-Android 10.
2.5
- הוספת השיטה
notifyDeviceStateChange
לשליחת התראות במכשירים טכנולוגיית HAL של המצלמה כששינויים פיזיים, כמו קיפול, משפיעים על המצלמה מסלול.
2.4
- מכשירים שמושקים עם API ברמת API 29 ומעלה
true
ל-isTorchModeSupported
.
9 Android
גרסת Android 9 כוללת את העדכונים הבאים ל-API2 של המצלמה ממשק HAL.
ממשק API של מצלמה
- הצגת ה-API מרובה מצלמות כדי לתמוך טוב יותר במכשירים עם מספר מצלמות מצלמות שפונות לאותו כיוון, ומאפשרות שימוש בתכונות כמו אפקט בוקה שינוי חלק של מרחק התצוגה. ההגדרה הזו מאפשרת לאפליקציות להציג במכשיר כמה מצלמות כמצלמה אחת. יחידה לוגית (מצלמה לוגית). אפשר לשלוח בקשות תיעוד גם לאדם ספציפי מצלמה דיגיטלית אחת שמקיף את המצלמה הלוגית. צפייה תמיכה במספר מצלמות.
- הצגת פרמטרים של סשן. פרמטרים של סשנים הם קבוצת משנה של פרמטרים זמינים להקלטה שעלולים לגרום לעיכובים חמורים בעיבוד שונה. אפשר לצמצם את העלויות אם הלקוחות מעבירים את הערכים הראשוניים שלהם במהלך האתחול של הפעלת הצילום. צפייה פרמטרים של סשן.
- מוסיף מפתחות נתונים של ייצוב אופטי (OIS) לייצוב ברמת האפליקציה
באפקטים מיוחדים. צפייה
STATISTICS_OIS_SAMPLES
- הוספת תמיכה חיצונית ב-Flash. צפייה
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
- הפונקציה מוסיפה Intent למעקב אחר תנועה בטווח
CAPTURE_INTENT
. צפייהCONTROL_CAPTURE_INTENT_MOTION_TRACKING
- מוציא משימוש את
LENS_RADIAL_DISTORTION
ומוסיףLENS_DISTORTION
במקומו. - הוספת מצבי עיוות של
CaptureRequest
. צפייהDISTORTION_CORRECTION_MODE
- הוספת תמיכה במצלמות USB/UVC חיצוניות במכשירים נתמכים. צפייה
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
מצלמה עם HAL
3.4
עדכונים לגבי ICameraDeviceSession
-
configureStreams_3_4
: הוספת תמיכה ב-sessionParameters
ובמצלמות לוגיות. -
processCaptureRequest_3_4
: הוספת תמיכה בכלילת מזהי מצלמות פיזיים במבנה השידור.
עדכונים לגבי ICameraDeviceCallback
-
processCaptureResult_3_4
: הוספת מטא-נתונים של המצלמה הפיזית בתוצאות הצילום.
3.3
המקשים הבאים מתווספים למטא-נתונים של המצלמה ב-Android 9.
- יכולות
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- תגי מטא-נתונים של מצלמה
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ANDROID_STATISTICS_OIS_DATA_MODE
ANDROID_STATISTICS_OIS_TIMESTAMPS
ANDROID_STATISTICS_OIS_X_SHIFTS
ANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
גרסת Android 8.0 מציגה את Treble. עם Treble, ספק המצלמה HAL חייבים להיות מקושרים. גם Android 8.0 כולל את השיפורים העיקריים הבאים בשירות המצלמה:
- פלטפורמות משותפות: הפעלה של כמה פלטפורמות שחולקים את אותו הדבר
OutputConfiguration
- System API למצבי מצלמה מותאמים אישית
onCaptureQueueEmpty
כדי לקבל מידע נוסף על התכונות האלה, אפשר לעיין בקטעים הבאים.
פלטפורמות משותפות
התכונה הזו מאפשרת רק לקבוצה אחת של מאגרי נתונים זמניים לעודד שני פלטים, כמו תצוגה מקדימה וקידוד וידאו, שמפחיתים את צריכת החשמל והזיכרון. שפת תרגום תמיכה בתכונה הזו, יצרני המכשירים צריכים לוודא שהמצלמה שלהם עם HAL הטמעות HAL של gralloc יכולות ליצור אגירת נתונים מסוג gralloc שמשמשים מספר צרכנים שונים (למשל, מחבר החומרה/ה-GPU והסרטון במקודד), ולא רק צרכן אחד. שירות המצלמה מעביר את דגלים לשימוש צרכני למצלמה HAL ול-gralloc HAL הם צריכים להקצות את הסוגים הנכונים של מאגרי נתונים זמניים, או שהמצלמה עם HAL צריכה להחזיר שגיאה שהשילוב הזה של צרכנים לא נתמך.
לצפייה ב
enableSurfaceSharing
בתיעוד למפתחים.
System API למצבי מצלמה מותאמים אישית
ב-API של המצלמה הציבורית מוגדרים שני מצבי הפעלה: רגילה ומוגבלת
צילום במהירות גבוהה. יש להם סמנטיקה שונה למדי; לדוגמה,
מצב מהירות גבוהה מוגבל לשתי יציאות ספציפיות בו-זמנית לכל היותר. סוגים שונים
יצרני ציוד מקורי הביעו עניין בהגדרת מצבים מותאמים אישית אחרים עבור
יכולות ספציפיות לחומרה. מתחת למכסה, המצב הוא רק מספר שלם
הועברה אל configure_streams
. קישורים להנחיות ולשיטות המומלצות:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
התכונה הזו כוללת קריאה ל-API של המערכת. אפליקציות המצלמה של ה-OEM יכולות להשתמש בה כדי להפעיל במצב מותאם אישית. המצבים האלה חייבים להתחיל בערך מסוג מספר שלם 0x8,000 כדי למנוע התנגשות עם מצבים עתידיים שיתווספו ל-API הציבורי.
כדי לתמוך בתכונה הזו, יצרני ציוד מקורי רק צריכים להוסיף את המצב החדש ל-HAL שלהם. מופעלת על ידי המספר השלם הזה שמועבר ל-HAL ב-Configure_streams, ואז באפליקציית המצלמה המותאמת אישית נעשה שימוש ב-System API.
השם של ה-method הוא
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
קישורים להנחיות ולשיטות המומלצות:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
onCaptureQueueEmpty
מטרת ה-API הזה היא לקצר את זמן האחזור של שינויי בקרה כמו שינוי מרחק התצוגה
להשאיר את תור הבקשות ריק ככל האפשר. onCaptureQueueEmpty
לא נדרשת עבודת HAL, הייתה רק הוספה בצד המסגרת. אפליקציות
כדי לנצל את היתרונות, צריך להוסיף מאזין להתקשרות חזרה ולהשיב
המתאים. בדרך כלל מדובר בשליחת בקשת צילום נוספת למצלמה
במכשיר.
ממשק HIDL של מצלמה
ממשק Camera HIDL הוא גרסה משופרת של ממשק Camera HAL שמשתמשת בממשקי API יציבים שמוגדרים HIDL. כל התכונות ויכולות המצלמה שהוצגו בגרסאות האחרונות 3.4 ו-2.4 (למצלמה). ) הן גם חלק מההגדרות של HIDL.
3.4
תוספות קטנות למטא-נתונים נתמכים ושינויים בתמיכה ב-data_space:
- הוספת מטא-נתונים סטטיים מסוג
ANDROID_SENSOR_OPAQUE_RAW_SIZE
כחובה אם הפורמטRAW_OPAQUE
נתמך. - הוספת
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
סטטי מטא-נתונים כחובה אם יש תמיכה בפורמט RAW כלשהו. - החלפת השדה
camera3_stream_t data_space
לשדה גמיש יותר באמצעות ההגדרה של גרסה 0 של קידוד במרחב נתונים. - תוספות של מטא-נתונים כלליות שזמינות לשימוש ב-HALv3.2 ואילך:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
ANDROID_SENSOR_OPAQUE_RAW_SIZE
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
גרסה משנית של HAL עם יכולת מורחבת:
- עדכוני API לעיבוד מחדש של OPAQUE ו-YUV.
- תמיכה בסיסית במאגרי פלט עומק.
- הוספת השדה
data_space
אלcamera3_stream_t
. - הוספת שדה סבב אל
camera3_stream_t
. - הוספה של מצב הפעולה של הגדרת הסטרימינג ממצלמה אל
camera3_stream_configuration_t
3.2
גרסה משנית של HAL עם יכולת מורחבת:
- מוציא משימוש את
get_metadata_vendor_tag_ops
. כדאי להשתמש ישget_vendor_tag_ops
ב-camera_common.h
במקום זאת. - מוציא משימוש את
register_stream_buffers
. כל מאגרי הנתונים הזמניים של gralloc שסופקו על ידי framework ל-HAL ב-process_capture_request
עשויים להיות חדשים בכל שלב. - הוספת תמיכה חלקית בתוצאה.
process_capture_result
יכולים להיות נקרא מספר פעמים עם קבוצת משנה של התוצאות הזמינות, זמינה. - מוסיפים את התבנית הידנית אל
camera3_request_template
. קמפיינים לקידום אפליקציות יכולים להשתמש בתבנית הזו כדי לשלוט ישירות בהגדרות הצילום. - עיבוד מחדש של המפרטים הדו-כיווניים של הסטרימינג והקלט.
- שינוי נתיב ההחזרה של מאגר הנתונים הזמני של הקלט מאגר הנתונים הזמני מוחזר
process_capture_result
במקוםprocess_capture_request
.
3.1
גרסה משנית של HAL עם יכולת מורחבת:
- הדגלים של שימוש לצרכנים מועברים ל-HAL ב-
configure_streams
. - למחיקת כל הבקשות/מאגרי הנתונים בזמן ההפעלה מהר ככל האפשר.
3.0
גרסה ראשונה של HAL עם יכולות מורחבות:
- שינוי משמעותי בגרסה כי ה-ABI שונה לגמרי. לא היה שינוי ב יכולות חומרה נדרשות או דגם תפעולי החל מגרסה 2.0.
- ממשקים של בקשת קלט ותור בסטרימינג שעברו עיבוד: קריאות של Framework ל-HAL עם הבקשה הבאה ומאגרי הנתונים הזמניים של הסטרימינג כבר הוסרו. תמיכה בסנכרון עם framework כלולה, הנדרשות להטמעות יעילות.
- טריגרים הועברו לבקשות, רוב ההתראות הפכו לתוצאות.
- אוחדו כל הקריאות החוזרות למסגרת למבנה אחד, וכל ההגדרות
שימוש ב-methods בקריאה אחת ל-
initialize()
. - הפיכת הגדרות השידור לקריאה יחידה כדי לפשט את ניהול השידור.
שידורים דו-כיווניים מחליפים את
STREAM_FROM_STREAM
ליצור. - סמנטיקה של מצב מוגבל במכשירי חומרה ישנים/מוגבלים.
2.0
גרסה ראשונית של HAL עם יכולת מורחבת (Android 4.2) [camera2.h]:
- מספיק להטמעה של
android.hardware.Camera
הקיים API. - המדיניות מאפשרת להפעיל תור ZSL בשכבת שירות המצלמה.
- לא נבדק לגבי תכונות חדשות, כמו בקרת צילום ידנית, Bayer RAW תיעוד, עיבוד מחדש של נתוני RAW וכו'.
1.0
מצלמת Android ראשונית HAL (Android 4.0) [camera.h]:
- הומר משכבת ההפשטה של CameraHardwareInterface.
- תומך ב-API של
android.hardware.Camera
.
היסטוריית הגרסאות של מודול המצלמה
הקטע הזה מכיל מידע על ניהול גרסאות של מודול עבור חומרת המצלמה
מבוסס על camera_module_t.common.module_api_version
. שני הסוגים
רוב הספרות ההקסדצימליות המשמעותיות ביותר מייצגות את הגרסה הראשית, ושני
שמייצגים את הגרסה המשנית.
2.4
בגרסה הזו של מודול המצלמה מתווספים השינויים הבאים ב-API:
- תמיכה במצב לפיד. ה-framework יכול להפעיל את מצב 'לפיד' עבור כל
מצלמה עם יחידת פלאש, בלי לפתוח את המצלמה.
למכשיר המצלמה יש עדיפות גבוהה יותר לגישה ליחידת הפלאש מאשר למצלמה
מודול; פתיחת התקן מצלמה מכבה את הפנס אם הוא הופעל
דרך ממשק המודול. כשיש התנגשויות בין משאבים, כמו
open()
מופעלת כדי לפתוח מכשיר עם מצלמה, מודול HAL של המצלמה חייב להודיע ל-framework דרך קריאה חוזרת של סטטוס הלפיד שהלפיד. הושבת. - תמיכה במצלמה חיצונית (לדוגמה, מצלמה בחיבור USB).
עדכוני API מציינים שהפרטים הסטטיים של המצלמה זמינים רק כשהמצלמה
מחוברות ומוכן לשימוש עבור מצלמות חיצוניות בחיבור חם. שיחות סטטיות
כשסטטוס המצלמה לא מוצג, פרטי השיחות לא תקינים
CAMERA_DEVICE_STATUS_PRESENT
המסגרת מסתמכים רק על סטטוס המכשיר משנה את הקריאה החוזרת (callback) כדי לנהל את רשימת המצלמות החיצוניות הזמינות. - טיפים לבוררות במצלמה מוסיף תמיכה בציון מפורש
מספר התקני המצלמה שניתן לפתוח ולהשתמש בהם בו-זמנית. שפת תרגום
לציין שילובים חוקיים של מכשירים,
resource_cost
צריך תמיד להגדיר שדות שלconflicting_devices
מבנה אחד (camera_info
) הוחזר על ידיget_camera_info
שיחה. - השיטה להפעלת המודול. ביוזמת שירות המצלמה אחרי שמודול ה-HAL נטען, כדי לאפשר אתחול חד-פעמי של HAL. היא נקראת לפני הפעלה של שיטות מודול אחרות.
2.3
בגרסה הזו של מודול המצלמה יש תמיכה במצלמה פתוחה מדור קודם עם תמיכה במכשירי HAL.
אפליקציית ה-framework יכולה להשתמש בה כדי לפתוח את המכשיר מהמצלמה בגרסת HAL נמוכה יותר של המכשיר
מכשיר עם ממשק HAL, אם אותו מכשיר יכול לתמוך בכמה גרסאות API של מכשירים.
השיחה הפתוחה של מודול החומרה הסטנדרטי
(common.methods->open
) המשך
כדי לפתוח את המכשיר של המצלמה עם הגרסה הנתמכת האחרונה,
גם את הגרסה שמופיעה ב-camera_info_t.device_version
.
2.2
בגרסה הזו של מודול המצלמה מתווספים תמיכה בתג הספק מהמודול, וגם
מוציא משימוש את vendor_tag_query_ops
הישנים שקודם לכן היו בלבד
שאפשר לגשת אליהם כשהמכשיר פתוח.
2.1
הגרסה הזו של מודול המצלמה מוסיפה תמיכה בקריאות חוזרות אסינכרוניות
framework ממודול ה-HAL של המצלמה, שמשמש לעדכון ה-framework
על שינויים במצב של מודול המצלמה. מודולים שמספקים ערך
השיטה set_callbacks()
חייבת לדווח על מספר הגרסה הזה לפחות.
2.0
מודולים של מצלמה שמדווחים על מספר הגרסה הזה מטמיעים את הגרסה השנייה
של ממשק ה-HAL של מודול המצלמה. מכשירי מצלמה שניתן לפתוח באמצעות זה
המודול עשוי לתמוך בגרסה 1.0 או בגרסה 2.0 של התקן המצלמה
ממשק HAL. השדה device_version
ב-camera_info הוא תמיד
חוקי; השדה static_camera_characteristics
של
camera_info
חוקי אם השדה device_version
גרסה 2.0 ומעלה.
1.0
מודולים של מצלמה שמדווחים על מספרי הגרסאות האלה מטמיעים את
ממשק HAL של מודול המצלמה. כל מכשירי המצלמה שאפשר לפתוח באמצעותו
המודול תומך רק בגרסה 1 של מכשיר המצלמה עם HAL.
device_version
ו-static_camera_characteristics
השדות של camera_info
אינם חוקיים. רק
המודול הזה יכול לתמוך ב-API של android.hardware.Camera
מכשירים.