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, la interfaz de la HAL de la cámara desarrollo usa AIDL. Se presentó Android 8.0 Treble, cómo cambiar la API de la HAL de la cámara a una interfaz estable definida por el lenguaje de descripción de la interfaz HAL (HIDL). Si ya desarrollaste un módulo y un controlador de HAL de la cámara para Android 7.0. y las versiones inferiores, ten en cuenta los valores significativos cambios 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 conocer las ventajas del AIDL, consulta AIDL para HAL:
Cómo implementar la HAL de la cámara del AIDL
Para ver una implementación de referencia de una HAL de cámara del 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 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 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 la HAL de la cámara del AIDL, asegúrate de que el dispositivo pase
Pruebas de CTS y VTS. Android 13 presenta el VTS del AIDL
prueba,
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 plan de control facilita la creación de apps de cámara de alta calidad en Android dispositivos que pueden funcionar de manera confiable en varios productos mientras se usan algoritmos específicos del dispositivo, siempre que sea posible, para maximizar la calidad y 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 de ráfaga. Esto da como resultado un mejor control del usuario enfoque y exposición, y más procesamiento posterior, como reducción de ruido, contraste, y mejorar 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 entradas solicitudes de capturas de fotogramas en fotogramas 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 pocas palabras, el framework de la aplicación solicita un fotograma a la cámara y el subsistema de la cámara devuelve los resultados a una transmisión de salida. En además, metadatos que contienen información como espacios de color y lentes se genera un sombreado 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 captura solicitud en una imagen capturada por el sensor, que se procesa en:
- 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 toda la configuración de captura deseada y la lista de salidas
plataformas a las que se deben enviar los búferes de imagen para esta solicitud (del total
conjunto configurado). Una solicitud puede ser de un solo intento (con capture()
)
se puede repetir indefinidamente (con setRepeatingRequest()
). 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 y los siguientes tres modos de operación:
- Vista previa
- Grabación de video
- Seguir capturando
Cada modo tiene capacidades ligeramente diferentes y superpuestas. Esto hizo que implementar funciones nuevas, como el modo de ráfaga, que está entre dos de los modos de operación.
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 cámara (con su propio versión ), en la que se enumeran varios dispositivos de cámara independientes que tienen cada uno 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).