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

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

    מצלמה ומדיה ב-Android 7.0
סטאק ב-API1 על HAL3

    איור 1. מצלמה ומדיה עם Android 7.0 סטאק ב-API1 על HAL3

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

    מצלמה ומדיה ב-Android 7.0
מקבץ ב-API1 ב-HAL1

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

שינויים ארכיטקטוניים של API2

ב-API2 ב-HAL1 או ב-HAL3, BufferQueue מעביר את מאגר הנתונים הזמני כדי שהנתיבים האלה ימשיכו לפעול לעבודה. ארכיטקטורת Android 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 במאגרי נתונים זמניים של סרטונים. (ב-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 של מצלמה

מצלמה עם HAL

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

3.5

ICameraDevice

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

עדכונים לגבי ICameraDeviceCallback

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:

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