Первый выпуск libcamera, стека для поддержки камер в Linux

После четырёх лет разработки сформирован первый выпуск проекта libcamera (0.0.1), предлагающего программный стек для работы с видеокамерами, фотокамерами и TV-тюнерами в Linux, Android и ChromeOS, который продолжает развитие API V4L2 и со временем заменит его. Так как 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 предоставляет доступ к таким функциям, как определение функциональности имеющихся внешних и встроенных камер, использование профилей устройств, обработка событий подключения и отключения камер, управление захватом данных с камер на уровне отдельных кадров и синхронизация снимков с работой вспышки. Возможна раздельная работа с несколькими камерами в системе и организация захвата одновременно нескольких видеопотоков с одной камеры (например, один с низким разрешением для видеоконференции, а другой с высоким разрешением для архивной записи на диск).



Источник: http://www.opennet.ru/opennews/art.shtml? num=57931

© OpenNet