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 camera2 .
ממשק 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. ארכיטקטורת מצלמות מדור קודם

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