Po czterech latach rozwoju wydany został pierwszy wersja projektu libcamera (0.0.1), który oferuje stos oprogramowania do pracy z kamerami wideo, aparatami fotograficznymi oraz tunerami TV w systemach Linux, Android i ChromeOS, kontynuując rozwój API V4L2 i stopniowo je zastępując. Ponieważ API biblioteki wciąż się zmienia i nie zostało jeszcze ostatecznie ustabilizowane, projekt rozwijał się do tej pory bez oddzielnych wydań, korzystając z ciągłego modelu rozwoju. W odpowiedzi na potrzebę dystrybucji w monitorowaniu zmian API wpływających na kompatybilność, oraz w celu uproszczenia dostarczania biblioteki w pakietach, podjęto decyzję o cyklicznym tworzeniu wydań, które odzwierciedlają stopień zmiany ABI i API. Kod projektu napisany jest w C++ i jest dostępny na licencji LGPLv2.1.
Projekt rozwijany jest przez programistów multimediańskich systemów jądra Linux we współpracy z niektórymi producentami kamer w celu normalizacji wsparcia dla kamer smartfonów i urządzeń wbudowanych, które są uzależnione od zamkniętych sterowników. Istniejące już w jądrze Linux API V4L2 zostało stworzone z myślą o pracy z tradycyjnymi, odrębnymi kamerami internetowymi i jest słabo przystosowane do ostatnich tendencji wyprowadzania funkcji MCU na barki CPU.
W odróżnieniu od tradycyjnych kamer, w których operacje wstępnej obróbki obrazu są wykonywane przez wbudowany w kamerę specjalistyczny procesor (MCU), w urządzeniach wbudowanych, aby obniżyć koszty, te funkcje są przenoszone na główny CPU i wymagają skomplikowanego sterownika, który zawiera komponenty licencjonowane, które nie podlegają otwarciu. W ramach projektu libcamera zwolennicy oprogramowania open source i producenci sprzętu próbowali stworzyć kompromisowe rozwiązanie, które z jednej strony zaspokaja potrzeby twórców oprogramowania otwartego, a z drugiej chroni własność intelektualną producentów kamer.
Proponowana przez bibliotekę libcamera stos jest w pełni realizowana w przestrzeni użytkownika. Aby zapewnić zgodność z istniejącymi środowiskami programowymi i aplikacjami, udostępniane są warstwy zgodności z API V4L, Gstreamer oraz Android Camera HAL. Specyficzne dla każdej kamery komponenty interakcji z hardware'em są realizowane jako moduły działające w osobnych procesach, które komunikują się z biblioteką poprzez IPC. Moduły nie mają bezpośredniego dostępu do urządzenia i uzyskują dostęp do sprzętu za pośrednictwem pośredniego API, którego zapytania są sprawdzane, filtrowane i ograniczane wyłącznie do funkcjonalności niezbędnej do zarządzania kamerą.
Biblioteka oferuje również dostęp do algorytmów przetwarzania i poprawy jakości obrazów oraz wideo (korekcja balansu bieli, redukcja szumów, stabilizacja wideo, autofokus, wybór ekspozycji itp.), które mogą być dołączane jako otwarte zewnętrzne biblioteki lub proprietarne, izolowane moduły. API udostępnia dostęp do takich funkcji, jak określanie funkcjonalności dostępnych zewnętrznych i wbudowanych kamer, wykorzystanie profili urządzeń, obsługa zdarzeń podłączania i odłączania kamer, zarządzanie przechwytywaniem danych z kamer na poziomie pojedynczych klatek oraz synchronizacja zdjęć z działaniem lampy błyskowej. Możliwa jest jednoczesna praca z wieloma kamerami w systemie oraz organizacja przechwytywania kilku strumieni wideo z jednej kamery (na przykład, jeden o niskiej rozdzielczości dla wideokonferencji, a drugi o wysokiej rozdzielczości do archiwizacji na dysku).
Źródło: opennet.ru
