Po čtyřech letech vývoje byla vytvořena první verze projektu libcamera (0.0.1), která nabízí softwarový stack pro práci s videokamerami, fotoaparáty a TV tunery v Linuxu, Androidu a ChromeOS, přičemž pokračuje ve vývoji API V4L2 a časem ho nahradí. Jelikož API knihovny se stále mění a není ještě konečně stabilizováno, projekt se dosud vyvíjel bez vydávání jednotlivých verzí, používající kontinuální model vývoje. V reakci na potřebu distribucí sledovat změny API, které ovlivňují kompatibilitu, a pro usnadnění dodávek knihovny v balíčcích, bylo nyní rozhodnuto pravidelně vytvářet release, které odráží úroveň změn ABI a API. Kód projektu je napsán v C++ a je distribuován pod licencí LGPLv2.1.
Projekt vyvíjí tým vývojářů multimediálních subsystémů jádra Linux ve spolupráci s některými výrobci kamer, s cílem normalizace situace s podporou kamer pro smartphony a vestavěná zařízení v Linuxu, které jsou vázány na proprietární ovladače. Již existující API V4L2 v jádru Linux bylo původně vytvořeno pro práci s tradičními oddělenými webovými kamerami a je špatně přizpůsobeno nově se objevující tendenci přenášet funkčnost MCU na ramena CPU.
Na rozdíl od tradičních kamer, kde jsou operace primární zpracování obrazu prováděny na specializovaném procesoru vestavěném do kamery (MCU), u vestavěných zařízení jsou tyto funkce pro snížení nákladů přeneseny na hlavní CPU a vyžadují složitější ovladač, který zahrnuje licencované komponenty, které nelze otevřít. V rámci projektu libcamera se zastánci otevřeného softwaru a výrobci zařízení snažili vytvořit kompromisní řešení, které na jedné straně vyhovuje potřebám vývojářů otevřeného softwaru, a na druhé straně chrání duševní vlastnictví výrobců kamer.
Navrhovaná knihovna libcamera je plně implementována v uživatelském prostoru. Pro zajištění kompatibility s existujícími softwarovými prostředími a aplikacemi jsou poskytovány vrstvy pro kompatibilitu s API V4L, Gstreamer a Android Camera HAL. Specifické pro každou kameru proprietární komponenty interakce s hardwarem jsou uspořádány jako moduly, které běží v samostatných procesech a komunikují s knihovnou pomocí IPC. Moduly nemají přímý přístup k zařízení a přistupují k hardwaru prostřednictvím mezivrstvy API, přičemž požadavky jsou kontrolovány, filtrovány a omezeny pouze na funkce nezbytné pro ovládání kamery.
Knihovna také poskytuje přístup k algoritmům pro zpracování a zlepšení kvality obrazů a videí (nastavení vyvážení bílé, odstranění šumu, stabilizace videa, automatické ostření, volba expozice atd.), které mohou být připojeny jako otevřené externí knihovny nebo proprietární izolované moduly. API poskytuje přístup k takovým funkcím, jako je určení funkcionality dostupných externích a vestavěných kamer, používání profilů zařízení, zpracování událostí připojení a odpojení kamer, řízení zachycování dat z kamer na úrovni jednotlivých snímků a synchronizace snímků se činností blesku. Je možná samostatná práce s více kamerami v systému a organizace najednou více video streamů z jedné kamery (například jeden s nízkým rozlišením pro videokonference a druhý s vysokým rozlišením pro archivaci na disk).
Zdroj: opennet.ru
