Перший випуск libcamera, стека для підтримки камер у Linux

Після чотирьох років розробки сформовано перший випуск проекту libcamera (0.0.1), що пропонує програмний стек для роботи з відеокамерами, фотокамерами та TV-тюнерами в Linux, Android та ChromeOS, який продовжує розвиток API V4L2 та згодом замінить його. Оскільки API бібліотеки ще продовжує змінюватися і остаточно не стабілізовано, досі проект розвивався без відгалуження окремих випусків із використанням безперервної моделі розробки. У відповідь на потребу дистрибутивів у відстеженні змін API, що впливають на сумісність, і для спрощення постачання бібліотеки в пакетах тепер прийнято рішення періодично формувати релізи, що відображають рівень зміни ABI та API. Код проекту написано на C++ та поширюється під ліцензією LGPLv2.1.

Проект розвивається розробниками мультимедійних підсистем ядра Linux спільно з деякими виробниками камер з метою нормалізації ситуації з підтримкою в Linux камер для смартфонів та пристроїв, що вбудовуються, які прив'язані до пропрієтарних драйверів. Вже наявний в ядрі Linux API V4L2 свого часу був створений у розрахунку на роботу з традиційними відокремленими web-камерами і погано адаптований для тенденції виносу функціональності MCU на плечі CPU, що з'явилася останнім часом.

На відміну від традиційних камер, в яких операції первинної обробки зображень виробляються на вбудованому в камеру спеціалізованому процесорі (MCU), у пристроях для скорочення вартості ці функції виносяться на плечі основного CPU і вимагають ускладненого драйвера, що включає не підлягають відкриттю ліцензовані компоненти. У рамках проекту libcamera прихильники СПО та виробники обладнання спробували створити компромісне рішення, яке з одного боку задовольняє потреби розробників відкритого ПЗ, а з іншого — дозволяє захистити інтелектуальну власність виробників камер.

Пропонований бібліотекою libcamera стек реалізований цілком у просторі користувача. Для забезпечення сумісності з наявними програмними оточеннями та програмами надаються прошарки для сумісності з API V4L, Gstreamer та Android Camera HAL. Специфічні для кожної камери пропрієтарні компоненти взаємодії з обладнанням оформляються у вигляді модулів, що виконуються в окремих процесах і взаємодіють із бібліотекою через IPC. Модулі не мають прямого доступу до пристрою та звертаються до обладнання через проміжний API, запити через який перевіряються, фільтруються та обмежуються лише зверненням до функціональності, необхідної для керування камерою.

Бібліотека також надає доступ до алгоритмів для обробки та покращення якості зображень та відео (коригування балансу білого, усунення шуму, стабілізація відео, автофокус, вибір експозиції тощо), які можуть підключатися у вигляді відкритих зовнішніх бібліотек або ізольованих пропрієтарних модулів. API надає доступ до таких функцій, як визначення функціональності наявних зовнішніх та вбудованих камер, використання профілів пристроїв, обробка подій підключення та відключення камер, керування захопленням даних з камер на рівні окремих кадрів та синхронізація знімків із роботою спалаху. Можлива роздільна робота з кількома камерами в системі та організація захоплення одночасно кількох відеопотоків з однієї камери (наприклад, один з низькою роздільною здатністю для відеоконференції, а інший з високою роздільною здатністю для архівного запису на диск).

Джерело: opennet.ru

Додати коментар або відгук