Lista de verificación de pruebas de cámara HAL

Esta página 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. Aunque se trata de una adición voluntaria al conjunto de pruebas de compatibilidad de Android (CTS), aumenta considerablemente la cobertura de las pruebas de la cámara y ciertamente identificará errores potenciales.

Al pasar estas pruebas, los OEM validan si han integrado correctamente las interfaces de la capa de abstracción de hardware (HAL) 3 de la cámara de Android. Cuando se cumplen 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 la cámara de Android. 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 cumplir; Esta página proporciona un resumen de todas las pruebas que se pueden utilizar como lista de verificación. Los implementadores de cámaras HAL (por ejemplo, proveedores de AP) deben revisar la especificación de la cámara HAL3 línea por línea y asegurarse de que sus dispositivos la cumplan.

La especificación HAL actual se define en estos archivos dentro del kit de desarrollo de plataforma Android (PDK) genérico de Android 5.0 y posteriores:

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:

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 las ejecuten los OEM.

Por ejemplo, si un dispositivo no pasa las pruebas nativas, seguramente no pasará las pruebas posteriores del Conjunto de pruebas de compatibilidad (CTS). Y si un dispositivo falla en el CTS, es de poca utilidad proceder al Image Test Suite (ITS). Recomendamos abordar las fallas en cada tipo de prueba antes de continuar con el siguiente conjunto de pruebas.

Pruebas de conjunto de pruebas de proveedores (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 del conjunto de pruebas de compatibilidad (CTS)

Las pruebas del conjunto de pruebas de compatibilidad de Android (CTS) de la cámara 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 inicial para las pruebas de cámara CTS es: platform/cts .

Al ejecutar CTS de cámara para dispositivos que admiten cámaras externas (como cámaras web USB), debe tener un dispositivo conectado cuando ejecute CTS o las pruebas fallarán automáticamente. 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 de 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 # .

Para obtener más información sobre cómo configurar y ejecutar las pruebas, consulte Camera ITS .

Para obtener descripciones de escenas y pruebas, consulte Pruebas ITS de cámara .

Sus pruebas pasan o fallan. Se deben aprobar todas las pruebas obligatorias en cada carpeta de escenas. Las pruebas que no son obligatorias pueden fallar y aun así contar como aprobadas en CtsVerifier .

ITS prueba escenarios de prueba que no se prueban en CTS y son un componente importante del plan de prueba HAL 3.2.

Pruebas del marco de medios

Pase todas las pruebas multimedia 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. A continuación se incluyen comandos de ejemplo.

La ruta inicial para las pruebas del 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 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/

Ejecutar 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 prueba ( 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 al adb shell am instrument de esta manera:

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 Java + nombre de clase, el paquete de instrumentación no es necesariamente el mismo que el paquete Java. Asegúrese de utilizar 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 argumento, así:

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 almohadilla (#) 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

A continuación se muestra 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, WB, escena, tamaño de imagen y etiqueta geográfica)

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

A continuación se muestra 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 un resultado 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 se 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 unitarias 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 mediático

Esta prueba es para estresar 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 deberían pasar.

Pruebas manuales de TestingCam

La aplicación TestingCam debe ejecutarse manualmente realizando las siguientes comprobaciones. 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 fotografía , 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 acercarlas e inspeccionar la nitidez más fácilmente.

Tenga en cuenta que para que una cámara con un actuador VCM pase esta prueba, necesitará un sistema de control AF de circuito 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 será necesaria una calibración confiable de fábrica de la posición infinita de la lente.

Pruebas manuales de TestingCam2

La aplicación TestingCam2 debe ejecutarse manualmente y realizar las siguientes comprobaciones. 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 verse igual que el visor, incluso con la misma orientación.