רשימת משימות לבדיקת Camera HAL

בדף הזה מפורטים כל הבדיקות שזמינות להערכת שכבת ההפשטה של חומרת המצלמה (HAL) ב-Android. הוא מיועד ליצרני ציוד מקורי (OEM) ולספקי מעבדי אפליקציות (AP), כדי שיוכלו להבטיח הטמעה תקינה של HAL המצלמה עם מספר פגמים מינימלי. זוהי תוספת וולונטרית לחבילת בדיקות התאימות של Android‏ (CTS), אבל היא מרחיבה מאוד את הכיסוי של בדיקות המצלמה, ותזהה בוודאות באגים פוטנציאליים.

כשהם עוברים את הבדיקות האלה, יצרני ציוד מקורי מאמתים שהם שילבו כראוי את ממשקי שכבת ההפשטה של חומרת המצלמה של Android‏ (HAL) 3. אם ההטמעה במכשיר עומדת בכל הפריטים ברשימת המשימות, היא נחשבת מלאה ביחס לממשקי ה-HAL של מצלמת Android. כך המכשיר יוכל לתמוך כראוי בחבילה android.hardware.camera2 שעלייה מבוססות אפליקציות המצלמה.

מפרט Camera HAL3

המפרט Android Camera HAL3 הוא המקור המהימן למידע על הדרישות למכשירים. בדף הזה מוצג סיכום של כל הבדיקות שאפשר להשתמש בהן כרשימת משימות. מי שמטמיע את Camera HAL (למשל, ספקי AP) צריך לעבור על המפרט של Camera HAL3 שורה אחרי שורה ולוודא שהמכשירים שלו תואמים לו.

מפרט ה-HAL הנוכחי מוגדר בקבצים הבאים ב-Android Platform Development Kit (PDK) הגנרי של Android 5.0 ואילך:

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

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

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

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

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

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

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

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

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

כשמריצים בדיקת CTS למצלמה במכשירים שתומכים במצלמות חיצוניות (כמו מצלמות אינטרנט מסוג USB), צריך לחבר את המכשיר בזמן הרצת הבדיקה, אחרת הבדיקות ייכשל באופן אוטומטי. דוגמאות למצלמות חיצוניות: Logitech HD Pro Webcam C920 ו-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

אפשר למצוא את בדיקות המצלמה האלה בקטע: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

בדיקות של Image Test Suite‏ (ITS)

ערכת הבדיקה של תמונות המצלמה (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 שבה נמצאת מחלקת מפעיל הבדיקות.

כדי להריץ סוג אחד של בדיקות, מעבירים את הארגומנט class‏ -e, לדוגמה:

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,‏ חשיפת התמונה, WB, ‏ סצנה, גודל התמונה ותג גיאוגרפי)

מריצים את פקודת הבדיקה:

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 חזרות, יתבצע תיעוד של קובץ snapshot של 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 באופן ידני ולבצע את הבדיקות הבאות. המקור של TestingCam נמצא כאן: pdk/apps/TestingCamera/

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

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

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

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

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

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

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