7.13. 飞利浦网络摄像头 (pwc 驱动)¶
本文件包含飞利浦及 OEM 网络摄像头的一些附加信息。电子邮件: webcam@smcc.demon.nl 最后更新: 2004-01-19 网站: http://www.smcc.demon.nl/webcam/
截至目前,支持以下摄像头:
Philips PCA645
Philips PCA646
Philips PCVC675
Philips PCVC680
Philips PCVC690
Philips PCVC720/40
Philips PCVC730
Philips PCVC740
Philips PCVC750
Askey VC010
Creative Labs Webcam 5
Creative Labs Webcam Pro Ex
Logitech QuickCam 3000 Pro
Logitech QuickCam 4000 Pro
Logitech QuickCam Notebook Pro
Logitech QuickCam Zoom
Logitech QuickCam Orbit
Logitech QuickCam Sphere
Samsung MPC-C10
Samsung MPC-C30
Sotec Afina Eye
AME CU-001
Visionite VCS-UM100
Visionite VCS-UC300
飞利浦驱动的主页位于上述地址。它包含大量额外信息、一个常见问题解答 (FAQ) 和二进制插件 'PWCX'。此插件包含解压缩例程,可让您使用更高的图像尺寸和帧率;此外,网络摄像头在 USB 总线上占用的带宽更少(如果您想同时运行多于 1 个摄像头,这会很有用)。这些例程受 NDA 约束,因此不能以源代码形式分发;但是,其使用是完全可选的。
您可以将此代码构建到内核中,或作为一个模块。我推荐后者,因为它使故障排除更容易。内置麦克风通过 USB 音频类支持。
加载模块时,您可以为摄像头设置一些默认设置;某些程序依赖特定的图像尺寸或格式,并且不知道如何在驱动中正确设置。选项如下:
- 尺寸 (size)
可以是 'sqcif', 'qsif', 'qcif', 'sif', 'cif' 或 'vga' 之一,分别对应图像尺寸 128x96, 160x120, 176x144, 320x240, 352x288 和 640x480 (当然,仅适用于支持这些分辨率的摄像头)。
- 帧率 (fps)
指定所需的帧率。是一个整数,范围在 4-30 之间。
- fbufs
此参数指定用于存储来自摄像头帧的内部缓冲区数量。如果从摄像头读取图像的进程有点慢或暂时繁忙,这将有所帮助。但是,在慢速机器上它只会引入延迟,因此请谨慎选择。默认值为 3,这是合理的。您可以将其设置为 2 到 5 之间。
- mbufs
这是一个介于 1 和 10 之间的整数。它将告诉模块为 mmap()、VIDIOCCGMBUF、VIDIOCMCAPTURE 及相关函数预留的缓冲区数量。默认值为 2,对于大多数应用程序(双缓冲)来说已足够。
如果您在使用 mmap() 的工具抓取图像时遇到大量“Dumping frame...”消息,您可能需要增加它。然而,它并不会真正缓冲图像,它只是在您的程序落后时给您更多的余地。但是您需要一个多线程或分叉的程序才能真正利用这些缓冲区。
绝对最大值是 10,但不要设置过高!每个缓冲区占用 460 KB 内存,因此除非您有很多内存,否则将此值设置为大于 4 绝对是浪费。此内存仅在 open() 期间分配,因此当摄像头不使用时不会浪费任何东西。
- 节能 (power_save)
当启用节能 (设置为 1) 时,模块会尝试在 close() 时关闭摄像头,并在 open() 时重新激活。这将节省电量并关闭 LED。但是并非所有摄像头都支持此功能 (645 和 646 完全没有节能功能),有些型号也无法工作 (它们会关闭,但永不唤醒)。请将其视为实验性功能。默认情况下此选项禁用。
- 压缩 (compression) (仅与插件配合使用有用)
使用此选项,您可以控制摄像头用于通过 USB 总线传输图像的压缩系数。您可以将参数设置在 0 到 3 之间
0 = prefer uncompressed images; if the requested mode is not available in an uncompressed format, the driver will silently switch to low compression. 1 = low compression. 2 = medium compression. 3 = high compression.
高压缩当然会占用较少带宽,但它也可能引入一些不必要的伪影。默认值为 2,中等压缩。请参阅网站上的常见问题解答,了解哪些模式需要压缩。
压缩参数不适用于 645 和 646 摄像头以及源自这些型号的 OEM 模型(只有少数几个)。大多数摄像头都支持此参数。
- 指示灯 (leds)
此设置需要 2 个整数,它们定义 LED 的亮/灭时间(以毫秒为单位)。您可以利用此功能让 LED 在摄像头使用时闪烁,这是其中一个有趣的应用。
leds=500,500
这将使 LED 每秒闪烁一次。但是使用
leds=0,0
LED 从不亮起,使其适用于静默监控。
默认情况下,摄像头在使用时 LED 稳定亮起,并在摄像头不再使用时关闭。
此参数仅适用于 ToUCam 系列摄像头 (720、730、740、750) 和 OEM 产品。对于其他摄像头,此命令会被静默忽略,并且无法控制 LED。
最后:此参数直到您第一次打开摄像头设备时才会生效。在此之前,LED 保持亮起。
- 设备提示 (dev_hint)
USB 设备的一个长期存在的问题是它们的动态特性:您永远不知道摄像头会被分配到哪个设备;这取决于模块加载顺序、集线器配置、设备插入顺序以及月相(即它可能是随机的)。使用此选项,您可以给驱动程序一个提示,告诉它应该为特定摄像头使用哪个视频设备节点 (/dev/videoX)。如果您有两台相同型号的摄像头,这也很方便。
摄像头通过其类型(来自摄像头型号的数字,如 PCA645、PCVC750VC 等)以及可选的序列号(可在 /sys/kernel/debug/usb/devices 中查看)指定。提示由以下格式的字符串组成:
[type[.serialnumber]:]node
方括号表示类型和序列号都是可选的,但如果没有类型,则不能指定序列号(这会毫无意义)。序列号与类型之间用“.”分隔;节点号与类型之间用“:”分隔。
这个有些神秘的语法最好通过几个例子来解释:
dev_hint=3,5 The first detected cam gets assigned /dev/video3, the second /dev/video5. Any other cameras will get the first free available slot (see below). dev_hint=645:1,680:2 The PCA645 camera will get /dev/video1, and a PCVC680 /dev/video2. dev_hint=645.0123:3,645.4567:0 The PCA645 camera with serialnumber 0123 goes to /dev/video3, the same camera model with the 4567 serial gets /dev/video0. dev_hint=750:1,4,5,6 The PCVC750 camera will get /dev/video1, the next 3 Philips cams will use /dev/video4 through /dev/video6.
一些值得了解的要点
序列号区分大小写,必须完整写入,包括前导零(它被视为字符串)。
如果设备节点已被占用,注册将失败,并且网络摄像头将不可用。
您最多可以有 64 个视频设备;如果您想分散编号,请确保在 /dev 中创建足够的设备节点。/dev/video9 之后是 /dev/video10(而不是 /dev/videoA)。
如果摄像头与任何 dev_hint 不匹配,它将简单地被分配到第一个可用的设备节点,就像以前一样。
- 追踪 (trace)
为了更好地检测问题,现在可以开启模块进行的一些调用的“追踪”;它会在内核日志的调试级别记录所有项目。
追踪变量是一个位掩码;每个位代表一个特定的功能。如果您想追踪某些内容,请查找下表中对应的位值,将这些值相加,然后将结果提供给追踪变量。
值
值
描述
默认
(十进制)
(十六进制)
1
0x1
模块初始化;这将在加载和卸载模块时记录消息
开
2
0x2
probe() 和 disconnect() 追踪
开
4
0x4
追踪 open() 和 close() 调用
关
8
0x8
read()、mmap() 和相关的 ioctl() 调用
关
16
0x10
缓冲区的内存分配等。
关
32
0x20
显示下溢、上溢和 Dumping frame 消息
开
64
0x40
显示视口和图像尺寸
关
128
0x80
PWCX 调试
关
例如,要追踪 open() 和 read() 函数,将 8 + 4 = 12 相加,因此您可以在 insmod 或 modprobe 期间提供 trace=12。如果您想关闭初始化和探测追踪,请设置 trace=0。trace 的默认值为 35 (0x23)。
示例
# modprobe pwc size=cif fps=15 power_save=1
fbufs、mbufs 和 trace 参数是全局的,适用于所有连接的摄像头。每个摄像头都有自己的一组缓冲区。
size 和 fps 仅在您 open() 设备时指定默认值;这是为了适应某些不设置尺寸的工具。您可以在 open() 之后使用 Video4Linux ioctl() 调用更改这些设置。默认的默认值是 QCIF 尺寸,10 fps。
压缩参数是半全局的;它设置所有摄像头的初始压缩偏好,但此参数可以通过 VIDIOCPWCSCQUAL ioctl() 调用为每个摄像头设置。
所有参数都是可选的。