카메라 HAL 테스트 체크리스트

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 문서에는 Android 카메라 하드웨어 추상화 계층(HAL)을 평가하는 데 사용할 수 있는 모든 테스트가 나열되어 있습니다. OEM(Original Equipment Manufacturer) 및 AP(응용 프로세서) 공급업체를 대상으로 하므로 결함을 최소화하면서 카메라 HAL을 적절하게 구현할 수 있습니다. 이것은 Android CTS(Compatibility Test Suite)에 자발적으로 추가된 것이지만 카메라 테스트 범위를 크게 늘리고 잠재적인 버그를 확실히 식별합니다.

이러한 테스트를 통과하여 OEM은 Android 카메라 하드웨어 추상화 계층(HAL) 3 인터페이스를 적절하게 통합했는지 확인합니다. 체크리스트의 모든 항목을 준수하는 경우 Android 카메라 HAL 인터페이스와 관련하여 기기 구현이 전체 로 간주될 수 있습니다. 그러면 기기에서 카메라 앱이 빌드하는 android.hardware.camera2 패키지를 적절하게 지원할 수 있습니다.

카메라 HAL3 사양

Android 카메라 HAL3 사양은 기기가 충족해야 하는 정보의 권위 있는 소스입니다. 이 페이지는 체크리스트로 사용할 수 있는 모든 테스트의 요약을 제공합니다. 카메라 HAL 구현자(예: AP 공급업체)는 카메라 HAL3 사양을 한 줄씩 살펴보고 기기가 이를 준수하는지 확인해야 합니다.

현재 HAL 사양은 Android 5.0 이상의 일반 Android PDK(플랫폼 개발 키트) 내의 다음 파일에 정의되어 있습니다.

카메라 테스트 유형

다음은 최신 Android 카메라에 사용할 수 있는 기본 테스트 유형과 아래 관련 지침에 대한 참조입니다.

이러한 모든 테스트 유형은 아래에 자세히 설명되어 있습니다. 이러한 테스트는 OEM이 실행할 것으로 예상되는 시간순으로 제공됩니다.

예를 들어 장치가 기본 테스트에 실패하면 후속 CTS(호환성 테스트 제품군) 테스트에 확실히 실패합니다. 그리고 장치가 CTS에 실패하면 ITS(Image Test Suite)로 진행하는 데 거의 소용이 없습니다. 다음 테스트 세트를 진행하기 전에 각 테스트 유형의 실패를 해결하는 것이 좋습니다.

VTS(Vendor Test Suite) 테스트

Android 공급업체 테스트 도구 모음(VTS)은 HIDL 인터페이스 수준에서 작동하는 테스트 도구 모음입니다. VTS 사용에 대한 자세한 내용은 Vendor Test Suite 를 참조하십시오.

CTS(호환성 테스트 모음) 테스트

카메라 Android CTS(Compatibility Test Suite) 테스트는 기기 호환성에 중점을 둡니다. 테스트 환경 설정에 대한 자세한 내용은 CTS 설정 을 참조하십시오.

카메라 CTS 테스트의 시작 경로는 platform/cts 입니다.

USB 웹캠과 같은 외부 카메라를 지원하는 장치에 대해 카메라 CTS를 실행할 때 CTS를 실행할 때 장치를 연결해야 합니다. 그렇지 않으면 테스트가 자동으로 실패합니다. 외부 카메라의 예로는 Logitech HD Pro Webcam C920Microsoft LifeCam HD-3000이 있습니다.

CTS 실행에 대한 일반적인 지침은 CTS 소개 및 하위 페이지를 참조하세요.

android.hardware.Camera API에 대한 CTS 테스트

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

android.hardware.camera2 API에 대한 CTS 테스트

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(Camera Image Test Suite) 테스트는 이미지 정확성에 중점을 둡니다. 테스트를 수행하려면 USB를 통해 연결된 Android 장치가 있는 워크스테이션에서 Python 스크립트를 실행하십시오.

카메라 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

테스트를 설정하고 실행하는 방법에 대한 자세한 내용은 cts/apps/CameraITS 에 있는 CameraITS PDF 파일을 참조하십시오. 스크립트 사용 방법에 대한 가이드는 tests 하위 디렉토리의 tutorial.py 를 참조하십시오.

