[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1025735: Bug 1025735



From the logs, it seems that you're using this camera on an old
hardware. I remember lots of troubles related to old USB 2.0
bridges.

See, USB 2.0 spec supports two types of velocity:

	- full-speed (the same as USB 1.1 speeds;
	- high-speed (the one which comes with USB 2.0)

In thesis, USB 2.0 is meant to allow up to 480MBps, but this is not
what happens in practice, specially for cameras. Cameras typically
use ISOC endpoints, with works by allocating a certain number of
frames or microframes. This is limited, according to the spec, to:

	- max of 90% of frames can be allocated on full speed
	  (e. g. being used either ISOC or interrupt endpoints).
	- max of 80% for for microframe periodic transfers
	  (high speed).

When there a mix of USB 1.1 and USB2.0 at the same bus, those numbers may
drop radically, as USB 1.1 devices won't work at high-speed. So, the USB
core may fail to be able to allocate the required number of frames or
microframes as required by the device to work on its full resolution.

I bet this is the case, from your lsusb:

	** USB devices:
	Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
	Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
	Bus 001 Device 005: ID 047f:4315 Plantronics, Inc. Poly Blackwire 8225 Series
	Bus 001 Device 004: ID 046d:08d7 Logitech, Inc. QuickCam Communicate STX
	Bus 001 Device 003: ID 13ba:0018 PCPlay Barcode PCP-BCG4209
	Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
	Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


See at bus 1, where the camera is connected, you also have a barcode
reader, which is very likely an USB 1.1 device (as most input devices
are).

Ah, there are also some USB 2.0 bridges that are internally 
connected to USB 1.1, and sometimes end having similar troubles.

Worth mentioning that "USB 2.0 compatible" announcements on hardware
doesn't necessarily means that they support high-speed, as full-speed
is also part of USB 2.0 specs.

In any case, this has nothing to do with the V4L driver, but, instead,
to how the USB brigde and USB core/driver detects each device. You can
have a better view about how the USB devices are seen with `lsub -t`:

	$ sudo lsusb -t
	/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 10000M
	/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
	    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
	        |__ Port 3: Dev 9, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
	        |__ Port 1: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
	            |__ Port 1: Dev 8, If 0, Class=, Driver=, 12M
	        |__ Port 2: Dev 7, If 0, Class=Hub, Driver=hub/4p, 480M
	            |__ Port 1: Dev 10, If 0, Class=Mass Storage, Driver=usb-storage, 480M
	            |__ Port 2: Dev 11, If 0, Class=Mass Storage, Driver=usb-storage, 480M
	    |__ Port 5: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
	    |__ Port 5: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
	    |__ Port 5: Dev 3, If 2, Class=Human Interface Device, Driver=usbhid, 12M
	    |__ Port 6: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M
	    |__ Port 6: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M
	    |__ Port 10: Dev 6, If 0, Class=Wireless, Driver=usbfs, 12M
	    |__ Port 10: Dev 6, If 1, Class=Wireless, Driver=usbfs, 12M

On the above example, the camera is at Bus 1 port 6, which is set to use
high-speed ("480M"). Other ports at the same bus have devices at 
high-speed ("12M"). Yet, this specific USB bridge handles each port
in separate, so the camera (using uvcvideo) can allocate all ISOC microframes
it needs.

Older USB bridges (found on machines similar to the one pointed on your
BZ) don't allow that: if one device at the bus is at full-speed, all
devices at the same bus have their speed reduced to full-speed, as
otherwise the full-speed devices wouldn't work.

Switching the camera connector to different USB ports may help. 

When there is the need of connecting input devices (they all are usually
full-speed only), you can also try using modern USB hubs, as some are
capable of isolating full-speed devices on a separate internal bus, talking
with the PC port in high-speed.


Reply to: