La capa de abstracción de hardware de la cámara (HAL) de Android conecta las API del marco de la cámara de nivel superior en android.hardware.camera2 al controlador y al hardware de la cámara subyacente. A partir de Android 13, el desarrollo de la interfaz HAL de la cámara utiliza 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 el proceso de la cámara.
cámara AIDL HAL
Para dispositivos con Android 13 o superior, el marco de la cámara incluye soporte para cámaras HAL AIDL. El marco de la cámara también admite HAL de cámara HIDL; sin embargo, las funciones de cámara agregadas en Android 13 o superior solo están disponibles a través de las interfaces HAL de cámara AIDL. Para implementar dichas funciones en dispositivos que se actualizan 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 obtener una implementación de referencia de una cámara HAL AIDL, consulte hardware/google/camera/common/hal/aidl_service/
.
Las especificaciones HAL de la cámara AIDL se encuentran en las siguientes ubicaciones:
- Proveedor de 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/
Para los dispositivos que migran a AIDL, es posible que los fabricantes de dispositivos deban modificar la política 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 dispositivos Android mientras se reorganiza la API para hacerla 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 funcionar de manera confiable en múltiples productos y al mismo tiempo utilizar algoritmos específicos del dispositivo siempre que sea posible para maximizar la calidad y el rendimiento.
La versión 3 del subsistema de cámara estructura los modos de funcionamiento en una única vista unificada, que puede utilizarse 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 posprocesamiento, 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 1:1. Las solicitudes encapsulan toda la información de configuración sobre la captura y el procesamiento de una trama. Esto incluye resolución y formato de píxeles; control manual de sensores, lentes y flash; modos de funcionamiento 3A; Control de procesamiento RAW->YUV; generación de estadísticas; etcétera.
En términos simples, el marco de la aplicación solicita un fotograma 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 tubería 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:
- Un objeto de resultado con metadatos sobre la captura.
- De uno a N buffers de datos de imágenes, 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 buffers 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 los 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 cámara fue diseñada como una caja negra con controles de alto nivel y los siguientes tres modos de funcionamiento:
- 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 sigue siendo compatible con la cámara HAL1, ya que muchos dispositivos todavía dependen de ella. Además, el servicio de cámara de Android admite la implementación de HAL (1 y 3), lo cual es útil cuando desea admitir una cámara frontal con menos capacidad con cámara HAL1 y una cámara trasera más avanzada con cámara HAL3.
Hay un módulo HAL de cámara única (con su propio número de versión ), que enumera varios dispositivos de cámara independientes, cada uno de los cuales tiene su propio número de versión. Se requiere el 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 decimos que Android admite la implementación de ambos HAL).