בדיקת HAL של המצלמה

בדף הזה מפורטים כל הבדיקות שזמינות להערכת שכבת ההפשטה של חומרת המצלמה ב-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 ואילך:

סוגי בדיקות מצלמה

אלה הסוגים העיקריים של בדיקות שזמינים למצלמה העדכנית של Android, עם הפניות להוראות שקשורות אליהם בהמשך:

בהמשך מפורטים כל סוגי הבדיקות האלה. הבדיקות האלה מוצגות בסדר כרונולוגי שבו יצרני ציוד מקורי (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.java
  • hardware/src/android/hardware/cts/CameraGLTest.java
  • hardware/src/android/hardware/cts/Camera_SizeTest.java
  • permission/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)

הכלי Camera Image Test Suite ‏ (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 mediaframeworktest
adb 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) ומשם הכלי להרצת הבדיקות (MediaFrameworkTestRunner).

לדוגמה:

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

כל הבדיקות צריכות לעבור.

בדיקות ידניותבדיקות של מצלמת Cam

צריך להפעיל את אפליקציית TestingCam באופן ידני ולבצע את הבדיקות הבאות. קוד המקור של TestingCam זמין כאן: pdk/apps/TestingCamera/

מיקוד לאינסוף עם הטיית המצלמה

מפעילים את TestingCam, מפעילים את התצוגה המקדימה ומוודאים שמצב הפוקוס האוטומטי מוגדר לאינסוף. בעזרת הלחצן צילום תמונה, מצלמים תמונות של נושאים מרוחקים (לפחות 10 מטרים) כשהמצלמה מכוונת אופקית, כלפי מעלה (קרוב לאנכית) וכלפי מטה (קרוב לאנכית). דוגמה לצילום כלפי מעלה יכולה להיות עלים או ענפים גבוהים של עץ מלמטה, ודוגמה לצילום כלפי מטה יכולה להיות הרחוב כפי שנראה מגג של בניין. בכל המקרים, הנושא המרוחק צריך להיות חד וממוקד. אפשר לשמור את התמונות ולראות אותן בתצוגת הגלריה כדי להגדיל אותן ולבדוק את החדות שלהן בקלות רבה יותר.

שימו לב: כדי שמצלמה עם מפעיל VCM תעבור את הבדיקה הזו, היא תצטרך מערכת בקרה של AF בלולאה סגורה, או תיקון כלשהו של תוכנה שמבוסס על שימוש בנתוני מד תאוצה כדי לקבוע את כיוון המצלמה. יהיה צורך גם בכיול אמין של מיקום האינסוף של העדשה.

בדיקות ידניות של TestingCam2

צריך להפעיל את האפליקציה TestingCam2 באופן ידני ולבצע את הבדיקות הבאות: מקור הקוד של TestingCam2 נמצא כאן: pdk/apps/TestingCamera2/

צילום JPEG

מפעילים את TestingCam2 ולוחצים על הלחצן JPEG. התמונה שמופיעה משמאל לתמונה של העינית צריכה להיות זהה לתמונה של העינית, כולל אותו כיוון.