תמיכה בגרסת מצלמה

דף זה מפרט הבדלי גרסאות במסכי HAL של מצלמה, ממשקי API ומבחני חבילת בדיקת תאימות (CTS) הקשורים. זה גם מכסה כמה שינויים ארכיטקטוניים שנעשו כדי להקשיח ולאבטח את מסגרת המצלמה באנדרואיד 7.0, את המעבר ל-Treble באנדרואיד 8.0 ואת העדכונים שעל הספקים לבצע כדי לתמוך בשינויים אלה ביישומי המצלמה שלהם.

טרמינולוגיה

המונחים הבאים משמשים בדף זה:

מצלמה API1
מסגרת המצלמה ברמת האפליקציה במכשירי אנדרואיד 4.4 ומטה, חשופה דרך מחלקת android.hardware.Camera .
מצלמה API2
מסגרת המצלמה ברמת האפליקציה במכשירי אנדרואיד 5.0 ומעלה, חשופה דרך חבילת android.hardware.camera2 .
מצלמה HAL
שכבת מודול המצלמה המיושמת על ידי ספקי SoC. המסגרות הציבוריות ברמת האפליקציה בנויות על גבי המצלמה HAL.
מצלמה HAL3.1
גרסה של מכשיר המצלמה HAL שוחררה עם אנדרואיד 4.4.
מצלמה HAL3.2
גרסה של מכשיר המצלמה HAL שוחררה עם אנדרואיד 5.0.
מצלמה API1 CTS
סט בדיקות CTS של מצלמה הפועלות על גבי Camera API1.
מצלמה API2 CTS
סט נוסף של בדיקות CTS של מצלמה הפועלות על גבי Camera API2.
לְשַׁלֵשׁ
מפריד את הטמעת הספק (תוכנה ספציפית למכשיר, ברמה נמוכה יותר שנכתבה על ידי יצרני סיליקון) ממסגרת מערכת ההפעלה אנדרואיד באמצעות ממשק ספק חדש.
HIDL
שפת הגדרת ממשק HAL הוצגה עם Treble ומשמשת לציון הממשק בין HAL למשתמשים שלו.
VTS
חבילת בדיקות ספק הוצגה לצד טרבל.

ממשקי API של מצלמה

אנדרואיד כולל את ממשקי ה-API של המצלמה הבאים.

מצלמה API1

אנדרואיד 5.0 הוצא משימוש Camera API1, אשר ממשיך להתבטל כאשר פיתוח פלטפורמה חדשה מתמקד ב-Camera API2. עם זאת, תקופת ההפסקה תהיה ארוכה, ומהדורות אנדרואיד ימשיכו לתמוך באפליקציות Camera API1 למשך זמן מה. באופן ספציפי, התמיכה נמשכת עבור:

  • ממשקי מצלמה API1 עבור אפליקציות. אפליקציות מצלמה שנבנו על גבי Camera API1 אמורות לעבוד כפי שהן פועלות במכשירים המריצים גרסאות נמוכות יותר של אנדרואיד.
  • גרסאות HAL למצלמה. כולל תמיכה במצלמה HAL1.0.

מצלמה API2

המסגרת של Camera API2 חושפת את בקרת המצלמה ברמה נמוכה יותר לאפליקציה, כולל זרימת רצף/זרימה יעילה של אפס עותקים ובקרות פר-פריים של חשיפה, רווח, רווחי איזון לבן, המרת צבע, דה-נוז, חידוד ועוד. לפרטים, צפה בסקירת הווידאו של Google I/O .

