בדיקת 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 מוגדר בקבצים האלה בתוך ערכת פיתוח כללית של פלטפורמת Android (PDK) בגרסה Android 5.0 ואילך:

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

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

בהמשך מפורטים כל סוגי הבדיקות האלה. הבדיקות האלה מוצגות בסדר כרונולוגי שבו יצרני ציוד מקורי (OEM) צפויים לבצע אותן.

לדוגמה, אם מכשיר נכשל בבדיקות המקוריות, הוא ייכשל בוודאות בבדיקות הבאות של חבילת בדיקות התאימות (CTS). אם מכשיר נכשל ב-CTS, אין טעם להמשיך ל-Image Test Suite ‏ (ITS). מומלץ לטפל בכשלים בכל סוג בדיקה לפני שממשיכים לסדרה הבאה של בדיקות.

בדיקות בחבילה לבדיקת ספקים (VTS)

חבילת הבדיקות של ספקים ב-Android‏ (VTS) היא חבילת בדיקות שפועלת ברמת ממשק HIDL. מידע נוסף על השימוש ב-VTS זמין במאמר בנושא Vendor Test Suite.

בדיקות בחבילה לבדיקות תאימות (CTS)

בדיקות חבילת התאימות (CTS) של מצלמת Android מתמקדות בתאימות המכשיר. מידע על הגדרת סביבת בדיקה זמין במאמר בנושא הגדרת CTS.

נתיב ההתחלה לבדיקות CTS של המצלמה הוא: platform/cts.

כשמריצים את בדיקות התאימות של המצלמה במכשירים שתומכים במצלמות חיצוניות (כמו מצלמות רשת בחיבור USB), צריך לחבר מכשיר בזמן ההרצה של בדיקות התאימות, אחרת הבדיקות ייכשלו באופן אוטומטי. דוגמאות למצלמות חיצוניות: מצלמת אינטרנט ‎HD Pro ‏C920 של Logitech ו-Microsoft LifeCam HD-3000.

הוראות כלליות להפעלת 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#.

מידע נוסף על הגדרה והרצה של הבדיקות זמין במאמר בנושא Camera 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) עם לולאה סגורה, או תיקון תוכנה כלשהו שמבוסס על שימוש בנתוני מד תאוצה כדי לקבוע את כיוון המצלמה. יהיה צורך גם בכיול אמין של מיקום האינסוף של העדשה.

בדיקות ידניותבדיקות Cam2

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

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

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