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 (OEM) y proveedores de procesadores de aplicaciones (AP) para que puedan garantizar la implementación adecuada del HAL de la cámara con la menor cantidad de defectos. Si bien esta es una incorporació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.
Al aprobar estas pruebas, los OEM 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 la implementación de un dispositivo es 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 paquete
android.hardware.camera2
sobre el que se compilan las apps de cámara.
Especificación de la HAL3 de la cámara
La especificación de Android Camera HAL3 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., 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 actual de HAL se define en estos archivos dentro del kit de desarrollo de plataforma (PDK) genérico de Android 5.0 y versiones posteriores:
- Interfaz y especificación de HAL de cámara 3.x:
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Especificación de metadatos de HAL de cámara 3.x:
system/media/camera/docs/docs.html
- Interfaz y especificación del formato de píxel del 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 estándares y automatizadas de Android para garantizar la compatibilidad del dispositivo Para obtener más información, consulta el Conjunto de pruebas de compatibilidad y la Descripción general de Trade Federation.
- Image Test Suite (ITS): Ejecuta pruebas manualmente para garantizar la corrección de la imagen. Para obtener más detalles, consulta ITS de la cámara.
- Pruebas manuales de la cámara:
Ejecuta desde la fuente en
pdk/apps/TestingCamera/
- Pruebas manuales de TestingCam2.1: Ejecuta 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 no supera las pruebas nativas, seguramente no superará las pruebas posteriores del Conjunto de pruebas de compatibilidad (CTS). Además, si un dispositivo no supera las pruebas de CTS, no tiene sentido continuar con la Image Test Suite (ITS). Te recomendamos que abordes 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 (VTS) de Android es un conjunto de pruebas que funciona a nivel de la interfaz de HIDL. Para obtener más información sobre el uso de VTS, consulta Vendor Test Suite.
Pruebas del Conjunto de pruebas de compatibilidad (CTS)
Las pruebas del Conjunto de pruebas de compatibilidad (CTS) de Android para la cámara se enfocan 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 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. Algunos ejemplos de cámaras externas son 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 cómo ejecutar el CTS.
Pruebas de CTS para la API de android.hardware.Camera
Encontrarás estas pruebas de la 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
Encontrarás 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 del CTS
Encontrarás estas pruebas de la cámara en:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Pruebas del paquete de pruebas de imágenes (ITS)
Las pruebas del paquete de pruebas 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 se aprueban o fallan. Todas las pruebas obligatorias en cada carpeta de escena deben aprobarse.
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 CTS y son un componente importante del plan de pruebas de HAL 3.2.
Pruebas del marco de trabajo de medios
Aprobar 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 ejemplos de comandos.
La ruta de inicio para las pruebas del framework de medios relacionadas con la cámara es la siguiente:
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 mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
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 de Media Framework
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
Donde 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 a la clase es el paquete Java más el nombre de la clase, el paquete de instrumentación no necesariamente es el mismo que el paquete 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
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 parámetros de configuración de la cámara. (es decir, flash, exposición, balance de blancos, escena, tamaño de la imagen y etiquetado geográfico)
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
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 ejecuta de forma correcta, el resultado será similar al siguiente:
----- 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 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:
/sdcard/mediaMemOutput.txt
Pruebas de unidades de medios
Todos 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 tiene como objetivo exigir al máximo 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
Todas las pruebas deberían aprobarse.
Pruebas manuales: Pruebas de la cámara
La app de TestingCam se debe ejecutar de forma manual y se deben realizar 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 Tomar foto, captura 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í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 distante debe estar nítido y enfocado. Guarda y mira las tomas en la vista de galería para que puedas acercar y analizar la nitidez con mayor facilidad.
Ten en cuenta que, para que una cámara con un actuador VCM supere esta prueba, se requerirá un sistema de control de AF de circuito cerrado o algún tipo de corrección de 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 de infinito del lente.
Pruebas manuales de la cámara 2
La app de TestingCam2 se debe ejecutar de forma manual y se deben realizar las siguientes verificaciones. La fuente de TestingCam2 se encuentra aquí: pdk/apps/TestingCamera2/
Captura JPEG
Inicia TestingCam2 y presiona el botón JPEG. La imagen que aparece a la derecha de la imagen del visor debe verse igual que el visor, incluida la misma orientación.