Lista de tareas para la prueba de la HAL de la cámara

En esta página, se enumeran todas las pruebas disponibles para evaluar la cámara de Android la capa de abstracción de hardware (HAL). Está destinado al equipo original. fabricantes (OEMs) y aplicaciones proveedores de procesadores (AP), de modo que garanticen la implementación adecuada de la cámara HAL con defectos mínimos. Aunque se trata de un agregado voluntario a Android Conjunto de pruebas de compatibilidad (CTS), que aumenta considerablemente la cobertura de las pruebas de la cámara y para identificar posibles errores.

Al pasar estas pruebas, los OEM validan si se integraron correctamente la aplicación hardware de la cámara 3 de la capa de abstracción (HAL). Cuando cumpla con todos los elementos de las lista de tareas, una implementación de dispositivo puede considerarse completa con respecto a las interfaces de la HAL de la cámara de Android. A su vez, esto permitirá que el dispositivo admitir de forma adecuada el paquete android.hardware.camera2 que las apps de cámara.

Especificación de la HAL3 de la cámara

Especificación de la HAL3 de la cámara de Android es la fuente autorizada de información sobre lo que los dispositivos deben satisfacer; esta página ofrece un resumen de todas las pruebas que se pueden usar como lista de tareas. Implementadores de HAL de la cámara (p.ej., AP) ) deben revisar la especificación de la cámara HAL3 línea por línea y asegurarse que sus dispositivos cumplan con ella.

La especificación actual del HAL se define en estos archivos dentro del Android Platform Development Kit (PDK) genérico 5.0 y posteriores:

Tipos de prueba de la cámara

A continuación, se indican los tipos principales de pruebas disponibles para la cámara de Android más reciente. junto con referencias a instrucciones asociadas a continuación:

Todos estos tipos de prueba se describen en detalle a continuación. Estas pruebas son presentados en el orden cronológico en el que se espera que realicen los OEM de ellos.

Por ejemplo, si un dispositivo no pasa las pruebas en código nativo, no pasará de ninguna forma pruebas posteriores del Conjunto de pruebas de compatibilidad (CTS). Y si un dispositivo falla con el CTS, es poco útil proceder al conjunto de pruebas de imágenes (ITS). Recomendaciones las fallas en cada tipo de prueba antes de continuar con el siguiente conjunto y pruebas.

Pruebas del paquete de pruebas de proveedores (VTS)

El Paquete de pruebas del proveedor de Android (VTS) es un paquete de pruebas que funciona en el Nivel de la interfaz HIDL. Para obtener más información sobre el uso de VTS, consulta Paquete de pruebas del proveedor.

Pruebas del Conjunto de pruebas de compatibilidad (CTS)

Las pruebas del Conjunto de pruebas de compatibilidad (CTS) de la cámara de Android se enfocan en el dispositivo compatibilidad. Si deseas obtener información para configurar un entorno de pruebas, consulta Cómo configurar el CTS.

La ruta inicial para las pruebas del CTS de la cámara es platform/cts.

Cuando se ejecuta el CTS de la cámara para dispositivos que admiten cámaras externas (como cámaras web con USB), debes tener un dispositivo conectado cuando ejecutes el CTS o las pruebas fallará automáticamente. Algunos ejemplos de cámaras externas son Logitech HD Pro Webcam C920 y Microsoft LifeCam HD-3000.

Consulta el CTS Introducción y sus subpáginas para obtener instrucciones generales sobre la ejecución de CTS.

Pruebas del CTS para la API de android.hardware.Camera

Encuentra 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 del CTS para la API de android.hardware.camera2

Encuentra 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 del CTS

Encuentra estas pruebas de cámara en: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Pruebas del Paquete de pruebas de imagen (ITS)

Las pruebas del Paquete de pruebas de imagen de la cámara (ITS) se enfocan en la precisión de las imágenes. Para realizar las pruebas, ejecuta las secuencias de comandos de Python en una estación de trabajo con el Dispositivo Android conectado a través de USB

La infraestructura y las pruebas de ITS de la cámara se encuentran en 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, consulta ITS de la cámara.

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

Las pruebas de ITS son exitosas o no. Se deben aprobar todas las pruebas obligatorias en cada carpeta de escena. Las pruebas que no son obligatorias pueden fallar y, de todos modos, contar como una aprobación CtsVerifier

El ITS prueba situaciones de prueba que no se evalúan en el CTS y son un factor importante componente del plan de prueba HAL 3.2.

Pruebas del framework de medios

Pasar todas las pruebas de contenido multimedia relacionadas con la cámara en MediaFrameworkTest Por favor, ten en cuenta que estas pruebas requieren que se instale mediaframeworktest.apk en el dispositivo dispositivo. Necesitarás make mediaframeworktest y, luego, usar adb para instalar el .apk resultante. A continuación, se incluyen comandos de ejemplo.

