我买了一个新的 USB 网络摄像头,将其插上。
ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 Nov 21 10:57 /dev/video0
crw-rw----+ 1 root video 81, 1 Nov 21 10:57 /dev/video1
为什么只有一个 USB 摄像头显示两个 Video4Linux 设备?
答案1
很快
您的应用程序应该使用/dev/video0
,用于通常的东西,因为它/dev/video1
为您提供了元数据图像,供算法使用,以提高图像质量。
更深入一点
查看该Device caps
部分,因为这两个设备是不同的:
$ v4l2-ctl -D -d /dev/video0
...
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
$ v4l2-ctl -D -d /dev/video1
...
Device Caps : 0x04A00000
Streaming
Extended Pix Format
设备容量记录如下:
* @device_caps: capabilities accessed via this particular device (node)
这些的不同之处在于:
#define V4L2_CAP_VIDEO_CAPTURE 0x00000001 # bit 1
#define V4L2_CAP_META_CAPTURE 0x00800000 # bit 23
应用程序需要检查这一点,以便知道它将接收哪种类型的缓冲区,因为这应该由流式 ioctl 使用:VIDIOC_REQBUFS、VIDIOC_QBUF、VIDIOC_DQBUF
阅读更多关于此讨论的内容https://bugzilla.kernel.org/show_bug.cgi?id=199575