ITS 테스트에는 Linux 환경이 필요합니다. ITS 테스트를 실행하는 데 필요한 특정 Python 버전에 대한 자세한 내용은 릴리스용 CameraITS PDF 파일 또는 Android 12용 Android 12 릴리스 노트 를 참조하세요.

정적 장면에 대한 권장 설정은 Camera ITS-in-a-box 에 설명되어 있습니다. sensor_fusion 장면에 대한 권장 설정은 Sensor Fusion Box 빠른 시작 안내서 에 설명되어 있습니다.

ITS를 수동으로 실행하려면 흰색 벽, 회색 카드 및 책상 램프와 같은 재사용 가능한 특정 대상으로 간단한 물리적 환경을 준비하십시오. Android 기기를 삼각대에 장착하고 스크립트를 실행하여 카메라 기능을 테스트합니다. 대부분의 테스트는 합격 또는 불합격이지만 일부는 메트릭을 제공합니다.

이러한 스크립트는 CTS에서 테스트되지 않았으며 HAL 3.2 테스트 계획의 중요한 구성요소인 시나리오를 테스트합니다.

ITS 테스트는 통과하거나 실패합니다. 각 장면 폴더의 모든 필수 테스트를 통과해야 합니다. 필수가 아닌 테스트는 실패할 수 있으며 여전히 CtsVerifier 에서 통과로 간주됩니다.

장면 및 테스트 설명은 카메라 ITS 테스트 를 참조하십시오.

미디어 프레임워크 테스트

MediaFrameworkTest에서 모든 카메라 관련 미디어 테스트를 통과합니다. 이 테스트를 수행하려면 Android 기기에 mediaframeworktest.apk가 설치되어 있어야 합니다. 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/

미디어 프레임워크 테스트 실행

사용 가능한 모든 테스트를 보려면:

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 패키지와 반드시 같지는 않습니다. 구성 요소 이름을 연결할 때 테스트 실행기 클래스가 있는 Java 패키지가 아니라 AndroidManifest.xml 패키지를 사용해야 합니다.

단일 클래스의 테스트를 실행하려면 -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 앱은 다음 검사를 수행하여 수동으로 실행해야 합니다. TestingCam의 소스는 다음과 같습니다: pdk/apps/TestingCamera/

카메라 기울기로 무한대 초점

TestingCam을 시작하고 미리보기를 켜고 자동 초점 모드가 무한대로 설정되어 있는지 확인합니다. 사진 찍기 버튼을 사용하여 카메라가 수평, 위쪽(수직에 가까움), 아래쪽(수직에 가까움)을 향하게 하여 멀리 있는 피사체(최소 10m 거리)를 촬영합니다. 위쪽 샷의 예는 아래에서 나무의 높은 잎/가지가 될 수 있고 아래쪽 샷의 예로는 건물 지붕에서 보이는 거리가 될 수 있습니다. 모든 경우에 멀리 있는 피사체는 선명하고 초점이 맞아야 합니다. 사진을 저장하고 갤러리 보기에서 볼 수 있으므로 더 쉽게 확대하고 선명도를 검사할 수 있습니다.

VCM 액추에이터가 있는 카메라가 이 테스트를 통과하려면 폐쇄 루프 AF 제어 시스템이 필요하거나 카메라 방향을 결정하기 위해 가속도계 데이터를 사용하는 것을 기반으로 하는 일종의 SW 보정이 필요합니다. 렌즈 무한대 위치의 안정적인 공장 보정도 필요합니다.

수동 TestingCam2 테스트

TestingCam2 앱은 다음 검사를 수행하여 수동으로 실행해야 합니다. TestingCam2의 소스는 다음과 같습니다: pdk/apps/TestingCamera2/

JPEG 캡처

TestingCam2를 시작하고 JPEG 버튼을 누릅니다. 뷰파인더 이미지의 오른쪽에 나타나는 이미지는 동일한 방향을 포함하여 뷰파인더와 동일하게 나타나야 합니다.