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

이 문서에는 Android 카메라 하드웨어 추상화 계층(HAL)을 평가하는 데 사용할 수 있는 모든 테스트 목록이 나와 있습니다. 이 테스트 목록은 OEM(Original Equipment Manufacturer) 및 애플리케이션 프로세서(AP) 공급업체가 결함을 최소화하여 카메라 HAL을 올바르게 구현할 수 있게 하기 위한 것입니다. 이 테스트 목록은 Android 호환성 테스트 모음(CTS)에 임의로 추가되지만, 테스트를 실시하면 카메라 테스트 범위가 크게 확대되며 잠재적인 버그를 확실하게 식별할 수 있습니다.

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) 테스트로 진행할 필요가 없습니다. 다음 테스트 세트로 진행하기 전에 먼저 각 테스트 유형의 오류를 해결하는 것이 좋습니다.

공급업체 테스트 모음(VTS) 테스트

Android 공급업체 테스트 도구 모음(VTS)은 HIDL 인터페이스 수준에서 작동하는 테스트 도구 모음입니다. VTS 사용에 관한 자세한 내용은 공급업체 테스트 도구 모음을 참조하세요.

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

카메라 Android 호환성 테스트 모음(CTS) 테스트는 기기 호환성에 중점을 둡니다. 테스트 환경 설정에 관한 자세한 내용은 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 인증 도구 카메라 테스트

cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*에서 이러한 카메라 테스트를 찾아보세요.

이미지 테스트 모음(ITS) 테스트

카메라 이미지 테스트 도구 모음(ITS) 테스트는 이미지 정확성에 중점을 둡니다. 테스트를 실행하려면 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/CameraITSCameraITS PDF 파일을 참고하세요. 스크립트 사용 방법에 관한 가이드는 tests 하위 디렉터리의 tutorial.py를 참고하세요.

ITS 테스트에는 Linux 환경이 필요합니다. ITS 테스트 실행에 필요한 특정 Python 버전에 관한 자세한 내용은 해당 버전의 CameraITS PDF 파일이나 Android 12의 Android 12 출시 노트를 참고하세요.

정적 장면에 권장되는 설정은 카메라 ITS-in-a-box에 설명되어 있습니다. sensor_fusion 장면에 권장되는 설정은 센서 퓨전 상자 빠른 시작 가이드에 설명되어 있습니다.

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) 및 테스트 실행기 이름(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

클래스 경로는 자바 패키지 + 클래스 이름이지만 계측 패키지는 자바 패키지와 동일하지 않아도 됩니다. 구성요소 이름을 연결할 때는 테스트 실행기 클래스가 있는 자바 패키지가 아닌 AndroidManifest.xml 패키지를 사용해야 합니다.

테스트의 단일 클래스를 실행하려면 다음과 같이 -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 앱은 다음을 확인한 상태에서 수동으로 실행해야 합니다. TestingCam의 소스는 다음에 있습니다. pdk/apps/TestingCamera/

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

TestingCam을 시작하고 미리보기를 켜고 자동 초점 모드가 무한대로 설정되어 있는지 확인합니다. 사진 촬영 버튼을 사용하여 카메라가 수평으로 위쪽(수직에 가까운) 및 아래쪽(수직에 가까운)을 향한 상태에서 멀리 있는(최소 10m 이상 떨어진) 피사체를 촬영합니다. 상향 촬영 장면의 예는 나무 높이 매달려 있는 잎과 가지를 아래에서 촬영하는 것이고 하향 촬영 장면의 예는 건물의 지붕에서 촬영한 거리입니다. 모든 상황에서 멀리 있는 피사체는 선명하고 초점이 맞아야 합니다. 더 쉽게 확대하고 선명도를 검사할 수 있도록 갤러리 보기에 사진을 저장하고 확인합니다.

VCM 액추에이터가 있는 카메라 사용 시 이 테스트를 통과하려면 폐쇄 루프 AF 제어 시스템이 필요하거나 가속도계 데이터를 사용하여 카메라 방향을 결정하는 데 따른 일종의 SW 보정이 필요합니다. 렌즈 무한대 위치의 신뢰할 수 있는 공장 보정도 필요합니다.

수동 TestingCam2 테스트

TestingCam2 앱은 다음을 확인한 상태에서 수동으로 실행해야 합니다. TestingCam2의 소스는 다음에 있습니다. pdk/apps/TestingCamera2/

JPEG 캡처

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