Nakon četiri godine razvoja, formirano je prvo izdanje projekta libcamera (0.0.1), koje nudi softverski paket za rad s kamerama, fotoaparatima i TV tunerima na Linuxu, Androidu i ChromeOS-u, koji nastavlja razvoj API-ja V4L2 i s vremenom će ga zamijeniti. Budući da se API biblioteke još uvijek mijenja i nije konačno stabiliziran, projekt se do sada razvijao bez izdvajanja pojedinačnih izdanja koristeći kontinuirani model razvoja. Kao odgovor na potrebu distribucija za praćenjem promjena API-ja koje utječu na kompatibilnost i radi pojednostavljenja isporuke biblioteke u paketima, sada je donesena odluka o periodičnom formiranju izdanja koja odražavaju stupanj promjene ABI-ja i API-ja. Kod projekta napisan je na C++ i distribuira se pod LGPLv2.1 licencom.
Projekt razvijaju programeri multimedijskih sustava Linux jezgri u suradnji s nekim proizvođačima kamera u cilju normalizacije situacije s podrškom u Linuxu za kamere na pametnim telefonima i ugrađenim uređajima, koji su vezani uz proprijetarne drivere. Već postojeći API V4L2 u Linux jezgru nekada je stvoren s predodžbom o radu s tradicionalnim web kamerama i slabo je prilagođen novijoj tendenciji premještanja funkcionalnosti MCU-a na CPU.
Za razliku od tradicionalnih kamera, u kojima se operacije primarne obrade slika obavljaju na ugrađenom specijaliziranom procesoru (MCU), u ugrađenim uređajima, radi smanjenja troškova, ove funkcije se prebacuju na glavni CPU i zahtijevaju složeniji driver koji uključuje nedostupne licencirane komponente. U okviru projekta libcamera, pristalice otvorenog softvera i proizvođači opreme pokušali su stvoriti kompromisno rješenje koje s jedne strane zadovoljava potrebe programera otvorenog softvera, a s druge strane omogućava zaštitu intelektualnog vlasništva proizvođača kamera.
Predloženi libcamera stack implementiran je u potpunosti u korisničkom prostoru. Za osiguranje kompatibilnosti s postojećim softverskim okruženjima i aplikacijama pružaju se slojevi za kompatibilnost s V4L API-jem, Gstreamer-om i Android Camera HAL-om. Specifične za svaku kameru proprietary komponente interakcije s hardverom oblikovane su kao moduli koji se izvršavaju u zasebnim procesima i komuniciraju s bibliotekom putem IPC-a. Moduli nemaju izravni pristup uređaju i obraćaju se hardveru preko posredničkog API-ja, čiji se zahtjevi provjeravaju, filtriraju i ograničavaju isključivo na funkcionalnosti potrebne za upravljanje kamerom.
Biblioteka također pruža pristup algoritmima za obradu i poboljšanje kvalitete slika i videa (ispravak bijele ravnoteže, uklanjanje šuma, stabilizacija videa, automatsko fokusiranje, odabir ekspozicije itd.), koji se mogu povezati kao otvorene vanjske biblioteke ili proprietary izolirani moduli. API omogućuje pristup funkcijama kao što su otkrivanje funkcionalnosti postojećih vanjskih i ugrađenih kamera, korištenje profila uređaja, obrada događaja povezivanja i isključivanja kamera, upravljanje snimanjem podataka s kamera na razini pojedinačnih okvira i sinkronizacija snimaka s radom blica. Moguće je odvojeno raditi s više kamera u sustavu i organizirati istovremeno snimanje nekoliko video streamova s jedne kamere (na primjer, jedan s niskom razlučivosti za videokonferenciju, a drugi s visokom razlučivosti za arhiviranje na disk).
Izvor: opennet.ru
