LinuxForum.Fans
Тема

USB вебкамера и Skype в RFR-20

Автор: Cruiser78 17 сообщений 2764 просмотров
02.12.2014 11:55 · отредактировано #403575

Привет всем!
Дано:
1. Ось Russian Fedora Remix 20-x86_64.
2. Skype
3. проблемная USB-вебкамера Defender G-LENS 323-1.

Задача - подружить skype c этой камерой.
Что имеем:
1. Система камеру видит:

[console]$ lsusb
....
Bus 002 Device 003: ID 093a:2620 Pixart Imaging, Inc. [/console]

Соответственно и в dmesg появляются нужные записи. С камерой нормально работают и cheese, и guvcview, и VLC. Её опознают и утилиты v4l2. Например,

Показать
$ v4l2-ctl --all --verbose -d /dev/video0
VIDIOC_QUERYCAP: ok
Driver Info (not using libv4l2):
Driver name : gspca_pac7302
Card type : USB Camera (093a:2620)
Bus info : usb-0000:00:1d.0-1.2
Driver version: 3.16.3
Capabilities : 0x85000001
Video Capture
Read/Write
Streaming
Device Capabilities
Device Caps : 0x05000001
Video Capture
Read/Write
Streaming
Priority: 2
Video input : 0 (gspca_pac7302: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'PJPG'
Field : None
Bytes per Line: 640
Size Image : 115790
Colorspace : JPEG (JFIF/ITU601)
Streaming Parameters Video Capture:
Frames per second: invalid (0/0)
Read buffers : 2

User Controls

brightness (int) : min=0 max=32 step=1 default=16 value=16 flags=slider
contrast (int) : min=0 max=255 step=1 default=127 value=127 flags=slider
saturation (int) : min=0 max=255 step=1 default=127 value=127 flags=slider
red_balance (int) : min=0 max=200 step=1 default=100 value=100 flags=slider
blue_balance (int) : min=0 max=200 step=1 default=100 value=100 flags=slider
exposure (int) : min=0 max=1023 step=1 default=66 value=133 flags=inactive
gain_automatic (bool) : default=1 value=1 flags=update
gain (int) : min=0 max=62 step=1 default=15 value=33 flags=inactive
horizontal_flip (bool) : default=0 value=0
vertical_flip (bool) : default=0 value=0
white_balance_temperature (int) : min=0 max=255 step=1 default=55 value=55
sharpness (int) : min=0 max=15 step=1 default=8 value=8 flags=slider

Далее, пытаюсь посмотреть видео с этой камеры c помощью mplayer:

Показать
$ mplayer tv://
MPlayer SVN-r37150-4.8.3 (C) 2000-2014 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing tv://.
TV file format detected.
Selected driver: v4l2
name: Video 4 Linux 2 input
author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
comment: first try, more to come ;-)
v4l2: your device driver does not support VIDIOC_G_STD ioctl, VIDIOC_G_PARM was used instead.
Selected device: USB Camera (093a:2620)
Capabilities: video capture read/write streaming
supported norms:
inputs: 0 = gspca_pac7302;
Current input: 0
Current format: unknown (0x47504a50)
tv.c: norm_from_string(pal): Bogus norm parameter, setting default.
v4l2: ioctl enum norm failed: Inappropriate ioctl for device
Error: Cannot set norm!
Selected input hasn't got a tuner!
v4l2: ioctl set mute failed: Invalid argument
v4l2: ioctl query control failed: Invalid argument
==============================================================
Cannot find codec matching selected -vo and video format 0x47504A50.
==============================================================

v4l2: ioctl set mute failed: Invalid argument
v4l2: 2 frames successfully processed, 1 frames dropped.

Exiting... (End of file)

То есть - опаньки. Делаем, как советует гугль LD_PRELOAD:
[console]$ LD_PRELOAD=/usr/lib64/libv4l/v4l1compat.so mplayer tv://
MPlayer SVN-r37150-4.8.3 (C) 2000-2014 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing tv://.
TV file format detected.
Selected driver: v4l2
name: Video 4 Linux 2 input
author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
comment: first try, more to come ;-)
v4l2: your device driver does not support VIDIOC_G_STD ioctl, VIDIOC_G_PARM was used instead.
Selected device: USB Camera (093a:2620)
Capabilities: video capture read/write streaming
supported norms:
inputs: 0 = gspca_pac7302;
Current input: 0
Current format: RGB24
tv.c: norm_from_string(pal): Bogus norm parameter, setting default.
v4l2: ioctl enum norm failed: Inappropriate ioctl for device
Error: Cannot set norm!
Selected input hasn't got a tuner!
v4l2: ioctl set mute failed: Invalid argument
v4l2: ioctl query control failed: Invalid argument
============================================================
Opening video decoder: [raw] RAW Uncompressed Video
Movie-Aspect is undefined - no prescaling applied.
VO: [vdpau] 640x480 => 640x480 Planar YV12
Selected video codec: [rawyv12] vfm: raw (RAW YV12)
============================================================
Audio: no sound
Starting playback...