אנדרואיד 5.0 ומעלה כולל Camera API2; עם זאת, ייתכן שמכשירים המריצים אנדרואיד 5.0 ואילך לא יתמכו בכל התכונות של Camera API2. המאפיין android.info.supportedHardwareLevel שאפליקציות יכולות לבצע שאילתות דרך ממשקי ה-API2 של Camera מדווח על אחת מרמות התמיכה הבאות:

  • LEGACY : מכשירים אלו חושפים יכולות לאפליקציות דרך ממשקי ה-API2 של Camera שהן כמעט אותן יכולות לאלו שנחשפו לאפליקציות דרך ממשקי ה-API1 של המצלמה. קוד ה-frameswork מדור קודם מתרגם באופן רעיוני קריאות Camera API2 לקריאות Camera API1; התקנים מדור קודם אינם תומכים בתכונות Camera API2 כגון בקרות לכל מסגרת.
  • LIMITED : מכשירים אלה תומכים בחלק מיכולות ה-API2 של Camera (אך לא בכולן) ועליהם להשתמש ב-Camera HAL 3.2 ומעלה.
  • FULL : מכשירים אלה תומכים בכל היכולות העיקריות של Camera API2 וחייבים להשתמש במצלמה HAL 3.2 ומעלה וב-Android 5.0 ומעלה.
  • LEVEL_3 : מכשירים אלה תומכים בעיבוד מחדש של YUV ולכידת תמונה RAW, יחד עם תצורות זרם פלט נוספות.
  • EXTERNAL : מכשירים אלה דומים להתקנים LIMITED למעט כמה יוצאי דופן; לדוגמה, ייתכן שחלק מהמידע על החיישן או העדשה לא ידווח או שיש להם קצבי פריימים פחות יציבים. רמה זו משמשת עבור מצלמות חיצוניות כגון מצלמות USB.

יכולות בודדות נחשפות דרך המאפיין android.request.availableCapabilities בממשקי Camera API2. התקנים FULL דורשים בין היתר את היכולות MANUAL_SENSOR ו- MANUAL_POST_PROCESSING . יכולת RAW היא אופציונלית אפילו עבור מכשירי FULL . מכשירים LIMITED יכולים לפרסם כל תת-קבוצה של היכולות הללו, כולל אף אחת מהן. עם זאת, יש להגדיר תמיד את יכולת BACKWARD_COMPATIBLE .

רמת החומרה הנתמכת של המכשיר, כמו גם היכולות הספציפיות של Camera API2 שבהן הוא תומך, זמינות כדגלי התכונה הבאים כדי לאפשר סינון ב-Google Play של יישומי מצלמה של Camera 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

מכשירים עם אנדרואיד 5.0 ומעלה חייבים לעבור את מבחני המצלמה של Camera API1 CTS, Camera API2 CTS ו-CTS Verifier.

מכשירים שאינם כוללים מימוש Camera HAL3.2 ואינם מסוגלים לתמוך בממשקי Camera API2 המלאים עדיין חייבים לעבור את מבחני Camera API2 CTS. עם זאת, המכשיר פועל במצב Camera API2 LEGACY (בו קריאות Camera API2 ממופות קונספטואלית לקריאות Camera API1) כך שכל בדיקות Camera API2 CTS הקשורות לתכונות או יכולות מעבר ל-Camera API1 מדלגות באופן אוטומטי.

במכשירים מדור קודם, בדיקות Camera API2 CTS המופעלות משתמשות בממשקים וביכולות הציבוריות של Camera API1 הקיימות ללא דרישות חדשות. באגים שנחשפים (וגורמים לכשל של Camera API2 CTS) הם באגים שכבר קיימים ב- Camera HAL הקיים של המכשיר, ולכן יימצאו על ידי אפליקציות Camera API1 הקיימות. אנחנו לא מצפים להרבה באגים מסוג זה (עם זאת, יש לתקן כל באג כזה כדי לעבור את מבחני Camera API2 CTS).

דרישות VTS

מכשירים עם אנדרואיד 8.0 ואילך עם יישומי HAL משולבים חייבים לעבור את מבחני Camera VTS .

הקשחת מסגרת המצלמה

