Este documento enumera todas las pruebas disponibles para evaluar la capa de abstracción de hardware (HAL) de la cámara de Android. Está destinado a fabricantes de equipos originales (OEM) y proveedores de procesadores de aplicaciones (AP) para que puedan garantizar la implementación adecuada de la cámara HAL con defectos mínimos. Si bien se trata de una adición voluntaria a Android Compatibility Test Suite (CTS), aumenta en gran medida la cobertura de la prueba de la cámara y sin duda identificará posibles errores.
Al pasar estas pruebas, los OEM validan si han integrado correctamente las interfaces de la capa de abstracción de hardware de la cámara Android (HAL) 3. Cuando cumple con todos los elementos de la lista de verificación, la implementación de un dispositivo puede considerarse completa con respecto a las interfaces HAL de Android Camera. Esto, a su vez, permitirá que un dispositivo admita correctamente el paquete android.hardware.camera2
en el que se basan las aplicaciones de la cámara.
Especificación de la cámara HAL3
La especificación Android Camera HAL3 es la fuente autorizada de información sobre qué dispositivos deben satisfacer; esta página proporciona un resumen de todas las pruebas que se pueden utilizar como lista de verificación. Los implementadores de Camera HAL (por ejemplo, proveedores de AP) deben revisar la especificación Camera HAL3 línea por línea y asegurarse de que sus dispositivos cumplan con ella.
La especificación HAL actual se define en estos archivos dentro de Android 5.0 y Android Platform Development Kit (PDK) genérico posterior:
- Interfaz y especificaciones de la cámara HAL 3.x :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Especificaciones de metadatos de la cámara HAL 3.x :
system/media/camera/docs/docs.html
- Interfaz y especificaciones de formato de píxel HAL :
system/core/libsystem/include/system/graphics.h
Tipos de prueba de cámara
Estos son los principales tipos de pruebas disponibles para la última cámara de Android junto con referencias a las instrucciones asociadas a continuación:
- Vendor Test Suite (VTS) : pruebas que prueban directamente la interfaz HAL de la cámara
- Conjunto de pruebas de compatibilidad (CTS) : pruebas estándar y automatizadas de Android para garantizar la compatibilidad del dispositivo; consulte la introducción de CTS y la descripción general de la Federación de Comercio
- Image Test Suite (ITS) : ejecute pruebas manualmente para garantizar la corrección de la imagen; consulte los archivos
README
de nivel superior y específicos de la prueba ytutorial.py
para obtener instrucciones de configuración - Pruebas manuales de TestingCam : ejecutar desde la fuente en
pdk/apps/TestingCamera/
- Pruebas manuales de TestingCam2.1 : ejecutar desde la fuente en
pdk/apps/TestingCamera2/
Todos estos tipos de pruebas se describen en detalle a continuación. Estas pruebas se presentan en el orden cronológico en el que se espera que los OEM las ejecuten.
Por ejemplo, si un dispositivo falla en las pruebas nativas, seguramente fallará en las subsiguientes pruebas de Compatibility Test Suite (CTS). Y si un dispositivo falla en CTS, no sirve de nada pasar a Image Test Suite (ITS). Recomendamos abordar las fallas en cada tipo de prueba antes de continuar con el siguiente conjunto de pruebas.
Pruebas de Vendor Test Suite (VTS)
Android Vendor Test Suite (VTS) es un conjunto de pruebas que funciona en el nivel de interfaz HIDL. Para obtener más información sobre el uso de VTS, consulte Vendor Test Suite .
Pruebas de conjunto de pruebas de compatibilidad (CTS)
Las pruebas de Camera Android Compatibility Test Suite (CTS) se centran en la compatibilidad del dispositivo. Para obtener información sobre cómo configurar un entorno de prueba, consulte Configuración de CTS .
La ruta de inicio para las pruebas de cámara CTS es: platform/cts
.
Al ejecutar CTS de cámara para dispositivos compatibles con cámaras externas (como cámaras web USB), debe tener un dispositivo enchufado al ejecutar CTS o las pruebas fallarán automáticamente. Los ejemplos de cámaras externas incluyen: Logitech HD Pro Webcam C920 y Microsoft LifeCam HD-3000 .
Consulte la introducción de CTS y sus subpáginas para obtener instrucciones generales sobre cómo ejecutar CTS.
Pruebas CTS para la API android.hardware.Camera
Encuentre estas pruebas de cámara en 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
Pruebas CTS para la API android.hardware.camera2
Encuentre estas pruebas de cámara en cts/tests/tests/
:
-
hardware/src/android/hardware/camera2/cts/*
-
permission/src/android/permission/cts/Camera2PermissionTest.java
Pruebas de cámara del verificador CTS
Encuentre estas pruebas de cámara en: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Pruebas de Image Test Suite (ITS)
Las pruebas Camera Image Test Suite (ITS) se centran en la corrección de la imagen. Para realizar las pruebas, ejecute los scripts de Python en una estación de trabajo con el dispositivo Android conectado a través de USB.
La infraestructura y las pruebas de Camera ITS se encuentran en el directorio cts/apps/CameraITS
. Cada prueba reside en un subdirectorio 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
Para obtener más información sobre cómo configurar y ejecutar las pruebas, consulte el archivo PDF de CameraITS
en cts/apps/CameraITS
. Consulte tutorial.py
en el subdirectorio de tests
para obtener una guía sobre cómo usar los scripts.
Las pruebas ITS requieren un entorno Linux. Para obtener detalles sobre las versiones específicas de Python requeridas para ejecutar las pruebas de ITS, consulte el archivo PDF de CameraITS
para la versión o también las notas de la versión de Android 12 para Android 12.
La configuración recomendada para escenas estáticas se describe en Camera ITS-in-a-box . La configuración recomendada para la escena sensor_fusion se describe en la Guía de inicio rápido de Sensor Fusion Box .
Para ejecutar ITS manualmente, prepare un entorno físico simple con un objetivo específico y reutilizable, como una pared blanca, una tarjeta gris y una lámpara de escritorio. Monte el dispositivo Android en un trípode y ejecute los scripts para probar las funciones de la cámara. La mayoría de las pruebas se aprueban o fallan, pero algunas ofrecen métricas.
Estos scripts prueban escenarios que no se prueban en CTS y son un componente importante del plan de prueba de HAL 3.2.
Las pruebas ITS pasan o fallan. Todas las pruebas obligatorias en cada carpeta de escena deben pasar. Las pruebas que no son obligatorias pueden fallar y seguir contando como aprobadas en CtsVerifier
.
Para obtener descripciones de escenas y pruebas, consulte Pruebas ITS de cámara .
Pruebas de marco de medios
Pase todas las pruebas de medios relacionadas con la cámara en MediaFrameworkTest. Tenga en cuenta que estas pruebas requieren que mediaframeworktest.apk esté instalado en el dispositivo Android. Deberá make mediaframeworktest
y luego usar adb para instalar el .apk resultante. Los comandos de ejemplo se incluyen a continuación.
La ruta de inicio para las pruebas de marco de medios relacionadas con la cámara es: platform/frameworks/base
Encuentre el código fuente de las pruebas aquí: frameworks/base/media/tests/MediaFrameworkTest
Para configurar estas pruebas:
make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
Donde la variable de name representa el directorio que contiene el producto del proveedor.
Encuentre todas las pruebas en el siguiente directorio o sus subdirectorios:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
Cada subdirectorio representa una clase de pruebas:
-
functional/
-
integration/
-
performance/
-
power/
-
stress/
-
unit/
Ejecución de pruebas de Media Framework
Para ver todas las pruebas disponibles:
adb shell pm list instrumentation
Esto producirá resultados similares a:
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)
Identifique y extraiga el componente (entre instrumentation:
y (target=com.android.mediaframeworktest)
de cada línea de prueba. El componente se compone del nombre del paquete de destino ( com.android.mediaframeworktest
) y el nombre del ejecutor de pruebas ( MediaFramework TestRunner
MediaFramework TestRunner
).
Por ejemplo:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Luego puede pasar cada componente a adb shell am instrument
así:
adb shell am instrument -w component.name
Donde component.name
es igual al valor extraído arriba. Por ejemplo:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Tenga en cuenta que, si bien la ruta de clase es el paquete de Java + el nombre de la clase, el paquete de instrumentación no es necesariamente el mismo que el paquete de Java. Asegúrese de usar el paquete AndroidManifest.xml al concatenar el nombre del componente, no el paquete Java en el que reside la clase del ejecutor de pruebas.
Para ejecutar una sola clase de pruebas, pase la clase -e
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Para ejecutar solo un método en una clase de prueba, agregue un signo de libra (#) y el nombre del método (en este caso, testConnectPro
) al nombre de la clase, así:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Pruebas funcionales de configuración de medios
Aquí hay un ejemplo de ejecución de una prueba funcional. Esta prueba verifica la funcionalidad básica de diferentes combinaciones de configuraciones de la cámara. (es decir, Flash, exposición, balance de blancos, escena, tamaño de imagen y geoetiqueta)
Ejecute el comando de prueba:
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
Pruebas de integración de medios
Aquí hay un ejemplo de ejecución de una prueba de integración, en este caso mediaframeworktest/integration/CameraBinderTest.java y mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
Si tiene éxito, esto da como resultado una salida similar a:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Pruebas de rendimiento de los medios
Esta prueba de memoria de vista previa abrirá y liberará la vista previa de la cámara 200 veces. En cada 20 iteraciones, se registrará la instantánea de ps mediaserver y comparará el uso de memoria diferente después de 200 iteraciones. La prueba fallará si la diferencia es superior a 150 km.
Ejecute el comando de prueba:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Se puede encontrar una salida más detallada en: /sdcard/mediaMemOutput.txt
Pruebas de unidad de medios
Los comandos para ejecutar pruebas unitarias son todos similares. Por ejemplo, para CameraMetadataTest.java, el comando sería:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
Pruebas de estrés de los medios
Esta prueba es para enfatizar la captura de imágenes de la cámara y la grabación de video.
Ejecute el comando de prueba:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Todas las pruebas deben pasar.
Pruebas manualesPruebas de cámara
La aplicación TestingCam debe ejecutarse manualmente con las siguientes comprobaciones realizadas. La fuente de TestingCam está aquí: pdk/apps/TestingCamera/
Enfoque infinito con inclinación de la cámara
Inicie TestingCam, active la vista previa y asegúrese de que el modo de enfoque automático esté configurado en infinito. Usando el botón Tomar foto , capture tomas de sujetos distantes (al menos a 10 m de distancia) con la cámara apuntando horizontalmente, hacia arriba (cerca de la vertical) y hacia abajo (cerca de la vertical); un ejemplo de la toma hacia arriba podrían ser las hojas/ramas altas de un árbol desde abajo y un ejemplo de la toma hacia abajo podría ser la calle vista desde el techo de un edificio. En todos los casos, el sujeto distante debe estar nítido y enfocado. Guarde y vea las tomas en la vista de galería para que pueda acercar e inspeccionar la nitidez más fácilmente.
Tenga en cuenta que para que una cámara con un actuador VCM pase esta prueba, requerirá un sistema de control de AF de bucle cerrado o algún tipo de corrección SW basada en el uso de datos del acelerómetro para determinar la orientación de la cámara. También se necesitará una calibración de fábrica confiable de la posición infinita de la lente.
Pruebas manualesCam2 pruebas
La aplicación TestingCam2 debe ejecutarse manualmente, con las siguientes comprobaciones realizadas. La fuente de TestingCam2 está aquí: pdk/apps/TestingCamera2/
captura JPEG
Inicie TestingCam2 y presione el botón JPEG . La imagen que aparece a la derecha de la imagen del visor debe aparecer igual que el visor, incluida la misma orientación.