รายการตรวจสอบการทดสอบกล้อง HAL

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

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

สเปคของกล้อง HAL3

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

ข้อกำหนด HAL ปัจจุบันถูกกำหนดไว้ในไฟล์เหล่านี้ภายใน Android 5.0 และ Android Platform Development Kit (PDK) ทั่วไปที่ใหม่กว่า:

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

ต่อไปนี้คือประเภทการทดสอบหลักสำหรับกล้อง Android รุ่นล่าสุด พร้อมด้วยข้อมูลอ้างอิงถึงคำแนะนำที่เกี่ยวข้องด้านล่าง:

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

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

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

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

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

การทดสอบ Camera Android Compatibility Test Suite (CTS) เน้นที่ความเข้ากันได้ของอุปกรณ์ สำหรับข้อมูลเกี่ยวกับการตั้งค่าสภาพแวดล้อมการทดสอบ โปรดดู การตั้งค่า 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/*

การทดสอบ Image Test Suite (ITS)

การทดสอบ Camera Image Test Suite (ITS) มุ่งเน้นไปที่ความถูกต้องของภาพ ในการทดสอบ ให้รันสคริปต์ Python บนเวิร์กสเตชันโดยที่อุปกรณ์ Android เชื่อมต่อผ่าน USB

โครงสร้างพื้นฐานและการทดสอบ Camera ITS จะอยู่ในไดเรกทอรี cts/apps/CameraITS การทดสอบแต่ละครั้งจะอยู่ในไดเร็กทอรีย่อย tests/scene #

ในการตั้งค่าสภาพแวดล้อมการทดสอบ ให้เรียกใช้:
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่าและเรียกใช้การทดสอบ โปรดดูไฟล์ CameraITS PDF ใน cts/apps/CameraITS ดู tutorial.py ในไดเร็กทอรีย่อย tests สำหรับคำแนะนำเกี่ยวกับวิธีใช้สคริปต์

การทดสอบ ITS ต้องใช้สภาพแวดล้อม Linux สำหรับรายละเอียดเกี่ยวกับเวอร์ชัน Python เฉพาะที่จำเป็นสำหรับการทดสอบ ITS โปรดดูไฟล์ PDF ของ CameraITS สำหรับการเผยแพร่หรือ บันทึกประจำรุ่น ของ Android 12 สำหรับ Android 12

มีคำอธิบายการตั้งค่าที่แนะนำสำหรับฉากนิ่งอยู่ใน Camera ITS-in-a-box การตั้งค่าที่แนะนำสำหรับฉาก sensor_fusion มีอธิบายไว้ใน คู่มือการเริ่มต้นฉบับย่อของ Sensor Fusion Box

ในการใช้งาน ITS ด้วยตนเอง ให้เตรียมสภาพแวดล้อมทางกายภาพที่เรียบง่ายโดยมีเป้าหมายเฉพาะที่สามารถนำมาใช้ซ้ำได้ เช่น ผนังสีขาว การ์ดสีเทา และโคมไฟตั้งโต๊ะ ติดตั้งอุปกรณ์ Android บนขาตั้งกล้องและเรียกใช้สคริปต์เพื่อทดสอบการทำงานของกล้อง การทดสอบส่วนใหญ่ผ่านหรือไม่ผ่าน แต่มีตัวชี้วัดบางข้อ

สคริปต์เหล่านี้ทดสอบสถานการณ์ที่ไม่ได้รับการทดสอบใน CTS และเป็นส่วนประกอบที่สำคัญของแผนการทดสอบ HAL 3.2

การทดสอบ ITS ว่าผ่านหรือล้มเหลว การทดสอบที่ได้รับคำสั่งทั้งหมดในแต่ละโฟลเดอร์ฉากต้องผ่าน การทดสอบที่ไม่ได้รับคำสั่งอาจล้มเหลวและยังนับเป็นการผ่านใน CtsVerifier

สำหรับคำอธิบายฉากและการทดสอบ โปรดดูที่ การทดสอบ ITS ของกล้อง

การทดสอบกรอบงานสื่อ

ผ่านการทดสอบสื่อที่เกี่ยวข้องกับกล้องทั้งหมดใน 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 ) และชื่อตัวดำเนินการทดสอบ ( MediaFramework TestRunner นัก MediaFramework TestRunner ทดสอบ ).

ตัวอย่างเช่น:

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 ครั้ง การทดสอบจะล้มเหลวหากความแตกต่างมากกว่า 150kM

รันคำสั่งทดสอบ:

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 ภาพที่ปรากฏทางด้านขวาของภาพในช่องมองภาพควรปรากฏเหมือนกับช่องมองภาพ รวมทั้งมีการวางแนวเดียวกัน