כדי להקשיח את אבטחת מסגרת המדיה והמצלמה, אנדרואיד 7.0 מעביר את שירות המצלמה משרת המדיה. החל מאנדרואיד 8.0, כל מצלמה HAL משולבת פועלת בתהליך נפרד משירות המצלמה. ייתכן שהספקים יצטרכו לבצע שינויים ב-HAL של המצלמה בהתאם לגרסאות ה-API וה-HAL שבשימוש. הסעיפים הבאים מפרטים שינויים ארכיטקטוניים ב- AP1 ו- AP2 עבור HAL1 ו- HAL3, כמו גם דרישות כלליות.

שינויים אדריכליים עבור API1

הקלטת וידאו API1 עשויה להניח שהמצלמה ומקודד הווידאו פעילים באותו תהליך. בעת שימוש ב-API1 ב:

  • HAL3, כאשר שירות המצלמה משתמש ב-BufferQueue כדי להעביר מאגרים בין תהליכים, אין צורך בעדכון ספק .

    מצלמת Android 7.0 וערימת מדיה ב-API1 ב-HAL3

    איור 1. מצלמת Android 7.0 וערימת מדיה ב-API1 ב-HAL3

  • HAL1, התומך בהעברת מטא נתונים במאגרי וידאו, על הספקים לעדכן את ה-HAL כדי להשתמש kMetadataBufferTypeNativeHandleSource . ( kMetadataBufferTypeCameraSource אינו נתמך עוד באנדרואיד 7.0.)

    מצלמת Android 7.0 וערימת מדיה ב-API1 ב-HAL1

    איור 2. מצלמת Android 7.0 וערימת מדיה ב-API1 ב-HAL1

שינויים אדריכליים עבור API2

עבור API2 ב-HAL1 או HAL3, BufferQueue מעביר מאגרים כך שהנתיבים האלה ממשיכים לעבוד. ארכיטקטורת אנדרואיד 7.0 עבור API2 ב:

  • HAL1 אינו מושפע ממהלך שירות המצלמה, ואין צורך בעדכון ספק .
  • HAL3 מושפע , אך אין צורך בעדכון ספק :

    מצלמת Android 7.0 וערימת מדיה ב-API2 ב-HAL3

    איור 3. מצלמת Android 7.0 וערימת מדיה ב-API2 ב-HAL3

דרישות נוספות

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

  • כללי. התקנים דורשים רוחב פס נוסף עקב IPC, מה שעשוי להשפיע על מקרי שימוש במצלמה רגישים לזמן כגון הקלטת וידאו במהירות גבוהה. ספקים יכולים למדוד את ההשפעה בפועל על ידי הפעלת android.hardware.camera2.cts.PerformanceTest ואפליקציית המצלמה של Google עבור הקלטת וידאו במהירות גבוהה של 120/240 FPS. התקנים דורשים גם כמות קטנה של זיכרון RAM נוסף כדי ליצור את התהליך החדש.
  • העבר מטא נתונים במאגרי וידאו ( HAL1 בלבד ). אם HAL1 מאחסן מטא נתונים במקום נתוני מסגרת YUV אמיתיים במאגרי וידאו, ה-HAL חייב להשתמש kMetadataBufferTypeNativeHandleSource כסוג מאגר המטא נתונים ולהעביר את VideoNativeHandleMetadata במאגרי וידאו. ( kMetadataBufferTypeCameraSource כבר לא נתמך ב-Android 7.0.) עם VideoNativeHandleMetadata , מסגרות מצלמה ומדיה מסוגלות להעביר את מאגרי הווידאו בין תהליכים על ידי הסידרה והסידרה של נקודות האחיזה המקוריות כהלכה.
  • כתובת ידית המאגר לא תמיד מאחסנת את אותו מאגר ( HAL3 בלבד ). עבור כל בקשת לכידה, HAL3 מקבל כתובות של ידיות חיץ. HAL לא יכול להשתמש בכתובות כדי לזהות מאגרים מכיוון שהכתובות עשויות לאחסן נקודת אחיזה נוספת לאחר שה-HAL מחזיר את המאגר. עליך לעדכן את ה-HAL כדי להשתמש באחיזה מאגר לזיהוי המאגרים. לדוגמה, HAL מקבלת כתובת מאגר A, המאחסנת את ידית המאגר A. לאחר ש-HAL מחזירה את ידית המאגר A, כתובת ידית המאגר A עשויה לאחסן את ידית המאגר B בפעם הבאה שה-HAL יקבל אותה.
  • עדכון מדיניות SELinux עבור שרת המצלמה. אם מדיניות SELinux הספציפית למכשיר נותנת הרשאות שרת מדיה להפעיל את המצלמה, עליך לעדכן את מדיניות SELinux כדי לתת לשרת המצלמה הרשאות מתאימות. אנו לא מעודדים לשכפל את מדיניות ה-SELinux של שרת המדיה עבור שרת המצלמה (כיוון ששרת מדיה ושרת מצלמה בדרך כלל דורשים משאבים שונים במערכת). לשרת המצלמה צריכה להיות רק ההרשאות הדרושות לביצוע פונקציונליות של המצלמה ויש להסיר כל הרשאות מיותרות הקשורות למצלמה בשרת המדיה.
  • הפרדה בין המצלמה HAL לשרת המצלמה. אנדרואיד 8.0 ואילך מפרידים בנוסף את ה-HAL של המצלמה המקושרת בתהליך שונה משרת המצלמה. IPC עובר דרך ממשקים מוגדרים HIDL .

