Första utgåvan av libcamera, en stack för kamerastöd på Linux

Efter fyra års utveckling bildades den första utgåvan av libcamera-projektet (0.0.1), som erbjuder en mjukvarustapel för att arbeta med videokameror, kameror och TV-tuners i Linux, Android och ChromeOS, som fortsätter utvecklingen av V4L2 API och kommer så småningom att ersätta den. Eftersom bibliotekets API fortfarande förändras och ännu inte har stabiliserats helt, har projektet hittills utvecklats utan att förgrena enskilda utgåvor med hjälp av en kontinuerlig utvecklingsmodell. Som svar på behovet av distributioner för att hålla reda på API-ändringar som påverkar kompatibiliteten, och för att förenkla leveransen av bibliotek i paket, har nu beslutet tagits att periodiskt generera releaser som återspeglar omfattningen av ABI- och API-ändringar. Projektkoden är skriven i C++ och distribueras under LGPLv2.1-licensen.

Projektet utvecklas av utvecklare av multimediaundersystem till Linuxkärnan tillsammans med några kameratillverkare för att normalisera situationen med Linux-stöd för kameror för smartphones och inbäddade enheter som är knutna till proprietära drivrutiner. API V4L2, som redan finns i Linux-kärnan, skapades vid ett tillfälle för att fungera med traditionella separata webbkameror och är dåligt anpassat till den senaste trenden att flytta MCU-funktionalitet över på processorns axlar.

Till skillnad från traditionella kameror, där primära bildbehandlingsoperationer utförs på en specialiserad processor inbyggd i kameran (MCU), i inbyggda enheter, för att minska kostnaderna, utförs dessa funktioner på axlarna av huvudprocessorn och kräver en komplex drivrutin som inkluderar icke-öppen källkod licensierade komponenter. Som en del av libcamera-projektet försökte förespråkare av programvara för öppen källkod och hårdvarutillverkare skapa en kompromisslösning som å ena sidan tillfredsställer behoven hos utvecklare av öppen källkod, och å andra sidan tillåter skydd av kameratillverkarnas immateriella rättigheter.

Stacken som erbjuds av libcamera-biblioteket implementeras helt och hållet i användarutrymmet. För att säkerställa kompatibilitet med befintliga mjukvarumiljöer och applikationer tillhandahålls kompatibilitetslager för V4L API, Gstreamer och Android Camera HAL. Proprietära komponenter som är specifika för varje kamera för att interagera med utrustning är designade som moduler som körs i separata processer och interagerar med biblioteket via IPC. Moduler har inte direkt åtkomst till enheten och får åtkomst till utrustningen via ett mellanliggande API, vars förfrågningar kontrolleras, filtreras och begränsas till att endast komma åt den funktionalitet som krävs för att styra kameran.

Biblioteket ger också tillgång till algoritmer för att bearbeta och förbättra kvaliteten på bilder och videor (vitbalansjustering, brusreducering, videostabilisering, autofokus, exponeringsval etc.), som kan kopplas i form av öppna externa bibliotek eller proprietära isolerade moduler. API:et ger tillgång till funktioner som att bestämma funktionaliteten hos befintliga externa och inbyggda kameror, använda enhetsprofiler, hantera kameraanslutning och frånkopplingshändelser, hantera kameradatafångst på individuell bildrutenivå och synkronisera bilder med blixt. Det är möjligt att arbeta separat med flera kameror i systemet och organisera samtidig inspelning av flera videoströmmar från en kamera (till exempel en med låg upplösning för videokonferenser och en annan med hög upplösning för arkivinspelning till disk).

Källa: opennet.ru

Lägg en kommentar