[/console]
или
[console]$ LD_PRELOAD=/usr/lib64/libv4l/v4l1convert.so mplayer tv://
MPlayer SVN-r37150-4.8.3 (C) 2000-2014 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing tv://.
TV file format detected.
Selected driver: v4l2
name: Video 4 Linux 2 input
author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
comment: first try, more to come ;-)
v4l2: your device driver does not support VIDIOC_G_STD ioctl, VIDIOC_G_PARM was used instead.
Selected device: USB Camera (093a:2620)
Capabilities: video capture read/write streaming
supported norms:
inputs: 0 = gspca_pac7302;
Current input: 0
Current format: RGB24
tv.c: norm_from_string(pal): Bogus norm parameter, setting default.
v4l2: ioctl enum norm failed: Inappropriate ioctl for device
Error: Cannot set norm!
Selected input hasn't got a tuner!
v4l2: ioctl set mute failed: Invalid argument
v4l2: ioctl query control failed: Invalid argument
=============================================================
Opening video decoder: [raw] RAW Uncompressed Video
Movie-Aspect is undefined - no prescaling applied.
VO: [vdpau] 640x480 => 640x480 Planar YV12
Selected video codec: [rawyv12] vfm: raw (RAW YV12)
=============================================================
Audio: no sound
Starting playback...
......
[/console]
То есть - камера с LD_PRELOAD подхватывается, в mplayer. Это диспозиция. А вот позиция печальна - skype камеру, как девайс видит, но показывает с неё только черный квадрат Малевича. Независимо от наличия или отсутствия столь эффективных LD_PRELOAD....

Вопрос, как всегда, не прост - что можно еще сделать кроме как камеру выкинуть в виндопомойку?

Ну и в догонку - в винде камера показывает очень даже неплохую картинку. А в Linux... Смотреть тошно...

02.12.2014 12:47 #403586
Cruiser78 написал:
А в Linux... Смотреть тошно...

Так смотреть тошно или вообще нифига?
А в скайпе - "настройки" - "видеоусторойства" - что?

02.12.2014 14:17 #403605
mvt написал:
[quote=Cruiser78] А в Linux... Смотреть тошно...

Так смотреть тошно или вообще нифига?
А в скайпе - "настройки" - "видеоусторойства" - что?[/quote]

По первому вопросу - именно тошно. Во первых - крупное зерно, во вторых - цвета такие, будто кодируется даже не 8-мью битами, а 4-мя (ну или 8-мью против 16). Так что - именно тошно, картинка есть, но смотреть в неё нет никакого желания.

А в скайпе - в этих самых настройках - девайс определен верно (как сам девайс, по коду, так и драйвер /dev/video0), но в превьюшке черный квадрат Малевича.

02.12.2014 14:23 #403607
Cruiser78 написал:
[quote=mvt][quote=Cruiser78] А в Linux... Смотреть тошно...

Так смотреть тошно или вообще нифига?
А в скайпе - "настройки" - "видеоусторойства" - что?[/quote]

По первому вопросу - именно тошно. Во первых - крупное зерно, во вторых - цвета такие, будто кодируется даже не 8-мью битами, а 4-мя (ну или 8-мью против 16). Так что - именно тошно, картинка есть, но смотреть в неё нет никакого желания.

А в скайпе - в этих самых настройках - девайс определен верно (как сам девайс, по коду, так и драйвер /dev/video0), но в превьюшке черный квадрат Малевича.[/quote]
Может камера определена не точно (драйвер "по умолчанию", как самый простой?) Туда и копать. У меня эта фигня работает, где в настройках это поправить? Дам скрины всех страничек настройки.

02.12.2014 15:05 · отредактировано #403612
mvt написал:
Может камера определена не точно (драйвер "по умолчанию", как самый простой?) Туда и копать. У меня эта фигня работает, где в настройках это поправить? Дам скрины всех страничек настройки.

Не знаю, не знаю... Камера определяется в lsusb как 093a:2620 Pixart Imaging, Inc. По этому коду попадаем через гугль на сайт: http://cateee.net/lkddb/web-lkddb/USB_GSPCA_PAC7311.html