מַתַן תוֹקֵף

עבור כל המכשירים הכוללים מצלמה ומריצים אנדרואיד 7.0, ודא את היישום על ידי הפעלת Android 7.0 CTS. למרות ש-Android 7.0 אינו כולל בדיקות CTS חדשות המאמתות שינויים בשירות המצלמה, בדיקות CTS קיימות נכשלות אם לא ביצעת את העדכונים המצוינים למעלה.

עבור כל המכשירים הכוללים מצלמה ומריצים אנדרואיד 8.0 ומעלה, אמת את הטמעת הספק על ידי הפעלת VTS.

היסטוריית גרסאות HAL של המצלמה

לרשימה של בדיקות זמינות להערכת ה-Android Camera HAL, עיין ברשימת בדיקת המצלמה HAL .

אנדרואיד 10

אנדרואיד 10 מציגה את העדכונים הבאים.

ממשק API של מצלמה

מצלמה HAL

גרסאות ה-HAL הבאות של המצלמה מעודכנות באנדרואיד 10.

3.5

ICameraDevice

ICameraDeviceSession

  • isReconfigurationNeeded : שיטה שאומרת למסגרת המצלמה אם נדרשת תצורה מחדש של זרם מלאה עבור ערכי פרמטרי הפעלה חדשים אפשריים. זה עוזר למנוע עיכובים מיותרים בתצורה מחדש של המצלמה. ראה שאילתת תצורה מחדש של הפעלה .
  • ממשקי API לניהול חוצץ של HAL : ממשקי API אלה מאפשרים ל-HAL של המצלמה לבקש מאגרים ממסגרת המצלמה רק כאשר הדבר נדרש במקום לצמוד כל בקשת לכידה עם המאגרים המשויכים לה לאורך כל צינור המצלמה, וכתוצאה מכך חיסכון משמעותי בזיכרון.
    • signalStreamFlush : מאותת ל-HAL ששירות המצלמה עומד לבצע configureStreams_3_5 ושה-HAL חייב להחזיר את כל המאגרים של זרמים ייעודיים.
    • configureStreams_3_5 : דומה ל- ICameraDevice3.4.configureStreams , אך בנוסף, מונה streamConfigCounter מסופק כדי לבדוק אם יש מצב מירוץ בין ה- configureStreams_3_5 לבין קריאות signalStreamFlush .

