בדיקת 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)

הכלי לבדיקת תמונות מהמצלמה (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

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

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

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

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

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

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

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

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

צילום בפורמט JPEG

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