7.12. Philips 网络摄像头 (pwc 驱动程序)¶
此文件包含有关 Philips 和 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
Philips 驱动程序的主要网页位于上述地址。它包含许多额外信息、常见问题解答和二进制插件“PWCX”。此插件包含解压缩例程,使您可以使用更高的图像尺寸和帧速率;此外,网络摄像头在 USB 总线上使用的带宽更少(如果您想同时运行多个摄像头,这很方便)。这些例程受 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 的 RAM,因此,除非您有很多内存,否则将其设置为大于 4 的值绝对是浪费。此内存仅在 open() 期间分配,因此当摄像头不使用时不会浪费任何东西。
- power_save
当启用 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。
compression 参数是半全局的;它为所有摄像头设置初始压缩首选项,但是可以使用 VIDIOCPWCSCQUAL ioctl() 调用为每个摄像头设置此参数。
所有参数都是可选的。