עדכונים ל- ICameraDeviceCallback :

  • requestStreamBuffers : התקשרות חוזרת סינכרונית שהמצלמה HAL מתקשרת כדי לבקש משרת המצלמה מאגרים. ראה requestStreamBuffers .
  • returnStreamBuffers : התקשרות חוזרת סינכרונית עבור המצלמה HAL להחזרת מאגרי פלט לשרת המצלמה. ראה returnStreamBuffers .

3.4

המקשים הבאים מתווספים למטא נתונים של המצלמה באנדרואיד 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

מודול מצלמה

גרסאות מודול המצלמה הבאות מעודכנות באנדרואיד 10.

2.5

  • מוסיף את שיטת notifyDeviceStateChange למכשירים כדי להודיע ​​למצלמה HAL כאשר שינויים פיזיים, כגון קיפול, משפיעים על המצלמה והניתוב.

2.4

  • מכשירים המופעלים עם API ברמה 29 ומעלה חייבים לדווח true עבור isTorchModeSupported .

אנדרואיד 9

מהדורת אנדרואיד 9 מציגה את העדכונים הבאים לממשק API2 של המצלמה ולממשק HAL.

ממשק API של מצלמה

  • מציג את ה-API של ריבוי מצלמות כדי לתמוך טוב יותר במכשירים עם מצלמות מרובות הפונות לאותו כיוון, מה שמאפשר תכונות כמו בוקה וזום חלק. זה מאפשר לאפליקציות להציג מצלמות מרובות במכשיר כיחידה לוגית אחת (מצלמה לוגית). ניתן לשלוח בקשות לכידה גם למכשירי מצלמה בודדים המוקפים במצלמה לוגית אחת. ראה תמיכה בריבוי מצלמות .
  • מציג פרמטרים של הפעלה. פרמטרי הפעלה הם תת-קבוצה של פרמטרי הלכידה הזמינים שעלולים לגרום לעיכובים חמורים בעיבוד בעת שינוי. ניתן להפחית עלויות אלו אם לקוחות יעבירו את הערכים ההתחלתיים שלהם במהלך אתחול הפעלת הלכידה. ראה פרמטרי הפעלה .
  • מוסיף מפתחות נתונים לייצוב אופטי (OIS) לייצוב ואפקטים ברמת האפליקציה. ראה STATISTICS_OIS_SAMPLES .
  • מוסיף תמיכה בפלאש חיצוני. ראה CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • מוסיף כוונה למעקב אחר תנועה ב- 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

עדכונים ל- ICameraDeviceCallback

3.3

המקשים הבאים מתווספים למטא נתונים של המצלמה באנדרואיד 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

אנדרואיד 8.0

מהדורת אנדרואיד 8.0 מציגה את Treble. עם טרבל, יישומי מצלמת HAL של הספק חייבים להיות משולבים . אנדרואיד 8.0 מכיל גם את השיפורים העיקריים הבאים לשירות המצלמה:

  • משטחים משותפים: אפשר משטחים מרובים החולקים את אותה OutputConfiguration
  • מערכת API עבור מצבי מצלמה מותאמים אישית
  • onCaptureQueueEmpty

עיין בסעיפים למטה למידע נוסף על תכונות אלה.

משטחים משותפים

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

עיין בתיעוד המפתחים של enableSurfaceSharing לפרטים נוספים.

מערכת API עבור מצבי מצלמה מותאמים אישית

ה-API של המצלמה הציבורית מגדיר שני מצבי פעולה: הקלטה רגילה ומוגבלת במהירות גבוהה. יש להם סמנטיקה שונה למדי; לדוגמה, מצב מהירות גבוה מוגבל לכל היותר לשתי יציאות ספציפיות בו-זמנית. יצרני OEM שונים הביעו עניין בהגדרת מצבים מותאמים אישית אחרים עבור יכולות ספציפיות לחומרה. מתחת למכסה המנוע, המצב הוא רק מספר שלם המועבר ל- configure_streams . ראה: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .

