Преемник Libcamera V4L2 надеется облегчить проблемы со встроенной камерой Linux

В ELC Europe разработчик ядра Linux Лоран Пинчарт представил продолжение стека V4L2 для встроенных камер.
«Libcamera» с открытым исходным кодом облегчает нагрузку на разработчиков пространства пользователя, предлагает улучшенные элементы управления для каждого кадра и 3A, а также собственный код камеры для песочниц.

API V4L2 (видео для Linux 2) уже давно предлагает альтернативу проприетарным интерфейсам камеры / компьютера с открытым исходным кодом, но он начинает показывать свой возраст.
На конференции Embedded Linux Conference Europe в октябре проект V4L2 представил преемника под названием libcamera.
Соавтор V4L2 и плодовитый разработчик ядра Linux Лоран Пинчар рассказал о начальном этапе проекта libcamera в презентации под названием «Почему встроенные камеры сложны и как их легко сделать».

V4l и V4L2 были разработаны, когда встроенные системы с камерой были намного проще.
«Возможно, у вас был датчик камеры, подключенный к SoC, может быть, со скейлером, и все было открыто через API», - сказал Пинчарт, управляющий фирмой по встроенным Linux под названием Ideas on Board, и в настоящее время работающей для Renesas.
«Но когда аппаратное обеспечение стало более сложным, мы избавились от традиционной модели.
Вместо того, чтобы выставлять камеру как единое устройство с одним API, мы позволяем пользователям погрузиться в устройство и раскрыть технологию, чтобы предложить более детальный контроль ».


Лоран Пинчарт объясняет архитектуру libcamera аудитории ELC Europe

(щелкните изображение, чтобы увеличить)

Эти улучшения были тщательно документированы, что позволило опытным разработчикам реализовать больше вариантов использования, чем раньше.
Тем не менее, спецификация взяла на себя большую часть бремени контроля над сложным API-интерфейсом для разработчиков, имея мало ресурсов для облегчения обучения.
Другими словами, «V4L2 стал более сложным для пользовательского пространства», объяснил Пинчарт.

Проект планировал добавить слой с именем libv4l для решения этой проблемы.
Библиотека пользовательского пространства libv4l была разработана для имитации API ядра V4L2 и предоставления его приложениям, «чтобы она могла быть полностью прозрачной при отслеживании кода в libc», сказал Пинчарт.
«План состоял в том, чтобы поставщики предоставили плагины для конкретных устройств, и все они были бы частью файла libv4l, но этого не произошло.
Даже если бы это было так, этого было бы недостаточно.

Libcamera, которую Пинчарт описывает как «не только библиотеку камер, но и полный набор камер в пространстве пользователя», стремится облегчить разработку приложений для встроенных камер, улучшая как V4L2, так и libv4l.
Основной частью является библиотека libcamera, написанная на C ++, которая предоставляет API-интерфейсы драйвера ядра для пользовательского пространства.
В верхней части фреймворка имеются необязательные языковые привязки для таких языков, как C.

Следующий уровень - это прикладной уровень libcamera, который транслируется в существующие API-интерфейсы камеры, включая V4L2, Gstreamer и Android Camera Framework, которые, по словам Пинчарта, не будут содержать код Android HAL, характерный для конкретного поставщика.
Что касается V4L2, «мы будем стараться поддерживать совместимость как лучшее, но не будем реализовывать каждую функцию», - сказал Пинчарт.
Также будет собственный формат приложения libcamera, а также планы по поддержке Chrome OS.

Libcamera скрывает уровень ядра от верхних уровней.
Фреймворк построен вокруг концепции устройства камеры, «чего вы и ожидаете от камеры как конечного пользователя», сказал Пинчарт.
«Мы хотим реализовать возможности каждой камеры, и у нас также будет концепция профилей, которая представляет собой более широкое представление о функциях.
Например, вы можете выбрать видео или профиль «наведи и снимай».

Libcamera будет поддерживать несколько потоков видео с одной камеры.
«Например, при проведении видеоконференций вам может потребоваться другое разрешение и поток, чем то, что вы кодируете по сети», - сказал Пинчарт.
«Возможно, вы захотите отобразить прямую трансляцию на экране и одновременно сделать фотоснимки или записать видео, возможно, в другом разрешении».

Покадровое управление и 3A API

