Категории раздела |
|
Автомобильные гаджеты, ремонт...
[220]
|
Безопасность IT
[484]
|
Блоки питания, Power Banks, зарядки...
[490]
|
Видеорегистраторы
[220]
|
Гаджеты для спорта и здоровья...
[190]
|
Гаджеты, аксессуары...
[625]
|
Измерительная техника, инструменты
[449]
|
Накопители данных
[226]
|
Нетбуки, Ноутбуки, Ультрабуки
[680]
|
Мультиварки, блендеры и не только...
[158]
|
Планшеты
[758]
|
Радар-детекторы
[26]
|
Роботы-пылесосы
[37]
|
Своими руками
[357]
|
Сети, сетевые технологии, оборудование...
[269]
|
Смартфоны
[4966]
|
Фотокамеры, объективы, искусство фотографии..
[543]
|
Умный дом
[47]
|
Электронные книги
[96]
|
CB, LPD, PMR- связь...
[171]
|
DECT, IP-телефоны
[18]
|
Drones, boats, cars...
[108]
|
electric cars
[35]
|
GPS-навигаторы, трекеры...
[51]
|
Linux и не только
[4380]
|
mini computers и не только...
[409]
|
News IT, Это интересно, ликбез...
[1113]
|
Smart TV, UltraHD, приставки, проекторы...
[414]
|
Smart Watch
[263]
|
Sound: наушники, плееры, усилители...
[616]
|
Windows 10...
[298]
|
Windows 11
[28]
|
| |
|
|
| | |
| Главная » 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 и не только |
Просмотров: 633 |
Добавил: laptop
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
| |
| | |
|
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Внимание! |
|
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
| |
|
|