Na vier jaar ontwikkeling is de eerste release van het libcamera-project (0.0.1) gevormd, dat een softwarestack biedt voor het werken met camera's, fotocamera's en TV-tuners op Linux, Android en ChromeOS, en dat de ontwikkeling van de V4L2 API voortzet en deze op termijn zal vervangen. Aangezien de API van de bibliotheek nog steeds verandert en nog niet definitief is gestabiliseerd, werd het project tot nu toe ontwikkeld zonder het splitsen in aparte releases, met gebruik van een continu ontwikkelingsmodel. Als reactie op de behoefte van distributies om wijzigingen in de API, die van invloed zijn op de compatibiliteit, te volgen, en om de levering van de bibliotheek in pakketten te vereenvoudigen, is nu besloten om periodiek releases te vormen die de mate van verandering van de ABI en API weerspiegelen. De code van het project is geschreven in C++ en wordt verspreid onder de LGPLv2.1-licentie.
Het project wordt ontwikkeld door ontwikkelaars van de multimedia-subsystemen van de Linux-kernel in samenwerking met enkele camera fabrikanten om de situatie met de ondersteuning van camera's voor smartphones en ingebedde apparaten, die gebonden zijn aan propriëtaire stuurprogramma's, te normaliseren. De al bestaande V4L2 API in de Linux-kernel is ooit ontworpen voor gebruik met traditionele, afzonderlijke webcams en is slecht aangepast voor de recente trend om functionaliteit van de MCU over te hevelen naar de CPU.
In tegenstelling tot traditionele camera's, waarbij de bewerkingen voor de primaire beeldverwerking worden uitgevoerd door een gespecialiseerde processor (MCU) die in de camera is ingebouwd, worden in ingebedde apparaten deze functies voor kostenbesparing overgebracht naar de hoofdcpu en vereisen zij een complexere driver die niet-openbare gelicentieerde componenten bevat. In het kader van het libcamera-project hebben voorstanders van open source-software en hardwarefabrikanten geprobeerd een compromisoplossing te creëren die aan de behoeften van ontwikkelaars van open source-software voldoet, terwijl tegelijkertijd de intellectuele eigendom van de camerafabrikanten wordt beschermd.
De door de libcamera-bibliotheek aangeboden stack is volledig geïmplementeerd in de gebruikersruimte. Voor compatibiliteit met bestaande softwareomgevingen en applicaties worden interfaces voor compatibiliteit met de API V4L, Gstreamer en Android Camera HAL aangeboden. Specifieke proprietary componenten voor elke camera die met de hardware interageren, worden gepresenteerd als modules die in aparte processen draaien en via IPC met de bibliotheek communiceren. Modules hebben geen directe toegang tot het apparaat en benaderen de hardware via een tussenliggende API, waarvan de verzoeken worden gecontroleerd, gefilterd en beperkt tot alleen de functionaliteit die nodig is voor het beheer van de camera.
De bibliotheek biedt ook toegang tot algoritmen voor het verwerken en verbeteren van de kwaliteit van afbeeldingen en video's (wittebalanscorrectie, ruisonderdrukking, videostabilisatie, autofocus, belichtingsselectie, etc.) die kunnen worden aangesloten als open externe bibliotheken of proprietary geïsoleerde modules. De API biedt toegang tot functies zoals het identificeren van de functionaliteit van beschikbare externe en ingebouwde camera's, het gebruik van apparaatprofielen, het verwerken van verbinding- en ontkoppelingsgebeurtenissen van camera's, het beheer van gegevensvastlegging van camera's op het niveau van individuele frames en het synchroniseren van opnames met de flitswerking. Er is mogelijkheid voor aparte ingebruikname van meerdere camera's in het systeem en het gelijktijdig vastleggen van meerdere videostreams van één camera (bijvoorbeeld één met lage resolutie voor videoconferenties en een andere met hoge resolutie voor archivering op schijf).
Bron: opennet.ru
