Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

מַצלֵמָה

סמל HAL של מצלמת Android

שכבת ההפשטה של ​​חומרת המצלמה של אנדרואיד (HAL) מחברת את ממשקי ה- API של מסגרת המצלמה ברמה הגבוהה יותר במצלמה 2 למנהל ההתקן ולחומרה הבסיסית שלך. תת מערכת המצלמה כוללת יישומים עבור רכיבי צינור המצלמה ואילו HAL המצלמה מספקת ממשקים לשימוש ביישום גרסתך לרכיבים אלה.

ארכיטקטורה

האיור והרשימה הבאים מתארים את רכיבי ה- HAL.

ארכיטקטורת מצלמות אנדרואיד

איור 1. ארכיטקטורת מצלמה

מסגרת אפליקציות
ברמת מסגרת האפליקציה נמצא קוד האפליקציה, המשתמש בממשק ה- API של מצלמה 2 כדי לקיים אינטראקציה עם חומרת המצלמה. באופן פנימי, קוד זה קורא לממשקי קלסר מתאימים כדי לגשת לקוד המקורי אשר מתקשר עם המצלמה.
AIDL
ניתן למצוא את ממשק הקלסר המשויך ל- CameraService במסגרות / av / camera / aidl / android / hardware . הקוד שנוצר מכנה קוד הילידים ברמה נמוכה כדי לקבל גישה לנתונים המצלמה וחוזר הפיזי המשמש ליצירת CameraDevice ולבסוף CameraCaptureSession אובייקטים ברמת המסגרת.
מסגרת מקומית
מסגרת זו השוכנת frameworks/av/ מספקת מקבילה מקורית CameraDevice CameraCaptureSession ו- CameraCaptureSession . ראה גם הפניה למצלמת NDK .
ממשק IPC קלסר
ממשק קלסר ה- IPC מאפשר תקשורת על גבולות התהליך. ישנן מספר שיעורי קלסר למצלמות הממוקמים frameworks/av/camera/camera/aidl/android/hardware אשר קוראות לשירות המצלמה. ICameraService הוא הממשק לשירות המצלמה; ICameraDeviceUser הוא הממשק למכשיר מצלמה נפתח ספציפי; ו- ICameraServiceListener ו- ICameraDeviceCallbacks הם ICameraDeviceCallbacks CameraService בהתאמה של CameraService ו- CameraDevice למסגרת היישום.
שירות מצלמות
שירות המצלמות, הממוקם frameworks/av/services/camera/libcameraservice/CameraService.cpp , הוא הקוד האמיתי frameworks/av/services/camera/libcameraservice/CameraService.cpp עם ה- HAL.
HAL
שכבת הפשטת החומרה מגדירה את הממשק הסטנדרטי אליו מתקשר שירות המצלמה ועליכם ליישם כדי שתפקוד החומרה של המצלמה יתפקד כראוי.

יישום ה- HAL

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

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

יישומי HIDL לעיון זמינים עבור CameraProvider.cpp , CameraDevice.cpp ו- CameraDeviceSession.cpp . היישום עוטף HALs ישנים שעדיין משתמשים ב- API מדור קודם . החל מ- Android 8.0, יישומי HAL של מצלמה חייבים להשתמש ב- API של HIDL; השימוש בממשק מדור קודם אינו נתמך.

רכיבי HAL מדור קודם

חלק זה מתאר את הארכיטקטורה של רכיבי HAL מדור קודם וכיצד ליישם את ה- HAL. יישומי HAL למצלמות ב- Android 8.0 ואילך חייבים להשתמש ב- HIDL API במקום זאת, המתואר לעיל.

אדריכלות (מורשת)

האיור והרשימה שלהלן מתארים את רכיבי HAL של המצלמה מדור קודם.

ארכיטקטורת מצלמות אנדרואיד

איור 2. ארכיטקטורת מצלמות מדור קודם

מסגרת אפליקציות
ברמת מסגרת האפליקציה נמצא קוד האפליקציה, שמשתמש בממשק ה- API של android.hardware.Camera . Hardware.Camera כדי לקיים אינטראקציה עם חומרת המצלמה. באופן פנימי, קוד זה קורא למחלקת דבק מקבילה JNI כדי לגשת לקוד המקורי אשר מתקשר עם המצלמה.
ג'ני
קוד JNI המשויך ל- android.hardware.Camera נמצא frameworks/base/core/jni/android_hardware_Camera.cpp . קוד זה קורא לקוד המקורי ברמה התחתונה כדי להשיג גישה למצלמה הפיזית ומחזיר נתונים המשמשים ליצירת האובייקט android.hardware.Camera ברמת המסגרת.
מסגרת מקומית
המסגרת המקורית המוגדרת frameworks/av/camera/Camera.cpp מספקת מקבילה מקורית frameworks/av/camera/Camera.cpp android.hardware.Camera . מחלקה זו קוראת ל- proxies של קלסרים IPC כדי לקבל גישה לשירות המצלמה.
כריכות IPC של קלסר
פרוקסי קלסר ה- IPC מאפשרים תקשורת על גבולות התהליך. ישנן שלוש שיעורי קלסר למצלמות הנמצאים בספריית frameworks/av/camera הקוראת לשירות מצלמות. ICameraService הוא הממשק לשירות המצלמות, ICamera הוא הממשק למכשיר מצלמה שנפתח ספציפי, ו- ICameraClient הוא ממשק המכשיר בחזרה למסגרת האפליקציה.
שירות מצלמות
שירות המצלמות, הממוקם frameworks/av/services/camera/libcameraservice/CameraService.cpp , הוא הקוד האמיתי frameworks/av/services/camera/libcameraservice/CameraService.cpp עם ה- HAL.
HAL
שכבת הפשטת החומרה מגדירה את הממשק הסטנדרטי אליו מתקשר שירות המצלמה ועליכם ליישם כדי שתפקוד החומרה של המצלמה יתפקד כראוי.
מנהל התקן ליבה
מנהל ההתקן של המצלמה מתקשר עם חומרת המצלמה בפועל והטמעת ה- HAL שלך. המצלמה והמנהל חייבים לתמוך בפורמטי תמונה YV12 ו- NV21 כדי לספק תמיכה בתצוגה מקדימה של תמונת המצלמה בתצוגה והקלטת וידאו.

