HAL de cámara

La capa de abstracción de hardware de la cámara (HAL) de Android conecta el nivel superior. las APIs del framework de la cámara en android.hardware.camera2 al controlador y hardware de la cámara subyacente. A partir de Android 13, el desarrollo de la interfaz de la HAL de la cámara usa AIDL. Android 8.0 introdujo Treble, que cambió la API de la HAL de la cámara a una interfaz estable definida por el lenguaje de descripción de interfaces HAL (HIDL). Si ya desarrollaste un módulo y un controlador de HAL de la cámara para Android 7.0 y versiones anteriores, ten en cuenta los cambios significativos en la canalización de la cámara.

HAL de la cámara del AIDL

En dispositivos que ejecutan Android 13 o versiones posteriores, la cámara incluye compatibilidad con las HAL de la cámara del AIDL. El framework de la cámara también admite HALs de cámara HIDL; sin embargo, las funciones de cámara agregadas en Android 13 o versiones posteriores solo están disponibles a través del Interfaces de la HAL de la cámara del AIDL Para implementar estas funciones en los dispositivos que se actualizan a Android 13 o versiones posteriores, los fabricantes de dispositivos deben migrar el proceso HAL de las interfaces de la cámara HIDL a la cámara del AIDL interfaces.

Para obtener más información sobre las ventajas del AIDL, consulta AIDL para HAL:

Cómo implementar la HAL de la cámara del AIDL

Para obtener una implementación de referencia de una HAL de cámara de AIDL, consulta hardware/google/camera/common/hal/aidl_service/.

Las especificaciones de la HAL de la cámara del AIDL se encuentran en las siguientes ubicaciones:

Para los dispositivos que migran al AIDL, es posible que los fabricantes de dispositivos deban modificar el Política de SELinux de Android (sepolicy) y archivos RC según el código en la nube.

Validar la HAL de la cámara del AIDL

Para probar la implementación de HAL de la cámara AIDL, asegúrate de que el dispositivo apruebe todas las pruebas de CTS y VTS. Android 13 presenta la prueba de VTS de AIDL, VtsAidlHalCameraProvider_TargetTest.cpp.

Funciones de la HAL3 de la cámara

El objetivo de rediseñar la API de Android Camera es aumentar considerablemente la capacidad de las apps para controlar el subsistema de la cámara en dispositivos Android mientras reorganizar la API para que sea más eficiente y fácil de mantener. El control adicional facilita la compilación de apps de cámara de alta calidad en dispositivos Android que pueden funcionar de forma confiable en varios 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 una sola vista unificada, que se puede usar para implementar cualquiera de los modos anteriores y muchas más, como el modo Ráfaga. Esto da como resultado un mejor control del usuario para el enfoque y la exposición, y más procesamiento posterior, como la reducción de ruido, el contraste y la nitidez. Además, esta vista simplificada hace que sea más fácil para la aplicación desarrolladores usen las distintas 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, de forma 1:1. Las solicitudes encapsula toda la información de configuración sobre la captura y el procesamiento de una marco. Esto incluye la resolución y el formato de píxeles. sensor manual, lente y flash el control Modos de operación 3A; Control de procesamiento de RAW->YUV la generación de estadísticas; etcétera.

En términos simples, el framework de la aplicación solicita un fotograma del subsistema de la cámara, y este muestra los resultados en un flujo de salida. Además, se generan metadatos que contienen información como espacios de color y sombreado de lentes para cada conjunto de resultados. Puedes pensar en la versión 3 de la cámara como una canalización hacia 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 lo siguiente:

  • Un objeto resultante con metadatos sobre la captura.
  • 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 el destino de una transmisión de búferes de imagen de una red resolución.
  • Solo se puede configurar una pequeña cantidad de plataformas como salidas a la vez (~3).

Una solicitud contiene todos los parámetros de configuración de captura deseados y la lista de superficies de salida a las que se enviarán los búferes de imágenes para esta solicitud (del conjunto configurado total). Una solicitud puede ser única (con capture()) o repetirse de forma indefinida (con setRepeatingRequest()). Las capturas tienen prioridad sobre las solicitudes repetidas.

Modelo de datos de la cámara

Figura 1: Modelo de operación principal de la cámara

Descripción general de la HAL1 de la cámara

La versión 1 del subsistema de la cámara se diseñó como una caja negra con controles de alto nivel y los siguientes tres modos de funcionamiento:

  • Vista previa
  • Grabación de video
  • Seguir capturando

Cada modo tiene capacidades ligeramente diferentes y superpuestas. Esto dificultaba la implementación de funciones nuevas, como el modo de ráfaga, que se encuentra entre dos de los modos de operación.

Diagrama de bloques de la cámara

Figura 2: Componentes de la cámara

Android 7.0 sigue siendo compatible con la HAL1 de la cámara, ya que muchos dispositivos todavía usan que la modifica. Además, el servicio de cámara de Android admite la implementación de ambas HAL (1 y 3), lo que es útil cuando se quiere admitir una cámara frontal menos capaz cámara con cámara HAL1 y una cámara posterior más avanzada con cámara HAL3

Hay un solo módulo de HAL de la 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 versiones posteriores para admitir 2 o más recientes, y esos módulos de cámara pueden tener una combinación de dispositivos de cámara (a esto nos referimos cuando decimos que Android admite la implementación de HAL).