Linux 视频捕获无法使用 cam3 或 cam1 中的图像捕获失败

Linux 视频捕获无法使用 cam3 或 cam1 中的图像捕获失败

我正在尝试对此进行一些解决方案或运行时修复。

问题:连接第三个摄像头后,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,并且我的系统可以正常工作。虽然这可能对拥有多个相机的人有帮助

相关内容