La capa de abstracción de hardware (HAL) de la cámara de Android conecta las APIs de nivel superior del framework de la cámara en android.hardware.camera2 al controlador y hardware subyacentes de la cámara. A partir de Android 13, el desarrollo de la interfaz de la HAL de la cámara usa el 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 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 las HAL de la 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 de usar 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 la 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 de dispositivos deban modificar la política de SELinux de Android (sepolicy) y los archivos RC según la estructura del código.
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 HAL3 de la cámara
El objetivo del rediseño de la API de la cámara de Android es aumentar de manera significativa la capacidad de las apps para controlar el subsistema de la cámara en dispositivos Android y, al mismo tiempo, 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 sola vista unificada, que se puede usar para implementar cualquiera de los modos anteriores y varios otros, 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 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, de forma 1:1. Las solicitudes encapsulan toda la información de configuración sobre la captura y el procesamiento de una trama. 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 de procesamiento de RAW a YUV, la generación de estadísticas, etcétera.
En términos simples, el framework de la aplicación solicita una trama del subsistema de la cámara, y el subsistema de la cámara muestra los resultados en un flujo de salida. Además, se generan metadatos que contienen información, como espacios de color y sombras de la 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:
- 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 plataformas de salida está preconfigurado:
- Cada superficie es un destino para una transmisión 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 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.
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 fotos
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.
Android 7.0 sigue admitiendo HAL1 de la cámara, ya que muchos dispositivos aún dependen de él. Además, el servicio de cámara de Android admite la implementación de ambas HAL (1 y 3), lo que resulta útil cuando quieres admitir una cámara frontal menos capaz con la HAL1 de la cámara y una cámara posterior más avanzada con la HAL3 de la cámara.
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 dispositivos 2 o versiones posteriores, y estos módulos pueden tener una combinación de versiones de dispositivos de cámara (esto es lo que queremos decir cuando decimos que Android admite la implementación de ambas HAL).