1 (02.12.2014 11:59:03 отредактировано Cruiser78)

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

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

 Консоль:
$ lsusb
....
Bus 002 Device 003: ID 093a:2620 Pixart Imaging, Inc.

Соответственно и в 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:

 Консоль:
$ 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...


или
 Консоль:
$ 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...
......


То есть - камера с LD_PRELOAD подхватывается, в mplayer. Это диспозиция. А вот позиция печальна - skype камеру, как девайс видит, но показывает с неё только черный квадрат Малевича. Независимо от наличия или отсутствия столь эффективных LD_PRELOAD....

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

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

2

Cruiser78 пишет:

А в Linux... Смотреть тошно...

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

3

mvt пишет:
Cruiser78 пишет:

А в Linux... Смотреть тошно...

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

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

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

4

Cruiser78 пишет:
mvt пишет:
Cruiser78 пишет:

А в Linux... Смотреть тошно...

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

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

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

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

5 (02.12.2014 15:18:03 отредактировано Cruiser78)

mvt пишет:

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

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

То есть, вроде, имеем девайс на чипсете PAC7311. А вот

 Консоль:
# lsmod | grep videodev
videodev              147660  2 gspca_main,gspca_pac7302
media                  20846  1 videodev

дает нам чуть иную картину. При этом - я совершенно не знаю, что есть gspca_pac7302... Вроде как должен быть (исходя из изложенного) gspca_pac7311, но тогда где его взять?
Поиски решения вывели на сайт http://karuppuswamy.com/wordpress/2009/ … -in-linux/ Перекомпилируй, мол, ядро с нужным драйвером... Но это же неправильно....

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

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

6 (02.12.2014 15:27:35 отредактировано s.xbatob)

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

# 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

7

s.xbatob пишет:

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

# 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 еить его не спешит обновления делать):

 Консоль:
# 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

так вот, как его поцепить то... Цепляется PAC7302, с несколько меньшим номером.

8

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

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

9

yars пишет:

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

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

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

10

Cruiser78 пишет:

так вот, как его поцепить то... Цепляется PAC7302, с несколько меньшим номером.

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

11

yars пишет:

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

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

12

s.xbatob пишет:
Cruiser78 пишет:

так вот, как его поцепить то... Цепляется PAC7302, с несколько меньшим номером.

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

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

13

s.xbatob пишет:

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

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

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

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

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

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

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

14

yars пишет:

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

Ну, небольшой доклад о результатах.
1. После внесения нужного правила в udev имеем после подключения камеры

 Консоль:
# lsmod | grep video
videodev              147660  2 gspca_main,gspca_pac7302,gspca_pac7311
media                  20846  1 videodev

Но... тот же mplayer упорно продолжает работать с модулем gspca_pac7302 (о чем честно сообщает). Скайп показывает черный квадрат.

Шаг номер 2. Заносим gspca_pac7302 в blacklist. Перегружаемся. Видим, что удав сработал:

 Консоль:
# lsmod | grep video
videodev              147660  2 gspca_main,gspca_pac7311
media                  20846  1 videodev

Вроде получили искомый результат, но нет девайса /dev/video0 (то есть вообще нет, с любой цифрой) и ни cheese, ни mplayer работать с камерой не могут. По причине отсутствия девайса. То есть - что-то кем-то недоделано. Нужна еще одна подсказка.

15

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

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

16

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

17

yars пишет:

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

Итак, снова добрался до девайса.
Если мы подключаем камеру без 7311-драйвера, то имеем следующий выхлоп от dmesg:

 Консоль:
[  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

камера подхватывается и начинает работать с драйвером 7302. Изображение - как в мутном, тригоданемытом, аквариуме.
Если настраиваем работу с, вроде как рекомендуемым, драйвером 7311 и блокировкой загрузки 7302, то:
 Консоль:
[  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

Как то так...