ทดสอบ HAL ของกล้อง

หน้านี้แสดงการทดสอบทั้งหมดที่พร้อมใช้งานสำหรับการประเมินเลเยอร์การจัดการฮาร์ดแวร์โดยตรง (HAL) ของกล้อง Android โดยมีไว้สำหรับผู้ผลิตอุปกรณ์ดั้งเดิม (OEM) และผู้ให้บริการแอปพลิเคชัน โปรเซสเซอร์ (AP) เพื่อให้มั่นใจว่ามีการใช้งาน HAL ของกล้องอย่างเหมาะสมโดยมีข้อบกพร่องน้อยที่สุด แม้ว่าการเพิ่มนี้จะเป็นการเพิ่มโดยสมัครใจในชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ของ Android แต่ก็ช่วยเพิ่มความครอบคลุมของการทดสอบกล้องได้อย่างมากและ จะช่วยระบุข้อบกพร่องที่อาจเกิดขึ้นได้อย่างแน่นอน

การผ่านการทดสอบเหล่านี้ช่วยให้ OEM ตรวจสอบได้ว่าได้ผสานรวมอินเทอร์เฟซของ Android Hardware Abstraction Layer (HAL) 3 ของกล้องอย่างถูกต้องหรือไม่ เมื่อเป็นไปตามรายการทั้งหมดใน รายการตรวจสอบ การติดตั้งใช้งานอุปกรณ์อาจถือว่าสมบูรณ์ตาม อินเทอร์เฟซ HAL ของกล้อง Android ซึ่งจะช่วยให้อุปกรณ์รองรับแพ็กเกจ android.hardware.camera2 ที่แอปกล้องสร้างขึ้นได้อย่างเหมาะสม

ข้อกำหนด HAL3 ของกล้อง

ข้อกำหนด Android Camera HAL3 เป็นแหล่งข้อมูลที่เชื่อถือได้ เกี่ยวกับอุปกรณ์ที่ต้องเป็นไปตามข้อกำหนด หน้านี้จะสรุป การทดสอบทั้งหมดที่ใช้เป็นรายการตรวจสอบได้ ผู้ใช้ HAL ของกล้อง (เช่น ผู้ให้บริการ AP) ควรตรวจสอบข้อกำหนดของ HAL3 ของกล้องทีละบรรทัดและตรวจสอบว่าอุปกรณ์ของตนเป็นไปตามข้อกำหนดดังกล่าว

ข้อกำหนด HAL ปัจจุบันมีการกำหนดไว้ในไฟล์เหล่านี้ภายใน Android 5.0 และชุดพัฒนาแพลตฟอร์ม Android (PDK) ทั่วไปที่ใหม่กว่า

ประเภทการทดสอบกล้อง

ประเภทการทดสอบหลักที่ใช้ได้กับกล้อง Android เวอร์ชันล่าสุดมีดังนี้ พร้อมการอ้างอิงถึงวิธีการที่เกี่ยวข้องด้านล่าง

เราจะอธิบายรายละเอียดการทดสอบแต่ละประเภทด้านล่าง การทดสอบเหล่านี้จะ แสดงตามลำดับเวลาที่คาดว่า OEM จะดำเนินการ

เช่น หากอุปกรณ์ไม่ผ่านการทดสอบดั้งเดิม อุปกรณ์จะไม่ผ่านการทดสอบชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ในภายหลังอย่างแน่นอน และหากอุปกรณ์ไม่ผ่าน CTS ก็ไม่จำเป็นต้องดำเนินการต่อเพื่อใช้ชุดเครื่องมือทดสอบรูปภาพ (ITS) เราขอแนะนําให้ แก้ไขข้อผิดพลาดในการทดสอบแต่ละประเภทก่อนดําเนินการทดสอบชุดถัดไป

การทดสอบ Vendor Test Suite (VTS)

ชุดทดสอบของผู้ให้บริการ Android (VTS) เป็นชุดทดสอบที่ทำงานใน ระดับอินเทอร์เฟซ HIDL ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ VTS ได้ที่ ชุดทดสอบของผู้ให้บริการ

การทดสอบชุดเครื่องมือทดสอบความเข้ากันได้ (CTS)

การทดสอบชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ของกล้อง Android มุ่งเน้นไปที่ความเข้ากันได้ของอุปกรณ์ ดูข้อมูลเกี่ยวกับการตั้งค่าสภาพแวดล้อมการทดสอบได้ที่การตั้งค่า CTS

เส้นทางการเริ่มต้นสำหรับการทดสอบ CTS ของกล้องคือ platform/cts

เมื่อเรียกใช้ CTS ของกล้องสำหรับอุปกรณ์ที่รองรับกล้องภายนอก (เช่น เว็บแคม USB) คุณต้องเสียบอุปกรณ์เมื่อเรียกใช้ CTS หรือการทดสอบจะล้มเหลวโดยอัตโนมัติ ตัวอย่างกล้องภายนอก ได้แก่ Logitech HD Pro Webcam C920 และ Microsoft LifeCam HD-3000

ดูวิธีการทั่วไปในการเรียกใช้ CTS ได้ที่ข้อมูลเบื้องต้นเกี่ยวกับ CTS และหน้าย่อย

การทดสอบ CTS สำหรับ android.hardware.Camera API

ดูการทดสอบกล้องเหล่านี้ได้ที่ 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 สำหรับ android.hardware.camera2 API

ดูการทดสอบกล้องเหล่านี้ได้ที่ 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

โครงสร้างพื้นฐานและการทดสอบ 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

การทดสอบการทำงานของการตั้งค่าสื่อ

นี่คือตัวอย่างการทดสอบฟังก์ชันการทำงาน การทดสอบนี้จะยืนยันฟังก์ชันพื้นฐาน ของการตั้งค่ากล้องแบบต่างๆ (เช่น แฟลช การเปิดรับแสง 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 ครั้ง ระบบจะบันทึกสแนปชอตของ ps mediaserver และจะเปรียบเทียบการใช้งานหน่วยความจำที่แตกต่างกันหลังจากการวนซ้ำ 200 ครั้ง การทดสอบจะ ล้มเหลวหากความแตกต่างมากกว่า 150 กม.

เรียกใช้คำสั่งทดสอบ

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 แบบวงปิดหรือต้องมีการแก้ไข SW บางอย่างโดยอิงตามการใช้ข้อมูลจากตัวตรวจวัดความเร่งเพื่อกำหนดการวางแนวกล้องจึงจะผ่านการทดสอบนี้ นอกจากนี้ยังต้องมีการปรับเทียบตำแหน่งอินฟินิตี้ของเลนส์จากโรงงานที่เชื่อถือได้ด้วย

การทดสอบด้วยตนเองCam2

คุณควรเรียกใช้แอป TestingCam2 ด้วยตนเองและตรวจสอบสิ่งต่อไปนี้ แหล่งที่มาของ TestingCam2 อยู่ที่นี่: pdk/apps/TestingCamera2/

การจับภาพ JPEG

เริ่ม TestingCam2 แล้วกดปุ่ม JPEG รูปภาพ ที่ปรากฏทางด้านขวาของรูปภาพช่องมองภาพควรปรากฏเหมือนกับ ช่องมองภาพ รวมถึงมีการวางแนวเดียวกัน