תכונה זו כוללת קריאת API למערכת שבה אפליקציות מצלמות OEM יכולות להשתמש כדי להפעיל מצב מותאם אישית. מצבים אלה חייבים להתחיל בערך שלם 0x8000 כדי למנוע התנגשות עם מצבים עתידיים שנוספו ל-API הציבורי.

כדי לתמוך בתכונה זו, יצרני ציוד מקורי רק צריכים להוסיף את המצב החדש ל-HAL שלהם, המופעל על ידי המספר השלם הזה שמועבר ל-HAL ב-configure_streams, ולאחר מכן לגרום לאפליקציית המצלמה המותאמת שלהם להשתמש ב-API של המערכת.

שם השיטה הוא android.hardware.camera2.CameraDevice#createCustomCaptureSession . ראה: frameworks/base/core/java/android/hardware/camera2/CameraDevice .

onCaptureQueueEmpty

מטרת ה-API הזה היא לצמצם את זמן האחזור של שינויי בקרה כמו זום על ידי שמירה על תור הבקשות ריק ככל האפשר. onCaptureQueueEmpty אינו דורש עבודת HAL; זה היה אך ורק תוספת בצד המסגרת. אפליקציות שרוצות לנצל את זה צריכות להוסיף מאזין להתקשרות חזרה ולהגיב כראוי. בדרך כלל זה על ידי שליחת בקשת צילום נוספת למכשיר המצלמה.

ממשק HIDL למצלמה

ממשק המצלמה HIDL הוא שיפוץ מלא של ממשק המצלמה 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 שסופקו על ידי המסגרת ל-HAL ב- process_capture_request עשויים להיות חדשים בכל עת.
  • הוסף תמיכה חלקית בתוצאה. process_capture_result עשוי להיקרא מספר פעמים עם תת-קבוצה של התוצאות הזמינות לפני שהתוצאה המלאה תהיה זמינה.
  • הוסף תבנית ידנית ל- camera3_request_template . יישומים עשויים להשתמש בתבנית זו כדי לשלוט ישירות בהגדרות הלכידה.
  • עבד מחדש את מפרטי זרם הקלט הדו-כיווני.
  • שנה את נתיב ההחזרה של מאגר הקלט. המאגר מוחזר ב- process_capture_result במקום process_capture_request .

3.1

עדכון קטן של HAL עם יכולת מורחבת:

  • configure_streams מעביר דגלי שימוש לצרכן ל-HAL.
  • שיחת ניקוי כדי לבטל את כל הבקשות/המאגרים בטיסה מהר ככל האפשר.

3.0

גרסה ראשונה של HAL עם יכולת מורחבת:

  • שינוי גרסה מרכזי מאז ABI שונה לחלוטין. אין שינוי ביכולות החומרה הנדרשות או בדגם התפעולי מ-2.0.
  • ממשקי בקשת קלט ותורי זרימה עיבדו מחדש: מסגרת קריאות ל-HAL עם הבקשה הבאה ומאגרי זרימה כבר פנויים בתור. תמיכה במסגרת סינכרון כלולה, הכרחית להטמעות יעילות.
  • טריגרים הועברו לבקשות, רוב ההתראות לתוצאות.
  • איחד את כל ההתקשרויות למסגרת למבנה אחד, ואת כל שיטות ההגדרה לקריאה אחת initialize() .
  • הפך את תצורת הזרם לשיחה אחת כדי לפשט את ניהול הזרם. זרמים דו-כיווניים מחליפים את המבנה STREAM_FROM_STREAM .
  • סמנטיקה במצב מוגבל עבור התקני חומרה ישנים/מוגבלים.

2.0

שחרור ראשוני של HAL עם יכולת מורחבת (אנדרואיד 4.2) [camera2.h]:

  • מספיק ליישום android.hardware.Camera API קיים.
  • מאפשר תור ZSL בשכבת שירות המצלמה.
  • לא נבדק עבור תכונות חדשות כגון בקרת לכידה ידנית, לכידת Bayer RAW, עיבוד מחדש של נתוני RAW וכו'.

1.0