То есть, вроде, имеем девайс на чипсете PAC7311. А вот
[console]# lsmod | grep videodev
videodev 147660 2 gspca_main,gspca_pac7302
media 20846 1 videodev[/console]
дает нам чуть иную картину. При этом - я совершенно не знаю, что есть gspca_pac7302... Вроде как должен быть (исходя из изложенного) gspca_pac7311, но тогда где его взять?
Поиски решения вывели на сайт http://karuppuswamy.com/wordpress/2009/03/01/howto-gear-head-web-cam-093a2620-in-linux/ Перекомпилируй, мол, ядро с нужным драйвером... Но это же неправильно....

Это первое. Второе - по поводу LD_PRELOAD. У меня система 64х-разрядная. Скайп - традиционно 32-х битный. Так вот, если я делаю LD_PRELOAD на 32-х битную библиотеку, то имею ошибку загрузки библиотеки, пишет система, что не могут оно быть preloaded. С 64-х грузится нормально, без сообщений об ошибках, но не показывает ничего.

Основной вопрос - как сделать нормальный 32-хбитный LD_PRELOAD перед 32-хбитным скайпом. В году так 2011 в федорских конференциях такой вопрос поднимался, но ответа так и не последовало...

02.12.2014 15:26 · отредактировано #403617

так есть же модуль, по крайней мере в последнем дистрибутивном ядре:

text
# ls -l /lib/modules/3.17.3-200.fc20.x86_64/kernel/drivers/media/usb/gspca/gspca_pac7311.ko 
-rw-r--r--. 1 root root 15543 ноя 14 23:14 /lib/modules/3.17.3-200.fc20.x86_64/kernel/drivers/media/usb/gspca/gspca_pac7311.ko
# rpm -qf /lib/modules/3.17.3-200.fc20.x86_64/kernel/drivers/media/usb/gspca/gspca_pac7311.ko
kernel-3.17.3-200.fc20.x86_64
02.12.2014 15:43 #403623
s.xbatob написал:
так есть же модуль, по крайней мере в последнем дистрибутивном ядре:
text
# ls -l /lib/modules/3.17.3-200.fc20.x86_64/kernel/drivers/media/usb/gspca/gspca_pac7311.ko 
-rw-r--r--. 1 root root 15543 ноя 14 23:14 /lib/modules/3.17.3-200.fc20.x86_64/kernel/drivers/media/usb/gspca/gspca_pac7311.ko
# rpm -qf /lib/modules/3.17.3-200.fc20.x86_64/kernel/drivers/media/usb/gspca/gspca_pac7311.ko
kernel-3.17.3-200.fc20.x86_64

Так знаю что есть (у меня, правда, ядро по ряду причин 3.16.200, на 3.17 перейти пока не могу, etercifs еить его не спешит обновления делать):
[console]# cat /boot/config* | grep 7311
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_PAC7311=m
[/console]
так вот, как его поцепить то... Цепляется PAC7302, с несколько меньшим номером.

02.12.2014 15:55 #403624

Скайпу нужно дофига чего -compat32. А модуль этот, видимо, не знает толком чип видеокамеры, отсюда и проблемы. Так что да, соберите к ядру модуль с драйвером этой камеры, или пошаманьте с опциями текущего.

02.12.2014 16:29 #403629
yars написал:
Скайпу нужно дофига чего -compat32. А модуль этот, видимо, не знает толком чип видеокамеры, отсюда и проблемы. Так что да, соберите к ядру модуль с драйвером этой камеры, или пошаманьте с опциями текущего.

Шаманю. По дефолту установлен был модуль pac7302. Добавляем к нему модуль 7311 (modprobe). Видим в mplayer вместо поганой картинки - зеленый экран. Нехорошо. Удаляем модуль 7302. И что мы видим? Если запускаем mplayer без LD_PRELOAD'а то ничего. но стоит запуститься с прелоадом, то картинка вновь возникает. Равно как возникает в системе и модуль pac7302. И, более того, mplayer честно пишет, что читает именно из него... Точнее даже 7302 возникает как чертик из табакерки, стоит только USB-шнурок переткнуть. Если сделать rmmod 7302, то пропадает /dev/vodeo0 и все программы пишут, что девайс не найден. перетыкаем шнурок, 7302 опять в системе, работа идет через него. Но - при наличии 7311 нестабильно. Может быть и зеленый экран. Если 7311 удалим, то зеленого экрана нет. mplayer показывает картинку. Вот такие вот результаты шаманства.

естественно, что на skype это никак не отражается.

02.12.2014 16:34 #403632
Cruiser78 написал:
так вот, как его поцепить то... Цепляется PAC7302, с несколько меньшим номером.

