เอกสารนี้แสดงรายการการทดสอบทั้งหมดสำหรับประเมิน Abstraction Layer (HAL) ของฮาร์ดแวร์กล้อง Android มีไว้สำหรับผู้ผลิตอุปกรณ์ดั้งเดิม (OEM) และผู้จำหน่ายตัวประมวลผลแอปพลิเคชัน (AP) ดังนั้นพวกเขาอาจรับประกันการใช้งานกล้อง HAL อย่างเหมาะสมโดยมีข้อบกพร่องน้อยที่สุด แม้ว่านี่จะเป็นการเพิ่มโดยสมัครใจให้กับ Android Compatibility Test Suite (CTS) แต่ก็เพิ่มความครอบคลุมการทดสอบกล้องอย่างมากและจะระบุจุดบกพร่องที่อาจเกิดขึ้นได้อย่างแน่นอน
เมื่อผ่านการทดสอบเหล่านี้ OEM จะตรวจสอบว่าได้ผสานรวมอินเทอร์เฟซ Abstraction Layer (HAL) 3 ของฮาร์ดแวร์กล้อง Android อย่างถูกต้องหรือไม่ เมื่อสอดคล้องกับรายการทั้งหมดในรายการตรวจสอบ การใช้งานอุปกรณ์อาจถือว่า สมบูรณ์ ตามอินเทอร์เฟซ Android Camera HAL ซึ่งจะทำให้อุปกรณ์สามารถรองรับแพ็คเกจ android.hardware.camera2
ที่แอพกล้องสร้างขึ้นได้อย่างเหมาะสม
ข้อมูลจำเพาะของกล้อง HAL3
ข้อมูลจำเพาะ Android Camera HAL3 เป็นแหล่งข้อมูลที่เชื่อถือได้เกี่ยวกับสิ่งที่อุปกรณ์ต้องตอบสนอง หน้านี้ให้ข้อมูลสรุปของการทดสอบทั้งหมดที่สามารถใช้เป็นรายการตรวจสอบได้ ผู้ติดตั้งกล้อง HAL (เช่น ผู้จำหน่าย AP) ควรตรวจสอบข้อมูลจำเพาะของกล้อง HAL3 ทีละบรรทัด และตรวจสอบให้แน่ใจว่าอุปกรณ์ของตนเป็นไปตามข้อกำหนดดังกล่าว
ข้อกำหนด HAL ปัจจุบันถูกกำหนดไว้ในไฟล์เหล่านี้ภายใน Android Platform Development Kit (PDK) ของ Android 5.0 และใหม่กว่า:
- อินเทอร์เฟซและข้อมูลจำเพาะของกล้อง HAL 3.x :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- ข้อมูลจำเพาะข้อมูลเมตาของกล้อง HAL 3.x :
system/media/camera/docs/docs.html
- อินเทอร์เฟซรูปแบบพิกเซล HAL และข้อมูลจำเพาะ :
system/core/libsystem/include/system/graphics.h
ประเภทการทดสอบกล้อง
ต่อไปนี้คือประเภทการทดสอบหลักที่มีให้สำหรับกล้อง Android รุ่นล่าสุด พร้อมด้วยข้อมูลอ้างอิงถึงคำแนะนำที่เกี่ยวข้องด้านล่าง:
- Vendor Test Suite (VTS) : การทดสอบที่ทดสอบอินเทอร์เฟซ HAL ของกล้องโดยตรง
- Compatibility Test Suite (CTS) : มาตรฐานการทดสอบ Android อัตโนมัติเพื่อให้แน่ใจว่าอุปกรณ์เข้ากันได้ สำหรับรายละเอียดเพิ่มเติม โปรดดู ที่ชุดทดสอบความเข้ากันได้ และ ภาพรวมของสหพันธ์การค้า
- Image Test Suite (ITS) : ทำการทดสอบด้วยตนเองเพื่อให้แน่ใจว่าภาพถูกต้อง สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ Camera ITS
- การทดสอบด้วยตนเอง การทดสอบ Cam : เรียกใช้จากแหล่งที่มาใน
pdk/apps/TestingCamera/
- การทดสอบ TestingCam2.1 ด้วยตนเอง : เรียกใช้จากแหล่งที่มาใน
pdk/apps/TestingCamera2/
ประเภทการทดสอบทั้งหมดเหล่านี้มีรายละเอียดอธิบายไว้ด้านล่าง การทดสอบเหล่านี้แสดงตามลำดับเวลาซึ่งคาดว่า OEM จะดำเนินการ
ตัวอย่างเช่น หากอุปกรณ์ไม่ผ่านการทดสอบเนทีฟ อุปกรณ์นั้นจะไม่ผ่านการทดสอบ Compatibility Test Suite (CTS) ที่ตามมาอย่างแน่นอน และหากอุปกรณ์ล้มเหลว CTS ก็จะมีประโยชน์เพียงเล็กน้อยในการดำเนินการต่อไปยัง Image Test Suite (ITS) เราขอแนะนำให้จัดการกับความล้มเหลวในการทดสอบแต่ละประเภทก่อนที่จะดำเนินการทดสอบชุดถัดไป
การทดสอบ Vendor Test Suite (VTS)
Android Vendor Test Suite (VTS) เป็นชุดทดสอบที่ทำงานในระดับอินเทอร์เฟซ HIDL สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ VTS โปรดดูที่ Vendor Test Suite
การทดสอบความเข้ากันได้ของชุดทดสอบ (CTS)
การทดสอบชุดทดสอบความเข้ากันได้ของกล้องกับ Android (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 #
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตั้งค่าและเรียกใช้การทดสอบ โปรดดูที่ 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
) และชื่อรองทดสอบ ( 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 คลาส
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 ฉาก ขนาดภาพ และ 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 ครั้ง การทดสอบจะล้มเหลวหากความแตกต่างมากกว่า 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 ภาพที่ปรากฏทางด้านขวาของภาพในช่องมองภาพควรปรากฏเหมือนกันกับช่องมองภาพ รวมทั้งมีการวางแนวเดียวกันด้วย