La ruta de inicio para las pruebas del framework de contenido multimedia relacionado con la cámara es la siguiente: platform/frameworks/base

Encuentra el código fuente para las pruebas aquí: frameworks/base/media/tests/MediaFrameworkTest

Para configurar estas pruebas, sigue estos pasos:

make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk

En el que la variable name representa la que contiene el producto del proveedor.

Encuentra todas las pruebas en el siguiente directorio o en sus subdirectorios:

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

Cada subdirectorio representa una clase de pruebas:

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

Cómo ejecutar pruebas de Media Framework

Para ver todas las pruebas disponibles, haz lo siguiente:

adb shell pm list instrumentation

Esto generará resultados como los siguientes:

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)

Identifica y extrae el componente (entre instrumentation: y (target=com.android.mediaframeworktest) de cada línea de prueba. El componente está compuesto por el nombre del paquete de destino (com.android.mediaframeworktest) y el nombre del ejecutor de pruebas (MediaFrameworkTestRunner)

Por ejemplo:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

Luego, puedes pasar cada componente a adb shell am instrument, como entonces:

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

Ten en cuenta que, si bien la ruta de acceso de la clase es el paquete de Java + el nombre de la clase, el de instrumentación no es necesariamente lo mismo que el paquete de Java. Marca asegúrate de usar el paquete AndroidManifest.xml cuando concatenas el componente del ejecutor de pruebas, no el paquete de Java en el que reside la clase del ejecutor de pruebas.

Para ejecutar una sola clase de pruebas, pasa el argumento -e clase , como de modo que:

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Para ejecutar un solo método en una clase de prueba, agrega un signo numeral (#) y el nombre del método (en este caso, testConnectPro) al nombre de la clase, de la siguiente manera:

adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Pruebas funcionales de la configuración multimedia

Este es un ejemplo de ejecución de una prueba funcional. Esta prueba verifica el estado de las diferentes combinaciones de parámetros de configuración de la cámara. (p. ej., Flash, exposición, WB, escena, tamaño de la imagen y geoetiqueta)

Ejecuta 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 contenido multimedia

Este es 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 se ejecuta de forma correcta, el resultado será el siguiente:

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

Pruebas de rendimiento del contenido multimedia

Esta prueba de memoria de vista previa se abrirá y liberará la vista previa de la cámara para 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 hará lo siguiente si la diferencia es superior a 150 kM.

Ejecuta el comando de prueba:

adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner

Puedes encontrar resultados más detallados en lo siguiente: /sdcard/mediaMemOutput.txt

Pruebas de unidades multimedia

Los comandos para ejecutar pruebas de unidades son todos similares. Por ejemplo, para los CameraMetadataTest.java, el comando sería el siguiente:

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

Pruebas de esfuerzo multimedia

Esta prueba tiene el objetivo de sobrecargar la captura de imágenes y la grabación de video de la cámara.

Ejecuta el comando de prueba:

adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner

Se deberían aprobar todas las pruebas.

Pruebas manuales de TestingCam

La app TestingCam debe ejecutarse manualmente con las siguientes verificaciones. La fuente de TestingCam está aquí: pdk/apps/TestingCamera/

Enfoque infinito con la inclinación de la cámara

Inicia TestingCam, activa la vista previa y asegúrate de que el modo de enfoque automático esté configurado en infinito. Con el botón Tomar foto, puedes hacer 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 el plano hacia arriba podrían ser hojas/ramas altas de un árbol desde abajo y una ejemplo de la toma hacia abajo podría ser la calle vista desde el techo de una del edificio. En todos los casos, el sujeto distante debe ser nítido y estar bien enfocado. Guardar y ver las tomas en la vista de galería para poder acercarlas e inspeccionar el nitidez con mayor facilidad.

Ten en cuenta que para que una cámara con un accionador VCM apruebe esta prueba, deberás ya sea un sistema de control de AF de circuito cerrado o necesita algún tipo de SW según los datos del acelerómetro para determinar la orientación de la cámara. También necesitarás una calibración confiable de fábrica de la posición infinita de la lente.

Pruebas manuales TestingCam2

La app TestingCam2 debería ejecutarse manualmente, con las siguientes comprobaciones una tarea. La fuente de TestingCam2 está aquí: pdk/apps/TestingCamera2/.

Captura de JPEG

Inicia TestingCam2 y presiona el botón JPEG. La imagen que aparece a la derecha de la imagen del visor debe verse de la misma manera que visor e incluso tener la misma orientación.