我正在尝试对此进行一些解决方案或运行时修复。
问题:连接第三个摄像头后,Linux 视频捕获无法在 cam3 上工作或在 cam1 中捕获图像失败。
历史:最初,我们开发了一个监控系统。该系统由 2 个摄像机组成。
1. Video capture (Using Motion)
2. Image capture(Using V4L)
We added one more camera to the system, which is causing the mess currently.
3. Video capture (Using Motion)
We notice either a video capture or image capture does not work in the system. various forums, suggested for adding quirk=128 in conf, even that idd not work out.
消息:
[399.544408]uvcvideo:找到UVC 1.00设备USB2.0相机(1871:2097)
[399.544429]uvcvideo:通过模块参数强制设备怪异为0x80以进行测试。
[399.544441] uvcvideo:请向 linux-uvc-devel 邮件列表报告所需的怪癖。
[399.547449]输入:USB2.0相机为/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/input/input32
[399.668599]uvcvideo:找到UVC 1.00设备USB2.0相机(1871:0501)
[399.668613] uvcvideo:通过模块参数强制设备怪异为0x80以进行测试。
[399.668618] uvcvideo:请向 linux-uvc-devel 邮件列表报告所需的怪癖。
[399.671360]输入:USB2.0相机为/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.4/1-4.4:1.0/input/input33[399.732317]uvcvideo:找到UVC 1.00 设备 USB2.0 摄像头 (1871:0f01)
[399.732328]uvcvideo:通过模块参数强制设备怪异为0x80以进行测试。
[399.732334] uvcvideo:请向 linux-uvc-devel 邮件列表报告所需的怪癖。
[399.735996]输入:USB2.0相机为/devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0/input/input34
尝试获取摄像机的 V4L2_BUF_TYPE_VIDEO_CAPTURE 信息:列出所有连接的摄像机(YUV 4:2:2 (YUYV))
硬件规格:N2600 Aveo 技术摄像头 3 种型号,带不同 VID:PID
我需要一些指导来解决这个问题。
答案1
发现:
具有 3.16 内核的 N2600 :(带/不带 Quirk 0x80)
每个摄像机的带宽为 328 Mb。在我的例子中,分配的总带宽为 656(对于 2 个摄像头),USB 控制器的最大带宽为 800。因此没有空间可用于我的第三个摄像头。
N2600 内核为 2.6.32
同样,我的第三个摄像头无法工作,每个摄像头的内存分配为 320 Mb
采用 2.6.32 内核和 Quirk 0x80 的 N2600
将怪异应用到 uvcvideo 时,内存分配从 320 Mb 大幅减少到 128 Mb,并且所有 3 个摄像头均按预期工作。
解决方案:
我不太确定这是一个非常正确的解决方案。不过,我还是要感谢斯图尔特(SwDevRefugee)帮助我解决问题并提供一些解决此问题的建议。
新内核中的 uvc_fixup_video_ctrl() 中有这一行带宽 = max_t(u32, 带宽, 1024);而旧的却不见了。评论并重新编译了我的 UVC 驱动程序,现在使用怪癖0x80内存分配已从 328 Mb 降至 128 Mb,并且我的系统可以正常工作。虽然这可能对拥有多个相机的人有帮助