Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.11.2015, 14:55   #1
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Наш уважаемый коллега Legich5.
Предложил сообществу:
http://geektimes.ru/post/265186/
О чем нам и сообщил наш коллега ALS:
http://cyber-place.ru/showpost.php?p=28772&postcount=35
свой вариант решения проблемы связки вебкамера-роутер - низкое разрешение и малое кол-во fsp при трасляции и записи видео.

Решение проблемы он разбил на два этапа.

Первый этап - патч для драйвера uvc:
Цитата:
Анализ кода драйвера и первый успех
Изучая код я пришел к выводу, что размер буфера спрашивается у камеры и моя камера возвращала размер несжатого кадра. Наверное это самое безопасное решение с точки зрения разработчиков камеры. Но оно же самое не оптимальное. Я решил, что для своего случая можно скорректировать необходимый размер буфера, используя экспериментальный коэффициент минимального сжатия. Я выбрал k=5. С таким значением у меня был запас порядка 20%.
Цитата:
Добавив коррекцию размера буфера, я получил стабильную работу в режиме 1280х720 и даже в режиме 1920х1080. Ура! Половина задачи решена!
Мое повторение патча драйвера в итоге выглядит так:

Собираем прошивку с нуля:
Код:
git clone git://git.openwrt.org/15.05/openwrt.git
cd ./openwrt
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make prereq
Копируем свои файлы по папкам:

Драйвер uvc расположен в директории:

./openwrt/build_dir/target-вашего-роутера/linux-вашего-роутера/linux-3.18.23/drivers/media/usb/uvc

Нам нужно внести изменения в 3 файла:
- uvc_driver.c - 8 строчек
- uvcvideo.h - 1 строчка
- uvc_video.c - 10 строчек (менять значения в трех под свою камеру)

Можно сделать это патчем разместив его:
./openwrt/target/linux/папка_вашего_роутера/patches-3.18/850-uvc-quirk-compression-rate.patch

И собрав прошивку.
Соответственно: патч добавляет строчки в указанные номера строк:
Код:
@@ -113,6 +113,14 @@
@@ -148,8 +148,9 @@
@@ -2102,6 +2102,16 @@
там где впереди + значит эта строка добавляется в файл.
Строки без + уже содержаться в файле.

Можно просто поправить 3 этих файла и закинуть их после сборки без прошивки без патча в папку с заменой файлов.

Прилагаю 3 файла в архиве, но в uvc_driver.c вам необходимо внести изменения самостоятельно - под вашу камеру.

Это можно сделать подключившись к роутеру по ssh и выполнив
Код:
dmesg | grep UVC
Увидите строчку вида:
Код:
[ 14.470000] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (0c45:62c0)
Копируем 0c45:62c0 в поисковик и смотрим, что она нам выдаст.
http://www.ideasonboard.org/uvc/ - пользуемся функцией "Найти" у браузера.

И добавляем в uvc_driver.c свою камеру:
Код:
/* Microdia Sonix USB 2.0 Camera */
	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
                                | USB_DEVICE_ID_MATCH_INT_INFO,
	  .idVendor             = 0x0c45,
	  .idProduct		= 0x62c0,
	  .bInterfaceClass	= USB_CLASS_VIDEO,
	  .bInterfaceSubClass	= 1,
	  .bInterfaceProtocol	= 0,
	  .driver_info		= UVC_QUIRK_RESTORE_CTRLS_ON_INIT
                                | UVC_QUIRK_COMPRESSION_RATE },
Пробелы удаляем, и делаем их клавишей TAB.
===
Если компилируем с патчем:
Выполняем :
Код:
make menuconfig
Сохраняем Save в .config
Запускаем:
Код:
make V=s
===
Если подкладываем готовые файлы в:
./openwrt/build_dir/target-вашего-роутера/linux-вашего-роутера/linux-3.18.23/drivers/media/usb/uvc
uvc_driver.c, uvcvideo.h, uvc_video.c

Можно удалить все скомпилированные файлы из папки:
./openwrt/bin/папка_вашего_роутера/
и сразу снова выполнить:
Код:
make V=s
===
Проверить работу можно подключившись к роутеру по ssh и выполнив:

Код:
grep dwMaxVideoFrameSize /lib/modules/3.18.23/uvcvideo.ko
Вывод вида:

Код:
root@OpenWrt:~# grep dwMaxVideoFrameSize /lib/modules/3.18.23/uvcvideo.ko
3uvcvideo: dwMaxVideoFrameSize fixed to %d.
А также выполнив:

Код:
lsmod
Код:
videobuf2_core         28748  1 uvcvideo
videobuf2_memops        1216  1 videobuf2_vmalloc
videobuf2_vmalloc       2145  1 uvcvideo
Ваши предложения, критика, уточнения, опровержения и прочий конструктив по теме только приветствуются

Архив патч: target.zip распаковать и закинуть с подтверждением замены файлов, в корень ./openwrt.
Архив: build_dir.zip распаковать и закинуть с подтверждением замены файлов, в корень ./openwrt после компиляции прошивки без патча и снова выполнить make V=s

Править только файл uvc_driver.c - под вашу камеру.
Вложения
Тип файла: zip build_dir.zip (58.1 Кб, 106 просмотров)
Тип файла: zip target.zip (2.4 Кб, 116 просмотров)

Последний раз редактировалось sunny; 12.11.2015 в 00:04.
sunny вне форума   Ответить с цитированием
 


Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 23:54. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика