După patru ani de dezvoltare, a fost lansată prima versiune a proiectului libcamera (0.0.1), care oferă un stack software pentru lucrul cu camere video, aparate foto și TV tunere în Linux, Android și ChromeOS, continuând dezvoltarea API-ului V4L2 și în timp îl va înlocui. Deoarece API-ul bibliotecii continuă să evolueze și nu este încă stabilizat, proiectul a fost dezvoltat fără a branșa versiuni separate folosind un model de dezvoltare continuu. Ca răspuns la necesitatea distribuțiilor de a urmări modificările API care afectează compatibilitatea și pentru a simplifica livrarea bibliotecii în pachete, acum s-a decis să se formeze periodic versiuni care reflectă gradul de modificare a ABI și API. Codul proiectului este scris în C++ și este distribuit sub licența LGPLv2.1.
Proiectul este dezvoltat de către dezvoltatorii subsistemelor multimedia din nucleul Linux împreună cu unii producători de camere, cu scopul de a normaliza situația cu suportul pentru camerele de smartphone-uri și dispozitive încorporate în Linux, care sunt legate de drivere proprietare. API-ul V4L2 existent în nucleul Linux a fost creat pentru a lucra cu camere web tradiționale și este prost adaptat la tendința recentă de a externaliza funcționalitatea MCU pe CPU.
Spre deosebire de camerele tradiționale, în care operațiunile de procesare inițială a imaginilor sunt efectuate de un procesor specializat încorporat în cameră (MCU), în dispozitivele încorporate, pentru a reduce costurile, aceste funcții sunt transferate pe CPU principal și necesită un driver complex, care include componente licențiate care nu pot fi deschise. În cadrul proiectului libcamera, susținătorii software-ului open source și producătorii de hardware au încercat să creeze o soluție de compromis care, pe de o parte, să satisfacă nevoile dezvoltatorilor de software open source și, pe de altă parte, să protejeze proprietatea intelectuală a producătorilor de camere.
Stiva propusă de biblioteca libcamera este implementată complet în spațiul utilizatorului. Pentru a asigura compatibilitatea cu mediile și aplicațiile software existente, sunt furnizate straturi de compatibilitate cu API V4L, Gstreamer și Android Camera HAL. Componentele proprietare specifice fiecărei camere pentru interacțiunea cu hardware-ul sunt organizate sub formă de module, care rulează în procese separate și interacționează cu biblioteca prin IPC. Modulele nu au acces direct la dispozitiv și acționează asupra hardware-ului printr-un API intermediar, cererile prin care sunt verificate, filtrate și restricționate doar la funcționalitatea necesară pentru controlul camerei.
Biblioteca oferă de asemenea acces la algoritmi pentru procesarea și îmbunătățirea calității imaginilor și videoclipurilor (corectarea balansului de alb, eliminarea zgomotului, stabilizarea videoclipurilor, focusare automată, selectarea expunerii etc.), care pot fi conectate sub formă de biblioteci externe deschise sau module proprietare izolate. API-ul oferă acces la funcții precum determinarea funcționalității camerelor externe și încorporate disponibile, utilizarea profilurilor dispozitivelor, procesarea evenimentelor de conectare și deconectare a camerelor, gestionarea capturării datelor de la camere la nivel de cadre individuale și sincronizarea fotografiilor cu activitatea blițului. Este posibilă funcționarea separată cu mai multe camere în sistem și organizarea captării simultane a mai multor fluxuri video de la o cameră (de exemplu, unul cu rezoluție mică pentru videoconferințe și altul cu rezoluție mare pentru înregistrarea pe disc).
Sursa: opennet.ro
