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 capa de abstracción de hardware (HAL) de la cámara de Android. Está dirigido a fabricantes de equipos originales (OEMs) y proveedores de procesadores de aplicaciones (AP), por lo que pueden garantizar la implementación adecuada de la HAL de la cámara con defectos mínimos. Aunque esta es una incorporación voluntaria al conjunto de pruebas de compatibilidad de Android (CTS), aumenta en gran medida la cobertura de las pruebas de la cámara y, sin duda, identificará posibles errores.

Si aprueban estas pruebas, los OEMs validan si integraron 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 tareas, se puede considerar que una implementación de dispositivo es completa con respecto a las interfaces de 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 compilan las apps de cámara.

Especificaciones de la HAL3 de la cámara

La especificación HAL3 de la cámara de Android es la fuente confiable de información sobre los requisitos que deben cumplir los dispositivos. En esta página, se proporciona un resumen de todas las pruebas que se pueden usar como lista de tareas. Los implementadores de la HAL de la cámara (p.ej., proveedores de AP) deben revisar la especificación de la HAL3 de la cámara línea por línea y asegurarse de que sus dispositivos cumplan con ella.

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

Tipos de pruebas de la cámara

Estos son los tipos principales de pruebas disponibles para la cámara más reciente de Android, junto con referencias a las instrucciones asociadas a continuación:

Todos estos tipos de prueba 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 no pasa las pruebas nativas, es seguro que no pasará las pruebas posteriores del conjunto de pruebas de compatibilidad (CTS). Y si un dispositivo no pasa la CTS, no tiene mucho sentido continuar con el Image Test Suite (ITS). Recomendamos abordar las fallas en cada tipo de prueba antes de continuar con el siguiente conjunto de pruebas.

Pruebas del paquete de pruebas de proveedores (VTS)

El Conjunto de pruebas de proveedores 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 Conjunto de pruebas de proveedores.

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 la compatibilidad del dispositivo. Para obtener información sobre cómo configurar un entorno de prueba, consulta Cómo configurar CTS.

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

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

Consulta la introducción al CTS y sus subpáginas para obtener instrucciones generales sobre cómo ejecutar CTS.

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

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

Busca 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 la cámara en: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Pruebas del Paquete de prueba de imagen (ITS)

Las pruebas del Paquete de prueba de imagen de la cámara (ITS) se enfocan en la corrección de la imagen. 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 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, consulta ITS de la cámara.

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

Las pruebas de ITS pueden aprobarse o fallar. Se deben aprobar todas las pruebas obligatorias en cada carpeta de escena. Las pruebas que no son obligatorias pueden fallar y, aun así, contar como aprobadas en CtsVerifier.

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

Pruebas del framework de Media

Pasar todas las pruebas de contenido multimedia relacionadas con la cámara en MediaFrameworkTest Ten en cuenta que estas pruebas requieren que mediaframeworktest.apk esté instalado en el dispositivo Android. Deberás usar make mediaframeworktest y, luego, adb para instalar el .apk resultante. A continuación, se incluyen ejemplos de comandos.

La ruta de acceso inicial para las pruebas del framework de medios relacionadas 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 la que la variable name representa el directorio que contiene el producto del proveedor.

Encuentra 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/

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 se compone del 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 de la siguiente manera:

adb shell am instrument -w component.name

Donde component.name es igual al valor extraído anterior. Por ejemplo:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Ten en cuenta que, si bien la ruta de acceso a la clase es el paquete Java + el nombre de la clase, el paquete de instrumentación no es necesariamente el mismo que el paquete Java. Asegúrate de usar el paquete AndroidManifest.xml cuando concatenas 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, pasa el argumento -e class, de la siguiente manera:

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 la funcionalidad básica de diferentes combinaciones de configuración de la cámara. (es decir, flash, exposición, balance de blancos, 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 multimedia

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 se realiza correctamente, se obtiene un resultado similar al 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 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 se comparará el uso de memoria diferente después de 200 iteraciones. La prueba fallará 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 los siguientes lugares: /sdcard/mediaMemOutput.txt

Pruebas de unidades de contenido multimedia

Los comandos para ejecutar pruebas de unidades son todos similares. Por ejemplo, para 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 de contenido multimedia

Esta prueba está diseñada para someter a prueba 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 de TestingCam se debe ejecutar de forma manual 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 Take picture, captura imágenes de sujetos lejanos (a una distancia mínima de 10 m) 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ía ser las hojas o 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 lejano debe estar nítido y enfocado. Guarda y mira las tomas en la vista de galería para que puedas acercar la imagen y verificar la nitidez con mayor facilidad.

Ten en cuenta que, para que una cámara con un actuador de VCM apruebe esta prueba, necesitará un sistema de control de AF de bucle cerrado o algún tipo de corrección de software basada en el uso de 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 de TestingCam2

La app de TestingCam2 se debe ejecutar de forma manual y se deben realizar las siguientes verificaciones. 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 ser igual que el visor, incluida la misma orientación.