Меню сайта
Категории каталога
Настройка вебкамеры для работы с freebsd [2009]
Задача - подключить камеру к freebsd. Для начала нам необходимо просто подключить камеру к freebsd и заставить ее работать. Итак, на сервере используется freebsd 7.0. После подключения камеры:
# usbdevs -v Controller /dev/usb4: addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00 port 1 addr 2: full speed, power 100 mA, config 1, product 0x08d7(0x08d7), vendor 0x046d(0x046d), rev 1.00 # dmesg | grep 0x046d ugen0: <vendor 0x046d product 0x08d7, class 0/0, rev 1.10/1.00, addr 2> on uhub4
vendor 0x046d - говорит о производителе камеры(Logitech) product 0x08d7 - это модель камеры Поиск в сети решения для работы с камерой дало следующие результаты, * существует порт graphics/spcaview , который позволяет без лишних наворотов и зависимостей снимать с камеры jpeg изображения, а так же работать с mjpeg форматом(потоковый jpgeg) * graphics/qcamview - не подошел по причине отсутствия драйвера для конкретной модели и привязки к X11 * multimedia/pwcbsd - требует video4linux и совместимости с linux'ом Из-за того, что qcamview и pwcbsd требую слишком много стороннего софта(в частности X11 и/или поддержки linux на бинарном уровне) для всего-лишь снятия изображения с камеры, решено было использовать graphics/spcawiew Устанавливаем порт, но не через
# pkg_add -r graphics/spcawiew
т.к. как выяснилось в последствии, поддержки текущей камеры нет в программе, а компилируем порт из исходников :
# cd /usr/ports/graphics/spcawiew # make && make install && rehash
При работе freebsd с камерами создается специальное устройство ugenX(например, /dev/ugen0 ) Проверяем поддержку камеры
# spca5shot -d /dev/ugen0 -i Not found SPCA50x based usb camera, or Permission denied
Поддержки камеры нет, увы. Но мы ее добавим! Находим файл с данными о камерах и просматриваем его на предмет наличия поддержки камеры производителя 0x046d :
# less /usr/ports/graphics/spcaview/work/spca5xx-20060402/drivers/usb/spca5xx.c | grep 0x046d {USB_DEVICE(0x046d, 0x0960)}, /* Logitech Inc. ClickSmart 420 */ {USB_DEVICE(0x046d, 0x0901)}, /* Logitech Inc. ClickSmart 510 */ {USB_DEVICE(0x046d, 0x0890)}, /* Logitech QuickCam traveler */ {USB_DEVICE(0x046d, 0x0900)}, /* Logitech Inc. ClickSmart 310 */ {USB_DEVICE(0x046d, 0x0905)}, /* Logitech ClickSmart820 */ {USB_DEVICE(0x046d, 0x08a2)}, /* Labtec Webcam Pro */ {USB_DEVICE(0x046d, 0x0921)}, /* Labtec Webcam */ {USB_DEVICE(0x046d, 0x0920)}, /* QC Express */ {USB_DEVICE(0x046d, 0x0928)}, /* Logitech QC Express Etch2 */ {USB_DEVICE(0x046d, 0x092a)}, /* Logitech QC for Notebook */ {USB_DEVICE(0x046d, 0x08a0)}, /* Logitech QC IM */ {USB_DEVICE(0x046d, 0x08a1)}, /* Logitech QC IM 0x08A1 +sound */ {USB_DEVICE(0x046d, 0x08a3)}, /* Logitech QC Chat */ {USB_DEVICE(0x046d, 0x08b9)}, /* Logitech QC IM ??? */ {USB_DEVICE(0x046d, 0x0929)}, /* Labtec Webcam Elch2 */ {USB_DEVICE(0x046d, 0x092c)}, /* Logitech QC chat Elch2 */ {USB_DEVICE(0x046d, 0x08ae)}, /* Logitech QuickCam for Notebooks */ {USB_DEVICE(0x046d, 0x092b)}, /* Labtec Webcam Plus */ {USB_DEVICE(0x046d, 0x08ad)}, /* Logitech QCCommunicate STX */ {USB_DEVICE(0x046d, 0x08a9)}, /* Logitech Notebook Deluxe */ {USB_DEVICE(0x046d, 0x08aa)}, /* Labtec Webcam Notebook */ {USB_DEVICE(0x046d, 0x08a6)}, /* Logitech QCim */ case 0x046d: /* Logitech Labtec */
Как можно заметить, поддержки нашей камеры нет в файле Поиск в сети по 0x08d7 модели камеры показал, что такая поддержка имеется в драйвере Logitech видеокамер gspcav1(http://freebsd.3dn.ru/введите_адрес ). gspcav1 - это общий файл поддержки видеокамер для *nix систем, однако в скомпилированном виде он требует бинарной совместимости с linux, что нам не подходит. Т.к. порт graphics/spcawiew основан именно на этом драйвере, скачиваем исходники драйвера для анализа http://freebsd.3dn.ru/введите_адрес . Нас интересует файлы gspca_core.c и gspca.h Анализ исходника gspca_core.c дает следующий код по модели 0x08d7 :
{USB_DEVICE(0x046d, 0x08d7)}, /* Logitech QCam STX */
и далее
case 0x08d7:
spca50x->desc = LogitechQCCommunicateSTX;
spca50x->bridge = BRIDGE_ZC3XX;
spca50x->sensor = SENSOR_HV7131C;
break ;
Осталось добавить эти данные в драйвер spca5xx.c из нашего порта graphics/spcawiew и, возможно, появиться поддержка камеры. Но прежде, нужно не забыть стереть уже скомпилированные данные:
# cd /usr/ports/graphics/spcawiew # make clean
Теперь наша задача внести изменения в исходник драйвера и откомпилировать его. Применяем патчи но не компилируем исходник
Далее редактируем /usr/ports/graphics/spcaview/work/spca5xx-20060402/drivers/usb/spca5xx.c любимым редактором и вносим следующие изменения: Добавляем в секцию устройства 0x046d
{USB_DEVICE(0x046d, 0x08d7)}, /* Logitech QCam STX */
После чего исходный текст будет выглядеть примерно так:
{USB_DEVICE(0x046d, 0x08ad)}, /* Logitech QCCommunicate STX */
{USB_DEVICE(0x046d, 0x08a9)}, /* Logitech Notebook Deluxe */
{USB_DEVICE(0x046d, 0x08d7)}, /* Logitech QCam STX */
{USB_DEVICE(0x046d, 0x08aa)}, /* Labtec Webcam Notebook */
Теперь нам необходимо добавить конфигурацию камеры, находим в исходном файле секцию камер Logitech:
case 0x046d: /* Logitech Labtec */
case 0x041E: /* Creative cameras */
switch (product) {
Далее идет перечисление всех известных камер Logitech, нам необходимо создать новую секцию и добавить в spca5xx.c данные из драйвера gspca_core.c :
case 0x08d7:
spca50x->desc = LogitechQCCommunicateSTX;
spca50x->bridge = BRIDGE_ZC3XX;
spca50x->sensor = SENSOR_HV7131C;
break ;
Но это еще не все. Исходный текст spca5xx.c показывает, что для freebsd используются более расширенные настройки! Для добавления необходимой информации ищем какую-нибудь запись с сенсором SENSOR_HV7131C , например:
case 0x08a6:
spca50x->desc = LogitechQCim;
spca50x->bridge = BRIDGE_ZC3XX;
spca50x->sensor = SENSOR_HV7131C;
spca50x->header_len = SPCA50X_OFFSET_DATA;
spca50x->i2c_ctrl_reg = SPCA50X_REG_I2C_CTRL;
spca50x->i2c_base = 0 ;
spca50x->i2c_trigger_on_write = 0 ;
spca50x->cameratype = JPGH;
info("USB SPCA5XX camera found. Logitech QC IM ");
break ;
И копируем недостающие данные в нашу секцию, внеся небольшие изменения в название:
case 0x08d7:
spca50x->desc = LogitechQCCommunicateSTX;
spca50x->bridge = BRIDGE_ZC3XX;
spca50x->sensor = SENSOR_HV7131C;
spca50x->header_len = SPCA50X_OFFSET_DATA;
spca50x->i2c_ctrl_reg = SPCA50X_REG_I2C_CTRL;
spca50x->i2c_base = 0 ;
spca50x->i2c_trigger_on_write = 0 ;
spca50x->cameratype = JPGH;
info("USB SPCA5XX camera found. Logitech QCam STX ");
break ;
Все! Осталось скомпилировать и установить драйвер:
# cd /usr/ports/graphics/spcawiew # make && make install && rehash
Теперь проверим работу нашего драйвера
# spca5shot -i -d /dev/ugen0 USB SPCA5XX camera found. Logitech QCam STX [spca5xx_probe:8279] Camera type JPEG [zc3xx_config:530] Find Sensor HV7131R(c) [spca5xx_getcapability:2242] maxw 640 maxh 480 minw 176 minh 144 --- video capability --- name: Logitech QuickCam Communicate Stype: 1 channels: 1 maxwidth: 640 maxheight: 480 minwidth: 176 minheight: 144 --- size and format --- size: 640x480 352x288 320x240 176x144 160x120 native input format: JPEG output format: 24bit RGB --- video picture (initial value) --- brightness: 32768 hue: 0 colour: 0 contrast: 32768 whiteness: 0 depth: 24 palette: 4 Done.
Ура! Работает! Теперь можно делать снимки с камеры используя команду spca5shot , так же можно настроить доступ к устройству /dev/ugen0 не из-под рута и модифицировать программу онлайн-просмотра камеры, но об этом в другой раз. PS Так же можно подключить отдельные камеры, которых нет в исходниках, однако, возможно, потребуется эксперементировать с настройками. PPS Моя первая статья, просьба указать на недостатки! )
Источник: http://www.lissyara.su/?id=1850
Категория: Работа с железом | Добавил: oleg (27.01.2009) | Автор: vp
Просмотров: 1316 | Рейтинг: 0.0 /0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Форма входа
Друзья сайта