Einen potenziellen Nachfolger für die Video for Linux 2 (V4L2) Video-Aufnahme-API stellte Laurent Pinchart unter dem Namen Libcamera auf der Embedded Linux Conference Europe 2018 vor. Anlass für die Entwicklung von Libcamera waren vor allem moderne eingebettete Kameras, wie sie etwa in IoT-Geräten oder Smartphones zum Einsatz kommen. Diese Kameras sind deutlich komplexer aufgebaut, als ihre Pendants zur Entstehungszeit von V4L2. Libcamera soll den Zugriff auf solche Kameras deutlich erleichtern.

Das Projekt befindet sich allerdings derzeit noch in einer frühen Phase. Festgezurrt hat das Libcamera-Team allerdings schon die zwingend benötigten Funktionen.

Bessere Kamerakontrolle

So soll Libcamera für Linux sowohl Video- als auch Fotokameras (Point-and-Shoot-Modelle) unterstützen, die entweder fest verbaut sind oder an einem USB-Port stecken. Hinzu kommen UVC-Kameras, die bei Videokonferenzen zum Einsatz kommen. Libcamera wird explizit keine analogen oder Spezialkameras unterstützen, wie etwa Wärmebildkameras. In ihr Pflichtenheft haben die Entwickler zudem das Hotplugging der Kameras geschrieben.

Des Weiteren soll Libcamera mehrere Videostreams pro Kamera ermöglichen. Das ist etwa nützlich, wenn während einer Konferenz das Live-Bild in einer niedrigen Auflösung gestreamt und in einer höheren Auflösung auf Festplatte aufgezeichnet werden soll.

Gegenüber V4L2 soll Libcamera zudem eine präzisere Kontrolle über die aufgenommenen Einzelbilder bieten. Damit lässt sich unter anderem sicherstellen, dass die Kamera das Blitzlicht bei einer Fotoaufnahme auch exakt zum richtigen Zeitpunkt auslöst. Unter V4L2 kann es aufgrund der dortigen Arbeitsweise hingegen passieren, dass das Foto erst kurz vor oder nach der Aktivierung des Blitzlichts geschossen wird.

Vortrag von Laurent Pinchart zu Libcamera.



Viele Kameras bieten einen automatischen Weißabgleich, einen Autofokus und eine automatische Belichtung an. Die Algorithmen und insbesondere den Programmcode dieser auch 3A genannten Funktionen halten die Kamerahersteller jedoch in der Regel unter Verschluss. Libcamera soll die Kontrolle über die 3A-Funktionen übernehmen und proprietären Code in einer abgeschotteten Sandbox ausführen. Der Zugriff auf die 3A-Funktionen erfolgt über eine von Libcamera bereitgestellte API. Auf diese Weise wollen die Libcamera-Entwickler insbesondere verhindern, dass eine gehackte Kamera auf den Kernel-Treiber zugreifen kann. Darüber hinaus hoffen sie, dass durch die Maßnahme die Kamerahersteller animiert werden, ihren Code offenzulegen.

Unter der Haube



Ein Entwurf zeigt den Aufbau des Kamera-Stacks. (Bild: Libcamera (Screenshot))

Libcamera soll einen kompletten Kamera-Stack im Userspace bereitstellen. Die Kernkomponente bildet dabei die in C++ geschriebene Libcamera-Bibliothek, über die Programme auf die Kameras zugreifen können. Die Bibliothek kümmert sich dabei um die Kommunikation mit den entsprechenden Kamera-Treibern im Kernel. Über Bindings sollen Programmierer Libcamera auch bequem aus anderen Programmiersprachen ansprechen können. Alle beschriebenen Komponenten bilden zusammen das Libcamera-Framework.

Anwendungen können direkt die Libcamera-Bibliothek einspannen. Ergänzend sollen weitere Komponenten entstehen, die vorhandene Schnittstellen auf Libcamera übersetzen. So sollen sich dank einer entsprechenden Kompatibilitätsschicht V4L2-Anwendungen weiternutzen lassen. Angedacht ist zudem eine GStreamer-Integration und eine Android Camera HAL-Implementierung.

Alle Anforderungen und einen Einblick in die aktuelle Architektur gibt die Dokumentation zu Libcamera. Den Quellcode hält ein Git-Repository auf Linuxtv.org bereit. (olb)