LINUX.ORG.RU

v4l2 прокси через ядро

 


0

1

Мы в флюссонике много работаем с разными железками: это минимум 6 карт SDI захвата, несколько железных транскодеров, а IP-камер с которых мы захватываем через родной SDK больше десятка, даже не считал.

Все эти железки с точки зрения API делятся на нормальные, которые дают v4l2 API (и это преимущественно русские железки) и всякое проприетарное говно типа Decklink, Hisilicon. Есть совсем треш типа AJA SDK, который на плюсах.

Исходя из опыта работы с v4l2 и проприетарными либами, можно однозначно сказать, что никакого плюса ни decklink api, ни dectek matrix api, ни какой-либо китайский хлам, которого у нас скопилось тоннами не дает.

Нет ни одной инженерной причины для какого-либо из этих устройств делать не v4l2 api. Этого апи достаточно для передачи управления, видео и аудио туда и обратно.

Отсюда возник вопрос: может быть получится сделать v4l2 адаптер для таких штук. Т.е. берем проприетарную либу, пишем вокруг неё демона, который создает v4l2 устройство. Дальше юзерская программа подключается к v4l2 устройству, шлет туда настройки, они попадают в демон-адаптер, он настраивает через либу, потом начинает перекидывать видео через v4l2.

Для H264 кодированного видео пара лишних перекопирований неприятна, но не фатальна. Для SDI копирование будет фатально, но там надо решать проблему по мере поступления.

Кто что думает о таком подходе? Какие могут быть подводные камни? Куда стоит посмотреть на что-то такое уже готовое, что я просто по невнимательности пропустил?

я у себя делал через плагины, ffmpeg плагин все что может захватвает, decklink и flycap также в своих плагинах. source задаешь в конфиге какой нада. v4l2 как мамонт его нужно убрать из ядра, ни редирект ему не сделать ничего, libcamera из нового смотрел пишут активно.

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)
Ответ на: комментарий от max_lapshin

а зачем мне через него передавать sdi напрямую, 60 кадров fullhd у вас просто не влезет.

никто не прибивается, все дают возможность выбрать устройство.

ну да ну да, все дают выбрать /dev/video из /dev/video123 )

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 2)
Ответ на: комментарий от anonymous2

ты что-то вообще странное пишешь, совершенно непонятное.

В ядре сейчас есть удобный вменяемый механизм, позволяющий работать с ASI, SDI, MIPI/CSI. Ты мне рассказываешь про какие-то непонятные хотелки «хочу unix domain socket», которые ты потом сам и не хочешь.

Притащил какую-то непонятную либу от гугла, которая будет глючить у всех по-разному и будет 40 разных libcamera, которые надо линковать с собой только тем компилятором, который решил индусский студент, подрабатывающий на китайцев в пакистане.

Мне пока не очень понятно, о чём ты вообще говоришь =)

max_lapshin ★★★★★
() автор топика

Нет ни одной инженерной причины для какого-либо из этих устройств делать не v4l2 api.

именно по sdi вроде как разное несжатое 10-битное может ходить, я такого в v4l2 не видал ?

https://linuxtv.org/downloads/presentations/media_ws_2013/SDI%2520in%2520V4L2%2520proposal.pdf

хотя ароде как рядом в гугле что-то лежит…

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842396/Xilinx+V4L2+SDI+Rx+driver

Ааа

https://docs.kernel.org/userspace-api/media/v4l/pixfmt-intro.html

«V4L2 drivers are not limited to these formats, however. Driver-specific formats are possible. In that case the application may depend on a codec to convert images to one of the standard formats when needed. But the data can still be stored and retrieved in the proprietary format. For example, a device may support a proprietary compressed format. Applications can still capture and save the data in the compressed format, saving much disk space, and later use a codec to convert the images to the X Windows screen format when the video is to be displayed.»

ну т.е через ffmpeg и прочее непатченное оно может и не работать, в общем случае. Пропустил этот абзац, сразу убежал в поиск по битности.

Andrew-R ★★★★
()
Ответ на: комментарий от Andrew-R

ну, наверное это можно доработать. Не вижу особых проблем с этим.

Вопрос в том, что просто сам по себе v4l2 выглядит довольно удачным апи (чего не скажешь о плохой и вредной идее под названием libcamera)

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

я так понимаю libcamera появилась оттого, что разные камерные блоки в SoC и блоки обработки изображения - это в целом разные блоки, а не как раньше - одно устройство отдает уже готовый поток.

Но я на самом деле так, мимопроходил. Интересуюсь, но сам ничего написать не могу :)

Andrew-R ★★★★
()
Ответ на: комментарий от Andrew-R

она появилась от того, что низкоквалифицированные люди из гугла решили выбросить очередной выблевок типа в опенсорс.

Пользователи этой поделки получат очередной говнокод, наполненный глобальными переменными, недокументированными пролезаниями мимо апи, который не будет компилироваться.

max_lapshin ★★★★★
() автор топика