I’m trying to set up my machine, and I’ve discovered that my Logitech Bio webcam is showing junk. I’ve tried switching the USB cable and the USB port, but there’s no difference.
This works in Windows, so I know the hardware and cabling are good.
I’m trying to set up my machine, and I’ve discovered that my Logitech Bio webcam is showing junk. I’ve tried switching the USB cable and the USB port, but there’s no difference.
This works in Windows, so I know the hardware and cabling are good.
This appears to be a bug in the kernel, likely having to do with USB traffic prioritization for my particular AMD motherboard.
Under Windows, I was noticing video corruption when connected with the vendor cable. The vendor’s cable is a USB-A (3.0) to USB-C model, and Windows would occasionally corrupt the video. The workaround there was to switch to a USB-2.0 stream by swapping out the cable.
For whatever reason, this doesn’t seem to work under Linux. It’s likely not properly prioritizing video packets, and so they get dropped.
However, switching back to the vendor cable and running it via USB-3.0 seems to solve the issue.
As you saw your conclusion is not working. Windows is a separate os from Linux. Drivers working on Windows not always work in Linux. Many times win drivers are closed source and have to be reverse engineered.
In your case, the power management might not working correctly with Linux and USB2 while USB3 works. It is just a supposition of mine. Just wanted to point out that Windows = Linux is “not true” how they manage hardware etc.
I redefined “garbage image” with “striped image” and changed it in the title. Just to describe the issue a bit better
I imagine it’s more an issue of isochronous scheduling. The video pattern looks like it gets some data transferred, but then it underruns. I checked and the camera was the only thing on that USB bus, but it still couldn’t keep up.
Perhaps the Windows driver does something funny and overwrites the descriptor. I see uvcvideo has UVC_QUIRK_FIX_BANDWIDTH
which might have helped, but I wasn’t able to use that because I suspect pipewire had the uvc module open so I couldn’t remove it to change the quirks argument. In looking now, I notice /sys/module/uvcvideo/parameters/quirks exists and has the value 4294967295
which is 0xffffffff, so I’m not sure if that would have changed things in the end.