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á destinada a fabricantes de equipos originales (OEMs) y proveedores de procesadores de aplicaciones (AP) para que puedan garantizar la implementación adecuada de la HAL de la cámara con la menor cantidad de defectos. Aunque esta es una adición voluntaria al Conjunto de pruebas de compatibilidad (CTS) de Android, 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 3 interfaces de la capa de abstracción de hardware (HAL) de la cámara de Android. Cuando se cumplen todos los elementos de la lista de tareas, una implementación del dispositivo se puede considerar completa con respecto a las interfaces de la HAL de la cámara de Android. Esto, a su vez, permitirá que un dispositivo admita correctamente el
android.hardware.camera2 paquete en el que se basan las apps de cámara.
Especificación de la HAL3 de la cámara
La especificación de la HAL3 de la cámara de Android es la fuente autorizada de información sobre lo que deben satisfacer 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., los 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 la cumplan.
La especificación de HAL actual se define en estos archivos dentro del Kit de desarrollo de la plataforma de Android (PDK) genérico de Android 5.0 y versiones posteriores:
- Interfaz y especificación de la HAL 3.x de la cámara:
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - Especificación de metadatos de la HAL 3.x de la cámara:
system/media/camera/docs/docs.html - Interfaz y especificación del formato de píxeles de HAL:
system/core/libsystem/include/system/graphics.h
Tipos de pruebas de la cámara
Estos son los principales tipos de pruebas disponibles para la cámara de Android más reciente, junto con referencias a las instrucciones asociadas que se indican a continuación:
- _Conjunto de pruebas de proveedores (VTS): Pruebas que prueban directamente la interfaz de la HAL de la cámara
- Conjunto de pruebas de compatibilidad (CTS): Pruebas de Android estándar y automatizadas para garantizar la compatibilidad del dispositivo. Para obtener más detalles, consulta Conjunto de pruebas de compatibilidad y Descripción general de Trade Federation.
- Conjunto de pruebas de imagen (ITS): Ejecuta pruebas de forma manual para garantizar la corrección de la imagen. Para obtener más detalles, consulta ITS de la cámara.
- Pruebas de TestingCam manuales:
Se ejecutan desde la fuente en
pdk/apps/TestingCamera/ - Pruebas de TestingCam2.1 manuales: Se ejecutan 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 OEMs las ejecuten.
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 no pasa el CTS, no tiene sentido continuar con el Conjunto de pruebas de imagen (ITS). Te recomendamos que abordes las fallas en cada tipo de prueba antes de continuar con el siguiente conjunto de pruebas.
Pruebas del Conjunto de pruebas de proveedores (VTS)
El Conjunto de pruebas de proveedores de Android (VTS) es un conjunto 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 Android para la cámara se centran en la compatibilidad del dispositivo. Para obtener información sobre cómo configurar un entorno de prueba, consulta Cómo configurar el CTS.
La ruta de inicio para las pruebas de CTS de la cámara es platform/cts.
Cuando ejecutes el CTS de la cámara para dispositivos que admiten cámaras externas (como cámaras web USB), debes tener un dispositivo conectado cuando ejecutes el CTS o las pruebas fallarán automáticamente. Algunos ejemplos de cámaras externas incluyen: la cámara web Logitech HD Pro C920 y la Microsoft LifeCam HD-3000.
Consulta la introducción al CTS y sus subpáginas para obtener instrucciones generales sobre la ejecución del CTS.
Pruebas de CTS para la API de android.hardware.Camera
Encuentra estas pruebas de la cámara en cts/tests/tests/:
hardware/src/android/hardware/cts/CameraTest.javahardware/src/android/hardware/cts/CameraGLTest.javahardware/src/android/hardware/cts/Camera_SizeTest.javapermission/src/android/permission/cts/CameraPermissionTest.java
Pruebas de CTS para la API de android.hardware.camera2
Encuentra estas pruebas de la cámara en cts/tests/tests/:
hardware/src/android/hardware/camera2/cts/*permission/src/android/permission/cts/Camera2PermissionTest.java
Pruebas de la cámara del verificador de CTS
Encuentra estas pruebas de la cámara en cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*.
Pruebas del Conjunto de pruebas de imagen (ITS)
Las pruebas del Conjunto de pruebas de imagen (ITS) de la cámara se centran 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
cts/apps/CameraITS directorio.
Cada prueba reside en un tests/scene# subdirectorio.
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 se aprueban o fallan. Deben aprobarse todas las pruebas obligatorias en cada carpeta de escena.
Las pruebas que no son obligatorias pueden fallar y, aun así, contarse como aprobadas en
CtsVerifier.
Las pruebas de ITS prueban situaciones que no se prueban en el CTS y son un componente importante del plan de pruebas de HAL 3.2.
Pruebas del marco de trabajo de medios
Pasa todas las pruebas de medios relacionadas con la cámara en MediaFrameworkTest. Ten en cuenta que estas pruebas requieren que se instale mediaframeworktest.apk en el dispositivo Android. Deberás make mediaframeworktest y, luego, usar adb para instalar el archivo .apk resultante. A continuación, se incluyen comandos de ejemplo.
La ruta de inicio para las pruebas del marco de trabajo de medios relacionadas con la cámara es platform/frameworks/base.
Encuentra el código fuente de las pruebas aquí: frameworks/base/media/tests/MediaFrameworkTest.
Para configurar estas pruebas, haz lo siguiente:
make mediaframeworktestadb install out/target/product/name/data/app/mediaframeworktest.apk
En el 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/
Ejecuta pruebas del marco de trabajo de medios
Para ver todas las pruebas disponibles, haz lo siguiente:
adb shell pm list instrumentation
Esto generará resultados similares a 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
(MediaFramework).
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
En el que component.name es igual al valor extraído
anteriormente. 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 paquete de instrumentación no es necesariamente el mismo que el paquete de Java. Asegúrate de usar el paquete AndroidManifest.xml cuando concatenes el nombre del componente, 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 class
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, agrega un signo de número (#) 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 de medios
Este es un ejemplo de ejecución de una prueba funcional. Esta prueba verifica la funcionalidad básica de diferentes combinaciones de parámetros de configuración de la cámara. (es decir, 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 medios
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á similar al siguiente ejemplo:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Pruebas de rendimiento de 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 se comparará el uso de memoria diferente después de 200 iteraciones. La prueba fallará si la diferencia es mayor que 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 /sdcard/mediaMemOutput.txt.
Pruebas de unidades de medios
Los comandos para ejecutar pruebas de unidades son 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 medios
Esta prueba es para forzar la captura de imágenes de la cámara y la grabación de video.
Ejecuta el comando de prueba:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Todas las pruebas deberían aprobarse.
Pruebas de TestingCam manuales
La app de TestingCam se debe ejecutar de forma manual con las siguientes verificaciones.
La fuente de TestingCam se encuentra aquí: pdk/apps/TestingCamera/.
Enfoque infinito con 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 fotos 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ía ser 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 distante debe ser nítido y estar enfocado. Guarda y mira las fotos en la vista de galería para que puedas acercar y examinar la nitidez con mayor facilidad.
Ten en cuenta que, para que una cámara con un actuador VCM pase esta prueba, requerirá 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 se necesitará una calibración de fábrica confiable de la posición infinita de la lente.
Pruebas de TestingCam2 manuales
La app de TestingCam2 se debe ejecutar de forma manual con las siguientes verificaciones. La fuente de TestingCam2 se encuentra 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 a la del visor, incluida la misma orientación.