La capa de abstracción de hardware (HAL) de la cámara de Android conecta las APIs del framework de la cámara de nivel superior en android.hardware.camera2 con el controlador y el hardware de la cámara subyacentes. 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 la interfaz de la HAL (HIDL). Si ya desarrollaste un controlador y un módulo de HAL de 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 el caso de los dispositivos que ejecutan Android 13 o versiones posteriores, el framework de 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 de las interfaces de la HAL de la cámara del AIDL. Para implementar estas funciones en dispositivos que se actualizan a Android 13 o versiones posteriores, los fabricantes de dispositivos deben migrar su proceso de HAL del uso de interfaces de cámara HIDL a interfaces de cámara AIDL.
Para obtener más información sobre las ventajas de AIDL, consulta AIDL para HALs.
Implementa el HAL de la cámara de 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:
- Proveedor de la cámara:
hardware/interfaces/camera/provider/aidl/
- Dispositivo de cámara:
hardware/interfaces/camera/device/aidl/
- Metadatos de la cámara:
hardware/interfaces/camera/metadata/aidl/
- Tipos de datos comunes:
hardware/interfaces/camera/common/aidl/
En el caso de los dispositivos que migran a AIDL, es posible que los fabricantes deban modificar los archivos de políticas de SELinux (sepolicy) de Android y RC según la estructura del código.
Valida el HAL de la cámara del AIDL
Para probar la implementación del HAL de la cámara de AIDL, asegúrate de que el dispositivo pase todas las pruebas de CTS y VTS. Android 13 introduce la prueba de VTS de AIDL,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Funciones de la HAL3 de la cámara
El objetivo del rediseño de la API de Android Camera es aumentar de manera sustancial la capacidad de las apps para controlar el subsistema de la cámara en dispositivos Android y reorganizar la API para que sea más eficiente y fácil de mantener. El control adicional facilita la creación de apps de cámara de alta calidad en dispositivos Android que pueden funcionar de manera 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 sola vista unificada, que se puede usar para implementar cualquiera de los modos anteriores y varios otros, como el modo de ráfaga. Esto permite un mejor control del usuario sobre 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 fotograma. Esto incluye la resolución y el formato de píxeles, el control manual del sensor, el lente y el flash, los modos de funcionamiento de 3A, el control del procesamiento de RAW a 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 devuelve los resultados a un flujo de salida. Además, se generan metadatos que contienen información como los espacios de color y el sombreado del lente para cada conjunto de resultados. Puedes pensar en la versión 3 de la cámara como una canalización para 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:
- Es un objeto de resultado con metadatos sobre la captura.
- De uno a N búferes de datos de imágenes, cada uno en su propia superficie de destino.
El conjunto de superficies de salida posibles 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 (alrededor de 3).
Una solicitud contiene todos los parámetros de configuración de captura deseados y la lista de superficies de salida en las que se deben insertar los búferes de imágenes para esta solicitud (del conjunto total configurado). Una solicitud puede ser única (con capture()
) o repetirse de forma indefinida (con setRepeatingRequest()
). Las capturas tienen prioridad sobre las solicitudes repetidas.

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
- Captura de imagen 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 de funcionamiento.

Figura 2: Componentes de la cámara
Android 7.0 sigue admitiendo la HAL1 de la cámara, 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 resulta útil cuando deseas admitir una cámara frontal menos potente con la HAL de cámara 1 y una cámara posterior más avanzada con la HAL de cámara 3.
Hay un solo módulo 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 un módulo de cámara 2 o posterior para admitir dispositivos 2 o posteriores, y dichos módulos de cámara pueden tener una combinación de versiones de dispositivos de cámara (esto es lo que queremos decir cuando afirmamos que Android admite la implementación de ambas HAL).