בדף הזה מפורטים כל הבדיקות שזמינות להערכת שכבת ההפשטה של חומרת המצלמה ב-Android (HAL). היא מיועדת ליצרני ציוד מקורי (OEM) ולספקי מעבדי אפליקציות (AP), כדי שיוכלו לוודא שההטמעה של HAL המצלמה תקינה ושיש בה מינימום פגמים. למרות שמדובר בתוספת וולונטרית לחבילת בדיקות התאימות (CTS) של Android, היא מגדילה מאוד את הכיסוי של בדיקות המצלמה, ואין ספק שהיא תזהה באגים פוטנציאליים.
יצרני ציוד מקורי משתמשים בבדיקות האלה כדי לוודא שהם שילבו בצורה נכונה את ממשקי שכבת ההפשטה של חומרת המצלמה (HAL) 3 ב-Android. אם ההטמעה של המכשיר עומדת בכל הדרישות ברשימת הבדיקה, אפשר להגדיר אותה כמלאה מבחינת הממשקים של Android Camera HAL. הפעולה הזו תאפשר למכשיר לתמוך בצורה תקינה בחבילה
android.hardware.camera2 שעליה מבוססות אפליקציות המצלמה.
מפרט Camera HAL3
המפרט של Android Camera HAL3 הוא המקור המוסמך למידע על הדרישות ממכשירים. בדף הזה מופיע סיכום של כל הבדיקות שאפשר להשתמש בהן כרשימת משימות. מפתחים של Camera HAL (למשל ספקים של AP ) צריכים לעבור על המפרט של Camera HAL3 שורה אחר שורה ולוודא שהמכשירים שלהם תואמים לו.
המפרט הנוכחי של HAL מוגדר בקבצים האלה בתוך ערכת פיתוח הפלטפורמה (PDK) הגנרית של Android 5.0 ואילך:
- ממשק ומפרט של Camera HAL 3.x:
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - מפרט המטא-נתונים של Camera HAL 3.x:
system/media/camera/docs/docs.html - ממשק ומפרט של פורמט פיקסלים ב-HAL:
system/core/libsystem/include/system/graphics.h
סוגי בדיקות מצלמה
אלה הסוגים העיקריים של בדיקות שזמינים למצלמה העדכנית של Android, יחד עם הפניות להוראות שקשורות אליהם בהמשך:
- Vendor Test Suite (VTS): בדיקות שבודקות ישירות את הממשק של מצלמת HAL
- חבילה לבדיקות תאימות (CTS): בדיקות אוטומטיות רגילות של Android שנועדו לוודא שהמכשיר תואם. פרטים נוספים זמינים במאמרים בנושא חבילת בדיקות התאימות וסקירה כללית של Trade Federation.
- חבילת בדיקות תמונות (ITS): הרצת בדיקות באופן ידני כדי לוודא שהתמונות תקינות. מידע נוסף זמין במאמר בנושא מערכת ITS למצלמות.
- בדיקות ידניות של מצלמות:
הפעלה מהמקור ב-
pdk/apps/TestingCamera/ - בדיקות של Manual TestingCam2.1: הרצה מהמקור ב-
pdk/apps/TestingCamera2/
בהמשך מפורטים כל סוגי הבדיקות האלה. הבדיקות האלה מוצגות בסדר כרונולוגי שבו יצרני ציוד מקורי (OEM) צפויים לבצע אותן.
לדוגמה, אם מכשיר נכשל בבדיקות המקוריות, הוא ייכשל בוודאות בבדיקות הבאות של חבילת בדיקות התאימות (CTS). אם מכשיר נכשל ב-CTS, אין טעם להמשיך ל-Image Test Suite (ITS). מומלץ לטפל בבעיות בכל סוג בדיקה לפני שממשיכים לבדיקות הבאות.
בדיקות בחבילה לבדיקת ספקים (VTS)
חבילת הבדיקות של ספקים ב-Android (VTS) היא חבילת בדיקות שפועלת ברמת הממשק של HIDL. מידע נוסף על השימוש ב-VTS זמין במאמר בנושא חבילת בדיקות לספקים.
בדיקות בחבילה לבדיקות תאימות (CTS)
בדיקות חבילת התאימות (CTS) של מצלמת Android מתמקדות בתאימות המכשיר. מידע על הגדרת סביבת בדיקה זמין במאמר הגדרת CTS.
נתיב ההתחלה לבדיקות CTS של המצלמה הוא: platform/cts.
כשמריצים את בדיקות התאימות (CTS) של המצלמה במכשירים שתומכים במצלמות חיצוניות (כמו מצלמות אינטרנט בחיבור USB), צריך לחבר מכשיר כשמריצים את בדיקות התאימות, אחרת הבדיקות ייכשלו באופן אוטומטי. דוגמאות למצלמות חיצוניות: מצלמת אינטרנט HD Pro C920 של Logitech ומצלמת LifeCam HD-3000 של Microsoft.
הוראות כלליות להפעלת CTS מופיעות במבוא ל-CTS ובדפי המשנה שלו.
בדיקות CTS עבור API android.hardware.Camera
אפשר למצוא את בדיקות המצלמה האלה בקטע cts/tests/tests/:
hardware/src/android/hardware/cts/CameraTest.javahardware/src/android/hardware/cts/CameraGLTest.javahardware/src/android/hardware/cts/Camera_SizeTest.javapermission/src/android/permission/cts/CameraPermissionTest.java
בדיקות CTS עבור API android.hardware.camera2
אפשר למצוא את בדיקות המצלמה האלה בקטע cts/tests/tests/:
hardware/src/android/hardware/camera2/cts/*permission/src/android/permission/cts/Camera2PermissionTest.java
בדיקות מצלמה ב-CTS Verifier
אפשר למצוא את בדיקות המצלמה האלה בקטע:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
בדיקות של חבילת בדיקות תמונות (ITS)
הכלי לבדיקת תמונות מהמצלמה (ITS) מתמקד בבדיקת התקינות של התמונות. כדי לבצע את הבדיקות, מריצים את סקריפטים של Python בתחנת עבודה עם מכשיר Android שמחובר באמצעות USB.
התשתית והבדיקות של Camera ITS נמצאות בספרייה
cts/apps/CameraITS.
כל בדיקה נמצאת בספריית משנה tests/scene#.
מידע נוסף על הגדרה והפעלה של הבדיקות זמין במאמר בנושא מערכת ITS לבדיקת מצלמות.
תיאורים של סצנות ובדיקות מפורטים במאמר בדיקות ITS של מצלמות.
בדיקות ITS עוברות או נכשלות. כל הבדיקות הנדרשות בתיקיית הסצנה צריכות לעבור בהצלחה.
בדיקות שלא נדרשות יכולות להיכשל ועדיין להיחשב כעוברות ב-CtsVerifier.
בבדיקות ITS נבדקים תרחישי בדיקה שלא נבדקים ב-CTS, והן רכיב חשוב בתוכנית הבדיקה של HAL 3.2.
בדיקות של Media Framework
העברה של כל בדיקות המדיה שקשורות למצלמה ב-MediaFrameworkTest. שימו לב, כדי לבצע את הבדיקות האלה צריך להתקין את mediaframeworktest.apk במכשיר Android. תצטרכו make mediaframeworktest ואז להשתמש ב-adb כדי להתקין את קובץ ה-APK שנוצר. בהמשך מופיעות פקודות לדוגמה.
נתיב ההתחלה לבדיקות של מסגרת מדיה שקשורה למצלמה הוא:
platform/frameworks/base
קוד המקור של הבדיקות מופיע כאן:
frameworks/base/media/tests/MediaFrameworkTest
כדי להגדיר את הבדיקות האלה:
make mediaframeworktestadb install out/target/product/name/data/app/mediaframeworktest.apk
כאשר המשתנה name מייצג את הספרייה שמכילה את המוצר של הספק.
אפשר למצוא את כל הבדיקות בספרייה הבאה או בספריות המשנה שלה:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
כל ספריית משנה מייצגת סוג של בדיקות:
functional/integration/performance/power/stress/unit/
הרצת בדיקות של Media Framework
כדי לראות את כל הבדיקות הזמינות::
adb shell pm list instrumentation
התוצאות שיתקבלו יהיו דומות לתוצאות הבאות:
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner (target=com.android.mediaframeworktest)
מזהים ומחלצים את הרכיב (בין instrumentation:
לבין (target=com.android.mediaframeworktest) ) מכל שורת בדיקה.
הרכיב מורכב משם חבילת היעד (com.android.mediaframeworktest) ומשם הכלי להרצת הבדיקות (MediaFramework).
לדוגמה:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
אחר כך אפשר להעביר כל רכיב ל-adb shell am instrument באופן הבא:
adb shell am instrument -w component.name
כאשר component.name שווה לערך שחולץ למעלה. לדוגמה:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
שימו לב: נתיב המחלקה הוא שם חבילת Java + שם המחלקה, אבל חבילת המכשור לא בהכרח זהה לחבילת Java. חשוב להשתמש בחבילה AndroidManifest.xml כשמשרשרים את שם הרכיב, ולא בחבילת Java שבה נמצאת המחלקה של כלי ההרצה של הבדיקה.
כדי להריץ בדיקה של כיתה אחת, מעבירים את הארגומנט -e class
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
כדי להריץ רק שיטה אחת בכיתת בדיקה, מוסיפים את הסימן סולמית (#) ואת שם השיטה (במקרה הזה, testConnectPro) לשם הכיתה, כך:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
בדיקות פונקציונליות של הגדרות המדיה
הנה דוגמה להרצה של בדיקה פונקציונלית. בבדיקה הזו מאמתים את הפונקציונליות הבסיסית של שילובים שונים של הגדרות המצלמה. (כלומר, Flash, exposure, WB, scene, picture size ו-geoTag)
מריצים את פקודת הבדיקה:
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
בדיקות שילוב מדיה
הנה דוגמה להרצה של בדיקת שילוב, במקרה הזה mediaframeworktest/integration/CameraBinderTest.java ו-mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
אם הפעולה בוצעה בהצלחה, הפלט ייראה כך:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
בדיקות ביצועים של מדיה
במהלך הבדיקה הזו של הזיכרון בתצוגה המקדימה, התצוגה המקדימה של המצלמה תיפתח ותיסגר 200 פעמים. בכל 20 איטרציות, תתועד תמונת המצב של ps mediaserver, ותתבצע השוואה של השימוש בזיכרון אחרי 200 איטרציות. הבדיקה תיכשל אם ההבדל יהיה גדול מ-150,000 מטרים.
מריצים את פקודת הבדיקה:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
מידע מפורט יותר על הפלט זמין בכתובת:
/sdcard/mediaMemOutput.txt
בדיקות יחידה של מדיה
הפקודות להרצת בדיקות יחידה דומות. לדוגמה, עבור CameraMetadataTest.java, הפקודה תהיה:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
בדיקות מאמץ של מדיה
הבדיקה הזו נועדה להעמיס על המצלמה בזמן צילום תמונות והקלטת סרטונים.
מריצים את פקודת הבדיקה:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
כל הבדיקות צריכות לעבור.
בדיקות ידניותבדיקות של מצלמות
צריך להפעיל את אפליקציית TestingCam באופן ידני ולבצע את הבדיקות הבאות.
קוד המקור של TestingCam זמין כאן: pdk/apps/TestingCamera/
מיקוד לאינסוף עם הטיית המצלמה
מפעילים את TestingCam, מפעילים את התצוגה המקדימה ומוודאים שמצב הפוקוס האוטומטי מוגדר לאינסוף. בעזרת הלחצן צילום תמונה, מצלמים תמונות של נושאים מרוחקים (לפחות 10 מטרים) כשהמצלמה מכוונת אופקית, כלפי מעלה (קרוב לאנכית) וכלפי מטה (קרוב לאנכית). דוגמה לצילום כלפי מעלה יכולה להיות עלים או ענפים גבוהים של עץ מלמטה, ודוגמה לצילום כלפי מטה יכולה להיות הרחוב כפי שנראה מגג של בניין. בכל המקרים, הנושא המרוחק צריך להיות חד וממוקד. אפשר לשמור את התמונות ולראות אותן בתצוגת הגלריה כדי להגדיל אותן ולבדוק את החדות שלהן בקלות רבה יותר.
שימו לב: כדי שמצלמה עם מפעיל VCM תעבור את הבדיקה הזו, היא תצטרך מערכת בקרה של AF בלולאה סגורה, או תיקון כלשהו של תוכנה שמבוסס על שימוש בנתוני מד תאוצה כדי לקבוע את כיוון המצלמה. יהיה צורך גם בכיול אמין של מיקום האינסוף של העדשה.
בדיקות ידניות של מצלמת TestingCam2
צריך להפעיל את האפליקציה TestingCam2 באופן ידני ולבצע את הבדיקות הבאות:
מקור הנתונים של TestingCam2 נמצא כאן: pdk/apps/TestingCamera2/
צילום בפורמט JPEG
מפעילים את TestingCam2 ולוחצים על הלחצן JPEG. התמונה שמופיעה משמאל לתמונה של העינית צריכה להיות זהה לתמונה של העינית, כולל אותו כיוון.