Модуль Linux / Kernel: Может ли драйвер использоваться двумя пользовательскими программами? - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь разработать «виртуальный» видеодрайвер на примере проекта ViVi. Он виртуален, поскольку не взаимодействует ни с одной камерой. Он получает видеопоток от пользовательской программы (C ++), а также выступает в роли видеодрайвера для другой пользовательской программы (Flash), которая отображает видеопоток.

Итак, если у меня есть / dev / video0. Одной программе нужно записать в нее фрейм, а другой - прочитать. Это возможно?

Мне это нужно, потому что Flash не распознает эту камеру, поэтому я использую виртуальный драйвер в качестве моста от моего устройства захвата (которое использует настоящий драйвер) и Flash.

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Да.

В более общем случае драйвер устройства может разрешать столько одновременных открытий, сколько ему нужно.Посмотрите на Драйверы устройств Linux для получения дополнительной информации.Вы можете использовать filp->private_data для хранения данных, относящихся к конкретному открытому экземпляру.

Для еще большей гибкости драйвер устройства даже не ограничен наличием одного узла устройства в /dev.

2 голосов
/ 28 февраля 2012

Там использовали драйвер vloopback, который делал именно то, что вы хотите делать. Тем не менее, это не было частью стандартного ядра. Некоторое время назад я написал библиотеку ( dv4linux , которая перехватила чтение / запись libc в / dev / video для достижения чего-то похожего. В текущей версии есть серьезные проблемы с обработкой malloc в более новом Firefox, хотя. Berlios.de может скоро выйдет из строя.

1 голос
/ 28 февраля 2012

Может ли драйвер использоваться двумя программами:

Обычно может, но это зависит от водителя. Когда дело доходит до сбора данных, у вас часто есть один процесс, который получает все данные, а другие процессы имеют только ограниченный доступ к функциональности драйвера. Так что, в конце концов, API работает с несколькими процессами, открывающими драйвер, но, в конце концов, все зависит от драйвера.

Может ли драйвер VIVI использоваться в качестве драйвера моста:

Нет. Это драйвер эмуляции видео capture , но в этом драйвере нет возможности вывода видео или приема видео. Вам нужно будет понять, почему flash не работает с вашим настоящим драйвером, но работает с виртуальным драйвером. strace твой друг.

...