Одна важная новая функция - управление кадрами.
«Камеры обеспечивают управление такими вещами, как стабилизация видео, вспышка или время экспозиции, которые могут изменяться при различных условиях освещения», - сказал Пинчарт.
«V4L2 поддерживает большинство из этих элементов управления, но с одним большим ограничением.
Поскольку вы захватываете видеопоток с одного кадра за другим, если вы хотите увеличить время экспозиции, вы никогда точно не знаете, на какой кадр это повлияет.
Если вы хотите сделать фотоснимок со вспышкой, вы не хотите активировать вспышку и получать изображение до или после вспышки ».

С покадровыми элементами управления libcamera вы можете быть более точными.
«Если вы хотите, чтобы у вас всегда была правильная яркость и время экспозиции, вам необходимо управлять этими функциями так, чтобы они были привязаны к видеопотоку», - пояснил Пинчарт.
«С помощью управления кадрами вы можете изменять все снимаемые кадры так, чтобы это было синхронизировано с потоком».

Libcamera также предлагает новый подход к 3A-элементам управления камеры, таким как автоэкспозиция, автофокус и автоматический баланс белого.
Чтобы обеспечить цикл управления 3A, «у вас может быть простая реализация с 100 строками кода, которая даст вам едва ли пригодные для использования результаты, или реализация, основанная на двух или трех годах разработки поставщиками устройств, где они действительно пытаются оптимизировать качество изображения, Сказал Пинчарт.
Поскольку большинство поставщиков SoC отказываются выпускать алгоритмы 3A, которые работают в своих интернет-провайдерах, с лицензией с открытым исходным кодом, «мы хотим создать среду и экосистему, в которой будут возможны повторные реализации собственных алгоритмов 3A с открытым исходным кодом», - сказал Пинчарт.

Libcamera предоставит API 3A, который будет транслировать между стандартным кодом камеры и специфическим компонентом поставщика.
«Камера должна взаимодействовать с драйверами ядра, что представляет угрозу безопасности, если код обработки изображений имеет закрытый исходный код», - сказал Пинчарт.
«Вы используете ненадежный код поставщика 3A, и даже если они что-то не делают за вашей спиной, его можно взломать.
Поэтому мы хотим иметь возможность изолировать компонент с закрытым исходным кодом и заставить его работать в песочнице.
API может быть маршалированным и не маршалируемым через IPC.
Мы можем ограничить доступные системные вызовы и запретить компоненту песочницы напрямую обращаться к драйверу ядра.
«Песочница» гарантирует, что все элементы управления будут проходить через наш API ».

API 3A в сочетании с подходом песочницы libcamera может побудить большее количество поставщиков SoC к дальнейшему представлению своих интернет-провайдеров так же, как некоторые начали открывать свои графические процессоры.
«Мы хотим, чтобы производители публиковали драйверы камер с открытым исходным кодом, которые раскрывают и документируют каждый элемент управления на устройстве», - сказал он.
«Когда вы взаимодействуете с камерой, большая часть этого кода не зависит от устройства.
Поставщики реализуют HAL с полностью закрытым исходным кодом и предоставляют собственное управление буфером, расположение памяти и другие задачи, которые не приносят никакой пользы.
Это пустая трата ресурсов.
Мы хотим, чтобы как можно больше кода можно было повторно использовать и делиться с поставщиками ».

Далее Пинчарт описал диспетчер кулачковых устройств libcamera, который будет поддерживать горячее подключение и отключение камер.
Он также рассказал о конвейерном обработчике libcamera, который контролирует буферизацию памяти и связь между MIPI-CSI или другими интерфейсами приемника камеры и провайдером камеры.

«Наш обработчик конвейера заботится о деталях, поэтому приложение не должно», - сказал Пинчарт.
«Он обрабатывает планирование, конфигурацию, маршрутизацию сигналов, количество потоков, а также буферы определения местоположения и прохождения». Обработчик конвейера достаточно гибок, чтобы поддерживать ISP с интегрированным приемником CSI (и без пула буферов) или других сложных ISP, которые могут иметь прямой конвейер в память.

Посмотрите все выступления ELC Пинчарта ниже:

Лоран Пинчарт: «Почему встроенные камеры сложны, и как их легко сделать».

Эта статья защищена авторским правом © 2018 Linux.com и была первоначально опубликована здесь .
Он был воспроизведен этим сайтом с разрешения его владельца.
Пожалуйста, посетите Linux.com для получения последних новостей и статей о Linux и open source.