Категории раздела |
 |
Автомобильные гаджеты, ремонт...
[144]
|
Безопасность IT
[404]
|
Блоки питания, Power Banks, зарядки...
[512]
|
Видеорегистраторы
[188]
|
Гаджеты для спорта и здоровья...
[191]
|
Гаджеты, аксессуары...
[627]
|
Измерительная техника, инструменты
[446]
|
Накопители данных
[233]
|
Нетбуки, Ноутбуки, Ультрабуки
[691]
|
Мультиварки, блендеры и не только...
[164]
|
Планшеты
[764]
|
Радар-детекторы
[26]
|
Роботы-пылесосы
[40]
|
Своими руками
[366]
|
Сети, сетевые технологии, оборудование...
[273]
|
Смартфоны
[4963]
|
Фотокамеры, объективы, искусство фотографии..
[541]
|
Умный дом
[53]
|
Электронные книги
[102]
|
CB, LPD, PMR- связь...
[170]
|
DECT, IP-телефоны
[18]
|
Drones, boats, cars...
[109]
|
electric cars
[35]
|
GPS-навигаторы, трекеры...
[51]
|
Linux и не только
[3983]
|
mini computers и не только...
[412]
|
News IT, Это интересно, ликбез...
[1121]
|
Smart TV, UltraHD, приставки, проекторы...
[416]
|
Smart Watch
[269]
|
Sound: наушники, плееры, усилители...
[619]
|
Windows 10...
[301]
|
Windows 11
[37]
|
|  |
 |
|
 | |  |
| Главная » 2014 » Февраль » 6 » Работа с usb видеокамерой в Linux. Часть 1
17:15 Работа с usb видеокамерой в Linux. Часть 1 |
Работа с usb видеокамерой в Linux. Часть 1
По популярности видеокамера, сегодня, стоит в одном ряду с
микрофоном и наушниками. Она используется в различных направлениях,
таких как распознавание объектов, дополненная реальность,
видеоконференции и множество других. Но что же скрыто под капотом этих
сложнейших программ? Как мы получаем картинку с видеокамеры? Этот цикл
статей позволит взглянуть на простоту работы с видеокамерой на низком
уровне, обработку полученного изображения.
Для начала, немного информации о работе с устройствами в системе
Linux. Устройства в nix системах представляют собой файл. С некоторыми
файлами-устройств мы можем работать как с обычными файлами. Например:
~$ cat /dev/sda эта команда выведет на экран весь диск sda.
Есть устройства с которыми нельзя работать напрямую, к ним относится
видеокамера.При попытке это сделать мы получим такую реакцию системы:
~$ cat: /dev/video0: Недопустимый аргумент *Где /dev/video0 это файл-устройство найшей видеокамеры.
Для работы с ней нам понадобится системная функция ioctl детальнее о ней можно ознакомится [1]. Попробуем это применить. Вот код позволяющий считать информации с устройства (альтернатива команде cat для видеоустройств):
Код тут
В первых строках кода считываются параметры с которой запущено
приложение. Если параметров нету то device_name принимает стандартоне
значение "/dev/video0".
В блоке «Open Device» происходит открытие устройства системной функцией
open (нужно подключить header fcntl.h). Обязательный параметр O_RDWR
отвечает за открытие устройства считывания/записи. Если при подключении
возникла ошибка, то функция open вернет -1.
Блок «Read Params From Device» — это сердце нашей маленькой программы. Для его использования надо подключить билиотеку <linux/videodev2.h> возможно прийдется её установить, у каждого дистрибутива свой пакет под эту библиотеку
Системная функция ioctl имеет три параметра:
file_device — дескриптор нашего устройства
VIDIOC_QUERYCAP — функция ядра, которую применяем для нашего устройства.
device_params — область памяти куда будет сброшен результат функции «VIDIOC_QUERYCAP».
device_params это структура состоящая из таких полей:
struct v4l2_capability
{
__u8 driver[16];
__u8 card[32];
__u8 bus_info[32];
__u32 version;
__u32 capabilities;
__u32 device_caps;
__u32 reserved[3];
};
если возникла ошибка ioctl вернет -1
Блок «Close Device» закрывает дескриптор устройства.
Посмотрим программу в действии.
скомпилируем
gcc catvd.c -o catdv
запустим
./catvd /dev/video0
/dev/video0 error 2, No such file or directory
устройство не определилось ядром либо не подключено уборщица опять ненужные провода дергала.
Подключаем и заново запуск. Получаем такую информацию:
./catvd /dev/video0
driver : uvcvideo
card : UVC Camera (046d:0804)
bus_info : usb-0000:00:12.2-3
version : 3.11.10
capabilities: 0x84000001
device capabilities: 0x04000001
поле capabilities и device capabilities можно расшифровать благодаря константам из файла videodev2.h:
V4L2_CAP_DEVICE_CAPS 0x80000000
V4L2_CAP_STREAMING 0x04000000
V4L2_CAP_VIDEO_CAPTURE 0x00000001
На этом вводная статья заканчивается. В следующих обзорах будут
затронуты, такие темы как memory-mapping, виодеформаты изображения,
настройка камеры, вывод изображения в текстуру, работа с несколькими
камерами.
Ресурсы используемые в статье:
- статья о работе ioctl
- о работе с video for linux (слегка устаревшая информация)
Исходник программы, используемой в статье.
http://habrahabr.ru/post/211608/
|
Категория: Linux и не только |
Просмотров: 661 |
Добавил: laptop
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
| |
 | |  |
|
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Внимание! |
 |
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
|  |
 |
|