La capa de abstracción de hardware (HAL) de la cámara de Android conecta las API del marco de trabajo de la cámara de nivel superior en android.hardware.camera2 con el controlador y el hardware de la cámara subyacente. Android 8.0 introdujo Treble , cambiando la API de CameraHal a una interfaz estable definida por el lenguaje de descripción de interfaz HAL (HIDL). Si ha desarrollado previamente un módulo HAL de cámara y un controlador para Android 7.0 y versiones anteriores, tenga en cuenta los cambios significativos en la canalización de la cámara.
Características de la cámara HAL3
El objetivo del rediseño de la API de la cámara de Android es aumentar sustancialmente la capacidad de las aplicaciones para controlar el subsistema de la cámara en los dispositivos Android mientras se reorganiza la API para que sea más eficiente y fácil de mantener. El control adicional facilita la creación de aplicaciones de cámara de alta calidad en dispositivos Android que pueden operar de manera confiable en múltiples productos y al mismo tiempo usar algoritmos específicos del dispositivo siempre que sea posible para maximizar la calidad y el rendimiento.
La versión 3 del subsistema de la cámara estructura los modos de operación en una sola vista unificada, que se puede usar para implementar cualquiera de los modos anteriores y varios otros, como el modo de ráfaga. Esto da como resultado un mejor control del usuario para el enfoque y la exposición y más procesamiento posterior, como reducción de ruido, contraste y nitidez. Además, esta vista simplificada facilita a los desarrolladores de aplicaciones el uso de las diversas funciones de la cámara.
La API modela el subsistema de la cámara como una canalización que convierte las solicitudes entrantes de capturas de fotogramas en fotogramas, en una proporción de 1:1. Las solicitudes encapsulan toda la información de configuración sobre la captura y el procesamiento de un marco. Esto incluye la resolución y el formato de píxeles; sensor manual, control de lente y flash; Modos de funcionamiento 3A; Control de procesamiento RAW->YUV; generación de estadísticas; y así.
En términos simples, el marco de la aplicación solicita un marco del subsistema de la cámara y el subsistema de la cámara devuelve los resultados a un flujo de salida. Además, para cada conjunto de resultados se generan metadatos que contienen información como espacios de color y sombreado de lentes. Puede pensar en la versión 3 de la cámara como una canalización a la transmisión unidireccional de la versión 1 de la cámara. Convierte cada solicitud de captura en una imagen capturada por el sensor, que se procesa en:
- Un objeto Result con metadatos sobre la captura.
- De uno a N búferes de datos de imagen, cada uno en su propia superficie de destino.
El conjunto de posibles Superficies de salida está preconfigurado:
- Cada superficie es un destino para un flujo de búferes de imágenes de una resolución fija.
- Solo se puede configurar una pequeña cantidad de superficies como salidas a la vez (~3).
Una solicitud contiene todos los ajustes de captura deseados y la lista de superficies de salida para insertar búferes de imágenes para esta solicitud (del conjunto total configurado). Una solicitud puede ser única (con capture()
) o puede repetirse indefinidamente (con setRepeatingRequest()
). Las capturas tienen prioridad sobre las solicitudes repetidas.
Descripción general de la cámara HAL1
La versión 1 del subsistema de la cámara se diseñó como una caja negra con controles de alto nivel y los tres modos de funcionamiento siguientes:
- Avance
- Grabación de video
- captura fija
Cada modo tiene capacidades ligeramente diferentes y superpuestas. Esto dificultó la implementación de nuevas funciones, como el modo ráfaga, que se encuentra entre dos de los modos operativos.
Android 7.0 continúa siendo compatible con la cámara HAL1, ya que muchos dispositivos aún dependen de ella. Además, el servicio de cámara de Android admite la implementación de ambas HAL (1 y 3), lo que es útil cuando desea admitir una cámara frontal de menor capacidad con cámara HAL1 y una cámara trasera más avanzada con cámara HAL3.
Hay un módulo HAL de una sola cámara (con su propio número de versión ), que enumera varios dispositivos de cámara independientes, cada uno con su propio número de versión. Se requiere el módulo de cámara 2 o más reciente para admitir dispositivos 2 o más nuevos, y dichos módulos de cámara pueden tener una combinación de versiones de dispositivos de cámara (a esto nos referimos cuando decimos que Android admite la implementación de ambas HAL).