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

เอกสารนี้แสดงรายการการทดสอบทั้งหมดสำหรับประเมิน 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 และใหม่กว่า:

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

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

ประเภทการทดสอบทั้งหมดเหล่านี้มีรายละเอียดอธิบายไว้ด้านล่าง การทดสอบเหล่านี้แสดงตามลำดับเวลาซึ่งคาดว่า 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 ภาพที่ปรากฏทางด้านขวาของภาพในช่องมองภาพควรปรากฏเหมือนกันกับช่องมองภาพ รวมทั้งมีการวางแนวเดียวกันด้วย