libcamera, biblioteca de soporte de cámara para Linux, Android y ChromeOS
Después de cuatro años de desarrollo, se dio a conocer la primera versión del proyecto libcamera (0.0.1), que ofrece una pila de software para trabajar con videocámaras, cámaras y sintonizadores de TV en Linux, Android y ChromeOS, que continúa el desarrollo de la API V4L2 y eventualmente lo reemplazará.
Dado que la API de la biblioteca todavía está cambiando y no está completamente estabilizada, hasta ahora el proyecto se ha desarrollado sin bifurcar versiones individuales utilizando un modelo de desarrollo continuo.
En respuesta a la necesidad de que las distribuciones realicen un seguimiento de los cambios de la API que afectan la compatibilidad y para facilitar el envío de la biblioteca en paquetes, ahora se ha decidido generar versiones periódicas que reflejen la medida en que la ABI y la API han cambiado.
Sobre libcamera
El proyecto está siendo desarrollado por desarrolladores de subsistemas multimedia del kernel de Linux junto con algunos fabricantes de cámaras para normalizar el soporte de Linux para cámaras para teléfonos inteligentes y dispositivos integrados que están vinculados a controladores propietarios.
La API V4L2 que ya está disponible en el kernel de Linux se creó una vez para funcionar con cámaras web independientes tradicionales y no se adapta bien a la tendencia reciente de trasladar la funcionalidad de MCU a la CPU.
A diferencia de las cámaras tradicionales, en las que las operaciones de procesamiento de imágenes primarias se llevan a cabo en el procesador de propósito especial (MCU) integrado en la cámara, en dispositivos integrados, para reducir costos, estas funciones se colocan sobre los hombros de la CPU principal y requieren un controlador sofisticado que incluye componentes con licencia que no se pueden abrir.
En el marco del proyecto libcamera, los defensores del software libre y los fabricantes de hardware intentaron crear una solución de compromiso que, por un lado, satisfaga las necesidades de los desarrolladores de código abierto y, por otro lado, permita proteger la propiedad intelectual de los fabricantes de cámaras.
La pila que ofrece la biblioteca libcamera se implementa completamente en el espacio del usuario. Para garantizar la compatibilidad con los entornos de programación y las aplicaciones existentes, se proporcionan capas para la compatibilidad con la API V4L, Gstreamer y Android Camera HAL.
Los componentes de interacción de hardware patentados específicos de la cámara se empaquetan como módulos que se ejecutan en procesos separados e interactúan con la biblioteca a través de IPC. Los módulos no tienen acceso directo al dispositivo y acceden al equipo a través de una API intermedia, a través de la cual se revisan, filtran y limitan las solicitudes para acceder a la funcionalidad necesaria para controlar la cámara.
La biblioteca también brinda acceso a algoritmos para procesar y mejorar la calidad de imágenes y videos (corrección de balance de blancos, eliminación de ruido, estabilización de video, enfoque automático, selección de exposición, etc.), que se pueden conectar como bibliotecas externas abiertas o módulos aislados propietarios.
La API brinda acceso a funciones tales como determinar la funcionalidad de las cámaras externas e integradas existentes, usar perfiles de dispositivos, manejar eventos de conexión y desconexión de cámaras, administrar la captura de datos de la cámara a nivel de cuadro individual y sincronizar imágenes con la operación del flash. Es posible trabajar por separado con varias cámaras en el sistema y organizar la captura de varias secuencias de video de una cámara al mismo tiempo (por ejemplo, una con baja resolución para una videoconferencia,
Este lanzamiento de parche inicia los procedimientos de lanzamiento del paquete para el proyecto. Los lanzamientos iniciales incluirán un aumento en el número de versión del parche (0.0.x), así como el incremento correspondiente en el nombre del son.
Finalmente para quienes estén interesados en poder conocer más al respecto, deben saber que el código del proyecto está escrito en C++ y se distribuye bajo la licencia LGPLv2.1. El código del proyecto, asi como las instrucciones para realizar la compilación de la biblioteca para trabajar con ella, las pueden consultar en el siguiente enlace.