Это надо правило udev добавлять. Тут я пасс.

02.12.2014 16:34 #403633
yars написал:
Скайпу нужно дофига чего -compat32. А модуль этот, видимо, не знает толком чип видеокамеры, отсюда и проблемы. Так что да, соберите к ядру модуль с драйвером этой камеры, или пошаманьте с опциями текущего.

Ну, я скайп ставлю из стандартных федориных репов, так что это много чего compat'ов приезжает из федориных репов. Я так думаю... Так что проблема не в этом. Но вот почему по LD_PRELOAD не грузится 32-хбитная библиотека - не знаю.

02.12.2014 16:39 #403636
s.xbatob написал:
[quote=Cruiser78]так вот, как его поцепить то... Цепляется PAC7302, с несколько меньшим номером.

Это надо правило udev добавлять. Тут я пасс.[/quote]
я бы исправил, так как такую мысль тоже думал. Но для исправления мне нужен образец, что именно надо править (ну, заменить две цифры я бы сумел в конфиге). А образца нет. И вот что там надо вписать - не слишком понимаю. Ну, указать id_vendors, id_product я пойму как, могу даже владельца и группу назначить, но вот дальше то как пришаманить...

02.12.2014 18:19 #403655
s.xbatob написал:

Это надо правило udev добавлять. Тут я пасс.

Обычно что-то вроде

text
ACTION=="add", SUBSYSTEM=="usb", ENV{idVendor}=="abcd", ENV{idProduct}=="cdef", RUN+="/sbin/modprobe whatewer"

Помимо возможностей udev, ядро само способно загружать модули, если у модуля есть modalias для данного устройства (или серии устройств).
P.S. 7311 можно внести в черный список:

text
# echo "blacklist gspca_pac7311" >> /etc/modprobe.d/gsca_pac7311.conf

Черный список начнет действовать после перезагрузки.

03.12.2014 10:04 #403723
yars написал:
Черный список начнет действовать после перезагрузки.

Ну, небольшой доклад о результатах.
1. После внесения нужного правила в udev имеем после подключения камеры
[console]# lsmod | grep video
videodev 147660 2 gspca_main,gspca_pac7302,gspca_pac7311
media 20846 1 videodev
[/console]
Но... тот же mplayer упорно продолжает работать с модулем gspca_pac7302 (о чем честно сообщает). Скайп показывает черный квадрат.

Шаг номер 2. Заносим gspca_pac7302 в blacklist. Перегружаемся. Видим, что удав сработал:
[console]# lsmod | grep video
videodev 147660 2 gspca_main,gspca_pac7311
media 20846 1 videodev
[/console]
Вроде получили искомый результат, но нет девайса /dev/video0 (то есть вообще нет, с любой цифрой) и ни cheese, ни mplayer работать с камерой не могут. По причине отсутствия девайса. То есть - что-то кем-то недоделано. Нужна еще одна подсказка.

03.12.2014 12:02 #403747

Нужно создать ноду устройства. Что в dmesg?

03.12.2014 14:37 #403794

похоже, модуль вашу камеру не опознаёт как "свою", поэтому и устройство не появляется. Надо действительно посмотреть kernel log

05.12.2014 17:23 #404107
yars написал:
Нужно создать ноду устройства. Что в dmesg?

Итак, снова добрался до девайса.
Если мы подключаем камеру без 7311-драйвера, то имеем следующий выхлоп от dmesg:
[console][ 334.974971] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 335.062165] usb 2-1.2: New USB device found, idVendor=093a, idProduct=2620
[ 335.062170] usb 2-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 335.091510] gspca_main: gspca_pac7302-2.14.0 probing 093a:2620
[ 335.092287] input: gspca_pac7302 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/input/input18
[ 335.092425] usbcore: registered new interface driver gspca_pac7302
[/console]
камера подхватывается и начинает работать с драйвером 7302. Изображение - как в мутном, тригоданемытом, аквариуме.
Если настраиваем работу с, вроде как рекомендуемым, драйвером 7311 и блокировкой загрузки 7302, то:
[console][ 145.998027] usb 2-1.2: new full-speed USB device number 6 using ehci-pci
[ 146.084923] usb 2-1.2: New USB device found, idVendor=093a, idProduct=2620
[ 146.084928] usb 2-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 146.101132] media: Linux media interface: v0.10
[ 146.108873] Linux video capture interface: v2.00
[ 146.111785] gspca_main: v2.14.0 registered
[ 146.113976] usbcore: registered new interface driver pac7311
[/console]

Как то так...

Войдите или зарегистрируйтесь, чтобы ответить.