יישום ה- HAL (מורשת)

ה- HAL יושב בין מנהל ההתקן לבין מסגרת האנדרואיד ברמה הגבוהה יותר ומגדיר ממשק שעליך ליישם כדי שאפליקציות יוכלו להפעיל נכון את חומרת המצלמה. ממשק HAL מוגדר hardware/libhardware/include/hardware/camera.h hardware/libhardware/include/hardware/camera_common.h .

camera_common.h מגדיר את camera_module , מבנה סטנדרטי לקבלת מידע כללי על המצלמה, כגון מזהה המצלמה והמאפיינים המשותפים לכל המצלמות (כלומר, אם מדובר במצלמה קדמית או אחורית).

camera.h מכיל קוד התואם ל- android.hardware.Camera . קובץ כותרת זה מכריז על מבנה camera_device שמכיל camera_device_ops מבנה camera_device_ops עם מצביעים לפונקציות המיישמות את ממשק HAL. לקבלת תיעוד על פרמטרי המצלמה שמפתחים יכולים להגדיר, עיין frameworks/av/include/camera/CameraParameters.h . פרמטרים אלה נקבעים עם הפונקציה int (*set_parameters)(struct camera_device *, const char *parms) ב- HAL.

לקבלת דוגמה ליישום HAL, עיין ביישום ה- Galaxy Nexus HAL hardware/ti/omap4xxx/camera .

קביעת תצורה של הספרייה המשותפת

הגדר את מערכת ה- Android build שתארוז נכון את יישום ה- HAL לספריה משותפת והעתק אותה למיקום המתאים על ידי יצירת קובץ Android.mk :

  1. צור ספריית device/<company_name>/<device_name>/camera כדי להכיל את קובצי המקור של הספרייה שלך.
  2. צור קובץ Android.mk לבניית הספרייה המשותפת. ודא שהקובץ מכיל את השורות הבאות:
    LOCAL_MODULE := camera.<device_name>
    LOCAL_MODULE_RELATIVE_PATH := hw
    

    יש לקרוא לספרייה שלך camera.<device_name> (כך .so אוטומטית), כך ש- Android יכול לטעון נכון את הספרייה. לדוגמא, עיין hardware/ti/omap4xxx/Android.mk מצלמת Galaxy Nexus הממוקמת hardware/ti/omap4xxx/Android.mk .

  3. ציין שהמכשיר שלך כולל תכונות מצלמה על ידי העתקת קובצי ה- XML ​​המאפיינים הדרושים בספריית frameworks/native/data/etc עם קובץ ה- makefile של המכשיר שלך. לדוגמה, כדי לציין שהמכשיר שלך כולל פלאש למצלמה והוא יכול למקד אוטומטית, הוסף את השורות הבאות במכשיר הקובץ <device>/<company_name>/<device_name>/device.mk :
    PRODUCT_COPY_FILES := \ ...
    
    PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \
    

    לדוגמא device/samsung/tuna/device.mk מכשיר, ראה device/samsung/tuna/device.mk . device/samsung/tuna/device.mk .

  4. device/<company_name>/<device_name>/media_profiles.xml יכולות ה- Codec, הפורמט והרזולוציה של המצלמה שלך device/<company_name>/<device_name>/media_profiles.xml device/<company_name>/<device_name>/media_codecs.xml XML device/<company_name>/<device_name>/media_codecs.xml . לפרטים, ראה חשיפת רכיבי Codec למסגרת .
  5. הוסף את השורות הבאות של המכשיר device/<company_name>/<device_name>/device.mk makefile להעתיק את media_profiles.xml ו media_codecs.xml קבצים למיקום המתאים:
    # media config xml file
    PRODUCT_COPY_FILES += \
        <device>/<company>/<device>/media_profiles.xml:system/etc/media_profiles.xml
    
    # media codec config xml file
    PRODUCT_COPY_FILES += \
        <device>/<company>/<device>/media_codecs.xml:system/etc/media_codecs.xml
    
  6. כדי לכלול את אפליקציית המצלמה בתמונת המערכת של המכשיר שלך, ציין אותה במשתנה PRODUCT_PACKAGES במכשיר device/<company>/<device>/device.mk makefile:
    PRODUCT_PACKAGES := \
    Gallery2 \
    ...