Après quatre années de développement, la première version du projet libcamera (0.0.1) a été publiée, offrant une pile logicielle pour les caméras, les appareils photo et les tuners TV sous Linux, Android et ChromeOS, et qui continuera à développer l'API V4L2 pour la remplacer au fil du temps. Étant donné que l'API de la bibliothèque continue d'évoluer et n'est pas encore stabilisée, le projet a jusqu'à présent été développé sans branches de versions séparées, en utilisant un modèle de développement continu. En réponse au besoin des distributions de suivre les modifications de l'API qui affectent la compatibilité et pour simplifier la livraison de la bibliothèque dans des paquets, il a été décidé de former périodiquement des publications reflétant le degré de changement de l'ABI et de l'API. Le code du projet est écrit en C++ et est distribué sous la licence LGPLv2.1.
Le projet est développé par les développeurs des sous-systèmes multimédias du noyau Linux en collaboration avec certains fabricants de caméras, dans le but de normaliser la prise en charge des caméras pour smartphones et appareils embarqués sous Linux, qui sont liés à des pilotes propriétaires. L'API V4L2 existante dans le noyau Linux a été conçue pour fonctionner avec des webcams traditionnelles, et s'avère mal adaptée à la récente tendance d'externalisation des fonctionnalités de l'UMC vers le CPU.
Contrairement aux caméras traditionnelles, où les opérations de traitement d'images sont effectuées par un processeur spécialisé intégré à la caméra (MCU), dans les appareils embarqués, pour réduire les coûts, ces fonctions sont transférées au CPU principal et nécessitent un pilote complexe, incluant des composants sous licence non libre. Dans le cadre du projet libcamera, des partisans de l'OSS et des fabricants de matériel ont tenté de créer une solution de compromis, satisfaisant d'une part les besoins des développeurs de logiciels libres et permettant d'autre part de protéger la propriété intellectuelle des fabricants de caméras.
La bibliothèque libcamera implémente entièrement la pile dans l'espace utilisateur. Pour assurer la compatibilité avec les environnements et applications logiciels existants, des couches de compatibilité avec l'API V4L, Gstreamer et Android Camera HAL sont fournies. Des composants propriétaires spécifiques à chaque caméra interagissent avec le matériel sous forme de modules, exécutés dans des processus séparés et communiquant avec la bibliothèque via IPC. Les modules n'ont pas d'accès direct à l'appareil et accèdent au matériel par le biais d'une API intermédiaire, dont les requêtes sont vérifiées, filtrées et limitées uniquement à la fonctionnalité nécessaire pour gérer la caméra.
La bibliothèque offre également un accès à des algorithmes pour le traitement et l'amélioration de la qualité des images et des vidéos (correction de la balance des blancs, suppression du bruit, stabilisation vidéo, autofocus, choix de l'exposition, etc.), qui peuvent être intégrés sous forme de bibliothèques externes ouvertes ou de modules propriétaires isolés. L'API permet d'accéder à des fonctionnalités telles que la détection des caractéristiques des caméras externes et embarquées, l'utilisation de profils de dispositifs, le traitement des événements de connexion et de déconnexion des caméras, la gestion de la capture de données des caméras au niveau des images individuelles et la synchronisation des prises de vue avec l'activation du flash. Il est possible de travailler séparément avec plusieurs caméras dans le système et d'organiser simultanément la capture de plusieurs flux vidéo à partir d'une même caméra (par exemple, un flux à basse résolution pour les vidéoconférences, et un autre à haute résolution pour un enregistrement archivistique sur disque).
Source : opennet.ru
