Cámara HAL

La capa de abstracción de hardware de la cámara (HAL) 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. A partir de Android 13, el desarrollo de la interfaz HAL de la cámara usa AIDL . Android 8.0 introdujo Treble , cambiando la API HAL de la cámara a una interfaz estable definida por el lenguaje de descripción de interfaz HAL (HIDL). Si anteriormente desarrolló 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.

AIDL cámara HAL

Para dispositivos que ejecutan Android 13 o superior, el marco de la cámara incluye soporte para HAL de cámara AIDL. El marco de la cámara también es compatible con las HAL de la cámara HIDL; sin embargo, las funciones de la cámara agregadas en Android 13 o superior solo están disponibles a través de las interfaces HAL de la cámara AIDL. Para implementar dichas funciones en dispositivos que se actualicen a Android 13 o superior, los fabricantes de dispositivos deben migrar su proceso HAL del uso de interfaces de cámara HIDL a interfaces de cámara AIDL.

Para conocer las ventajas de AIDL, consulte AIDL para HAL .

Implementar cámara AIDL HAL

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

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

Para los dispositivos que migran a AIDL, es posible que los fabricantes de dispositivos deban modificar la política de SELinux de Android (sepolicy) y los archivos RC según la estructura del código.

Validar cámara AIDL HAL

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

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 de resultado 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 todas las configuraciones de captura deseadas 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.

modelo de datos de la cámara

Figura 1. Modelo de funcionamiento del núcleo de la cámara

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.

Diagrama de bloques de la cámara

Figura 2. Componentes de la cámara

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).