מצלמת Android ראשונית HAL (אנדרואיד 4.0) [camera.h]:

  • הומר משכבת ​​ההפשטה של ​​C++ CameraHardwareInterface.
  • תומך ב- android.hardware.Camera API.

היסטוריית גרסאות מודול המצלמה

סעיף זה מכיל מידע על ניהול גרסאות של מודול עבור מודול החומרה של המצלמה, המבוסס על camera_module_t.common.module_api_version . שתי ספרות המשושה המשמעותיות ביותר מייצגות את הגרסה הראשית, והשתיים הפחות משמעותיות מייצגות את הגרסה המשנית.

2.4

גרסת מודול המצלמה הזו מוסיפה את השינויים הבאים ב-API:

  1. תמיכה במצב לפיד. המסגרת יכולה להפעיל מצב לפיד עבור כל מכשיר מצלמה שיש לו יחידת פלאש, מבלי לפתוח מכשיר מצלמה. להתקן המצלמה יש עדיפות גבוהה יותר לגשת ליחידת הפלאש מאשר למודול המצלמה; פתיחת התקן מצלמה מכבה את הלפיד אם הוא היה מופעל דרך ממשק המודול. כאשר יש התנגשויות משאבים כלשהן, כגון open() נקרא לפתוח התקן מצלמה, מודול HAL של המצלמה חייב להודיע ​​למסגרת באמצעות החזרה למצב הלפיד שמצב הלפיד כבוי.
  2. תמיכה במצלמה חיצונית (לדוגמה, מצלמת USB עם חיבור חם). עדכוני ה-API מציינים שהמידע הסטטי של המצלמה זמין רק כאשר המצלמה מחוברת ומוכנה לשימוש עבור מצלמות חיצוניות עם חיבור חם. שיחות לקבלת מידע סטטי הן שיחות לא חוקיות כאשר סטטוס המצלמה אינו CAMERA_DEVICE_STATUS_PRESENT . המסגרת נסמכת אך ורק על פניות לשינוי מצב המכשיר כדי לנהל את רשימת המצלמות החיצוניות הזמינות.
  3. רמזים לבוררות במצלמה. מוסיף תמיכה לציון מפורש של מספר התקני המצלמה שניתן לפתוח ולהשתמש בו זמנית. כדי לציין שילובים חוקיים של התקנים, יש להגדיר תמיד את השדות resource_cost ו- conflicting_devices במבנה camera_info המוחזר על ידי הקריאה get_camera_info .
  4. שיטת אתחול המודול. נקרא על ידי שירות המצלמה לאחר טעינת מודול HAL כדי לאפשר אתחול חד פעמי של ה-HAL. זה נקרא לפני הפעלת שיטות מודול אחרות.

2.3

גרסת מודול מצלמה זו מוסיפה תמיכה במכשירי HAL עם מצלמה מדור קודם. המסגרת יכולה להשתמש בה כדי לפתוח את מכשיר המצלמה כמכשיר תחתון בגרסת HAL HAL אם אותו מכשיר יכול לתמוך במספר גרסאות API של מכשיר. הקריאה הפתוחה של מודול החומרה הסטנדרטי ( common.methods->open ) ממשיכה לפתוח את התקן המצלמה עם הגרסה האחרונה שנתמכת, שהיא גם הגרסה הרשומה ב- camera_info_t.device_version .

2.2

גרסת מודול המצלמה הזו מוסיפה תמיכה בתגי ספק מהמודול, ומוציאה משימוש את ה- vendor_tag_query_ops הישנים שהיו נגישים בעבר רק עם מכשיר פתוח.

2.1

גרסת מודול מצלמה זו מוסיפה תמיכה בהתקשרות א-סינכרונית למסגרת ממודול HAL של המצלמה, המשמש להודיע ​​למסגרת על שינויים במצב מודול המצלמה. מודולים המספקים שיטת 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 יכול להיות נתמך על ידי מודול זה והמכשירים שלו.