Dopo quattro anni di sviluppo, è stata formulata la prima versione del progetto libcamera (0.0.1), che offre uno stack software per lavorare con videocamere, fotocamere e TV tuner su Linux, Android e ChromeOS, continuando lo sviluppo dell'API V4L2 e, nel tempo, sostituendola. Poiché l'API della libreria è ancora in fase di cambiamento e non è stabilizzata, il progetto è stato sviluppato senza diramazioni di versioni separate, utilizzando un modello di sviluppo continuo. In risposta alla necessità di distribuzioni di monitorare le modifiche all'API che influenzano la compatibilità, e per semplificare la fornitura della libreria nei pacchetti, ora è stata presa la decisione di formare periodicamente rilasci che riflettono il grado di cambiamento di ABI e API. Il codice del progetto è scritto in C++ e distribuito sotto licenza LGPLv2.1.
Il progetto è sviluppato da programmatori di sottosistemi multimediali del kernel Linux in collaborazione con alcuni produttori di fotocamere, con l'obiettivo di normalizzare la situazione con il supporto delle fotocamere per smartphone e dispositivi embedded in Linux, che sono legate a driver proprietari. L'API V4L2 già esistente nel kernel Linux è stata originariamente creata per lavorare con tradizionali webcam isolate e non è ben adattata alla recente tendenza di spostare le funzionalità della MCU sulle spalle della CPU.
A differenza delle fotocamere tradizionali, in cui le operazioni di elaborazione primaria delle immagini vengono effettuate su un processore specializzato integrato nella fotocamera (MCU), nei dispositivi embedded, per ridurre i costi, queste funzioni vengono trasferite alle spalle della CPU principale e richiedono un driver più complesso, che include componenti licenziati non open source. Nell'ambito del progetto libcamera, sostenitori del software libero e produttori di hardware hanno cercato di creare una soluzione di compromesso che soddisfi, da un lato, le esigenze degli sviluppatori di software open source e, dall'altro, consenta di proteggere la proprietà intellettuale dei produttori di fotocamere.
Il stack proposto dalla libreria libcamera è realizzato interamente in spazio utente. Per garantire la compatibilità con ambienti software esistenti e applicazioni, sono fornite interfacce per la compatibilità con l'API V4L, Gstreamer e Android Camera HAL. I componenti proprietari specifici per ogni fotocamera che interagiscono con l'hardware sono implementati come moduli, eseguiti in processi separati e interagiscono con la libreria tramite IPC. I moduli non hanno accesso diretto al dispositivo e accedono all'hardware tramite un'API intermedia, le richieste attraverso la quale sono verificate, filtrate e limitate solo all'accesso alle funzionalità necessarie per gestire la fotocamera.
La libreria fornisce anche accesso ad algoritmi per l'elaborazione e il miglioramento della qualità delle immagini e dei video (correzione del bilanciamento del bianco, riduzione del rumore, stabilizzazione del video, autofocus, esposizione automatica, ecc.), che possono essere collegati come librerie esterne aperte o moduli proprietari isolati. L'API fornisce accesso a funzioni come la determinazione delle funzionalità delle fotocamere esterne e integrate disponibili, l'uso dei profili di dispositivo, la gestione degli eventi di connessione e disconnessione delle fotocamere, il controllo della cattura dei dati dalle fotocamere a livello di singoli fotogrammi e la sincronizzazione degli scatti con l'uso del flash. È possibile lavorare separatamente con più fotocamere nel sistema e organizzare la cattura simultanea di più flussi video da una sola fotocamera (ad esempio, uno a bassa risoluzione per videoconferenze e un altro ad alta risoluzione per registrazioni archivistiche su disco).
Fonte: opennet.ru
