Pierwsze wydanie libcamera, stosu obsługującego kamery w systemie Linux

Po czterech latach rozwoju powstała pierwsza wersja projektu libcamera (0.0.1), oferująca stos oprogramowania do pracy z kamerami wideo, kamerami i tunerami telewizyjnymi w systemach Linux, Android i ChromeOS, co stanowi kontynuację rozwoju API V4L2 i ostatecznie go zastąpi. Ponieważ API biblioteki wciąż się zmienia i nie zostało jeszcze w pełni ustabilizowane, projekt do tej pory rozwijał się bez rozgałęziania poszczególnych wydań w oparciu o model ciągłego rozwoju. W odpowiedzi na potrzebę śledzenia przez dystrybucje zmian API wpływających na kompatybilność oraz w celu uproszczenia dostarczania bibliotek w pakietach, podjęto decyzję o okresowym generowaniu wydań odzwierciedlających zakres zmian ABI i API. Kod projektu napisany jest w języku C++ i rozpowszechniany na licencji LGPLv2.1.

Projekt jest rozwijany przez twórców podsystemów multimedialnych jądra Linuksa wraz z niektórymi producentami aparatów, aby unormować sytuację dzięki obsłudze Linuksa dla aparatów do smartfonów i urządzeń wbudowanych, które są powiązane z zastrzeżonymi sterownikami. API V4L2, dostępne już w jądrze Linuksa, zostało kiedyś stworzone do współpracy z tradycyjnymi, oddzielnymi kamerami internetowymi i jest słabo dostosowane do najnowszego trendu przenoszenia funkcjonalności MCU na barki procesora.

W przeciwieństwie do tradycyjnych kamer, w których podstawowe operacje przetwarzania obrazu wykonywane są na wyspecjalizowanym procesorze wbudowanym w kamerę (MCU), w urządzeniach wbudowanych, aby obniżyć koszty, funkcje te realizowane są na barkach głównego procesora i wymagają złożonego sterownika, który zawiera licencjonowane komponenty inne niż open source. W ramach projektu libcamera zwolennicy oprogramowania open source i producenci sprzętu próbowali stworzyć kompromisowe rozwiązanie, które z jednej strony zaspokoi potrzeby twórców oprogramowania open source, a z drugiej umożliwi ochronę własności intelektualnej producentów aparatów.

Stos oferowany przez bibliotekę libcamera jest zaimplementowany całkowicie w przestrzeni użytkownika. Aby zapewnić kompatybilność z istniejącymi środowiskami oprogramowania i aplikacjami, dostępne są warstwy kompatybilności dla V4L API, Gstreamer i Android Camera HAL. Autorskie komponenty interakcji ze sprzętem specyficzne dla każdej kamery zostały zaprojektowane jako moduły realizowane w oddzielnych procesach i współpracujące z biblioteką poprzez IPC. Moduły nie mają bezpośredniego dostępu do urządzenia, a uzyskują dostęp do sprzętu poprzez pośrednie API, za pomocą którego żądania są sprawdzane, filtrowane i ograniczane jedynie do dostępu do funkcjonalności niezbędnych do sterowania kamerą.

Biblioteka zapewnia także dostęp do algorytmów przetwarzania i poprawy jakości zdjęć i filmów (regulacja balansu bieli, redukcja szumów, stabilizacja wideo, autofokus, dobór ekspozycji itp.), które można podłączyć w formie otwartych bibliotek zewnętrznych lub autorskich izolowane moduły. API zapewnia dostęp do takich funkcji, jak określanie funkcjonalności istniejących kamer zewnętrznych i wbudowanych, korzystanie z profili urządzeń, obsługa zdarzeń podłączania i rozłączania kamery, zarządzanie przechwytywaniem danych z kamery na poziomie poszczególnych klatek oraz synchronizacja obrazów z lampą błyskową. Istnieje możliwość osobnej pracy z kilkoma kamerami w systemie i organizowania jednoczesnego przechwytywania kilku strumieni wideo z jednej kamery (np. jednej o niskiej rozdzielczości do wideokonferencji, a drugiej o wysokiej rozdzielczości do archiwalnego zapisu na dysk).

Źródło: opennet.ru

Dodaj komentarz