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() 调用为每个摄像头设置此参数。

所有参数都是可选的。