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

דף זה מפרט את הבדלי גרסה ב שכבות HAL מצלמה, APIs, ומשויכים תאימות המבחן Suite (CTS) בדיקות. הוא מכסה גם כמה שינויים ארכיטקטוניים שנעשו להקשיח ולאבטח את מסגרת המצלמות ב- Android 7.0, את המעבר ל- Treble ב- Android 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 של המצלמה הפועלות על גבי מצלמת API1.
מצלמת API2 CTS
קבוצה נוספת של בדיקות CTS למצלמה הפועלות על גבי מצלמת API2.
לְשַׁלֵשׁ
מפריד בין יישום הספק (תוכנה ספציפית למכשירים ברמה נמוכה יותר שנכתבה על ידי יצרני סיליקון) ממסגרת מערכת ההפעלה אנדרואיד באמצעות ממשק ספק חדש.
HIDL
שפת הגדרת ממשק HAL הציג עם טרבל ו משמש לציון הממשק בין HAL והמשתמשים בו.
VTS
חבילת בדיקות Vendor הציגה לצד טרבל.

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

Android כולל את ה- API של המצלמות הבאות.

מצלמת API1

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

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

מצלמת API2

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

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

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

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

רמת החומרה הנתמכת של המכשיר, כמו גם היכולות הספציפיות של Camera 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

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

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

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

דרישות VTS

מכשירים בעלי מערכת הפעלה Android 8.0 ומעלה עם הטמעות HAL binderized חייב לעבור את מצלמה בדיקות VTS .

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

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

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

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

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

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

    איור 1. אנדרואיד 7.0 מצלמה ומדיה המחסנית ב API1 על HAL3

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

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

    איור 2. אנדרואיד 7.0 מצלמה ומדיה המחסנית ב API1 על HAL1

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

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

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

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

    איור 3. אנדרואיד 7.0 מצלמה ומדיה המחסנית ב API2 על HAL3

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

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

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

מַתַן תוֹקֵף

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

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

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

לקבלת רשימה של בדיקות זמינות להערכת HAL מצלמת אנדרואיד, לראות את מצלמת Checklist בדיקת HAL .

אנדרואיד 10

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

מצלמת API

מצלמה HAL

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

3.5

ICameraDevice

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

ICameraDeviceSession

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

עדכוני ICameraDeviceCallback :

  • requestStreamBuffers : התקשרות סינכרוני שהמצלמה HAL קורא לשאול את שרת המצלמה מאגרים. ראה requestStreamBuffers .
  • returnStreamBuffers : התקשרות סינכרוני עבור 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 29 ומעלה חייבים לדווח true עבור isTorchModeSupported .

אנדרואיד 9

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

מצלמת API

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

אנדרואיד 8.0

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

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

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

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

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

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

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

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

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

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

שם השיטה הוא 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

תוספות קטנות למטא נתונים נתמכים ושינויים בתמיכת מרחב הנתונים:

  • להוסיף ANDROID_SENSOR_OPAQUE_RAW_SIZE סטטי metadata כחובה אם RAW_OPAQUE בפורמט נתמך.
  • להוסיף ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE סטטי metadata כחובה אם בכל פורמט RAW נתמך.
  • חלף camera3_stream_t data_space שדה הגדרה גמישה יותר, באמצעות הגדרת גרסת 0 של קידוד dataspace.
  • תוספות כלליות של מטא נתונים הזמינות לשימוש עבור 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 זרם camera3_stream_configuration_t .

3.2

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

  • Deprecates get_metadata_vendor_tag_ops . השתמש get_vendor_tag_ops ב camera_common.h במקום.
  • Deprecates 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 עם יכולת מורחבת (Android 4.2) [camera2.h]:

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

1.0

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

  • הוסב משכבת ​​C ++ CameraHardware שכבת הפשטה בממשק.
  • תומך 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

גרסת מודול מצלמה זו מוסיפה תמיכת תג ספק ממודול, ו deprecates הישן 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 אינם תקפים. רק android.hardware.Camera API יכול להיות נתמך על ידי מודול זה והתקנים שלה.