Después de cuatro años de desarrollo, se ha formado la primera versión del proyecto libcamera (0.0.1), que ofrece una pila de software para trabajar con cámaras de video, cámaras fotográficas y sintonizadores de TV en Linux, Android y ChromeOS, continuando el desarrollo de la API V4L2 y que eventualmente la reemplazará. Dado que la API de la biblioteca todavía sigue evolucionando y no se ha estabilizado, el proyecto ha continuado desarrollándose sin bifurcaciones de versiones individuales utilizando un modelo de desarrollo continuo. En respuesta a la necesidad de las distribuciones de rastrear cambios en la API que afectan la compatibilidad, y para simplificar la entrega de la biblioteca en paquetes, se ha decidido ahora formar lanzamientos periódicos que reflejan el grado de cambio del ABI y API. El código del proyecto está escrito en C++ y se distribuye bajo la licencia LGPLv2.1.
El proyecto es desarrollado por ingenieros de multimedia del kernel de Linux junto con algunos fabricantes de cámaras con el objetivo de normalizar la situación de soporte en Linux para cámaras de smartphones y dispositivos embebidos que dependen de controladores propietarios. La API V4L2 ya existente en el núcleo de Linux fue creada en su momento para trabajar con cámaras web tradicionales y está mal adaptada a la tendencia reciente de trasladar la funcionalidad del MCU a la CPU.
A diferencia de las cámaras tradicionales, donde las operaciones de procesamiento de imágenes primarias se realizan en un procesador especializado integrado en la cámara (MCU), en los dispositivos embebidos, para reducir costos, estas funciones se trasladan a la CPU principal y requieren un controlador más complejo que incluye componentes licenciados no abiertos. En el marco del proyecto libcamera, los partidarios del software de código abierto y los fabricantes de hardware han intentado crear una solución de compromiso que, por un lado, satisfaga las necesidades de los desarrolladores de software libre, y por otro, proteja la propiedad intelectual de los fabricantes de cámaras.
La pila ofrecida por la biblioteca libcamera se implementa completamente en el espacio de usuario. Para garantizar la compatibilidad con los entornos de programación y aplicaciones existentes, se proporcionan capas de compatibilidad con las API V4L, Gstreamer y Android Camera HAL. Los componentes propietarios específicos de cada cámara que interactúan con el hardware se presentan en forma de módulos, que se ejecutan en procesos separados y se comunican con la biblioteca a través de IPC. Los módulos no tienen acceso directo al dispositivo y acceden al hardware a través de una API intermedia, cuyas solicitudes son verificadas, filtradas y restringidas únicamente a la funcionalidad necesaria para controlar la cámara.
La biblioteca también proporciona acceso a algoritmos para procesar y mejorar la calidad de imágenes y videos (ajuste del balance de blancos, eliminación de ruido, estabilización de video, autoenfoque, selección de exposición, etc.), que pueden conectarse como bibliotecas externas abiertas o módulos propietarios aislados. La API ofrece acceso a funciones como la determinación de las funcionalidades de las cámaras externas e integradas, el uso de perfiles de dispositivos, el manejo de eventos de conexión y desconexión de cámaras, el control de la captura de datos de las cámaras a nivel de fotogramas individuales y la sincronización de las tomas con el funcionamiento del flash. Es posible trabajar separadamente con varias cámaras en el sistema y organizar la captura simultánea de múltiples flujos de video desde una sola cámara (por ejemplo, uno con baja resolución para videoconferencias y otro con alta resolución para grabación archivística en disco).
Fuente: opennet.ru
