| .. SPDX-License-Identifier: GPL-2.0 | |
| Philips webcams (pwc driver) | |
| ============================ | |
| This file contains some additional information for the Philips and OEM webcams. | |
| E-mail: webcam@smcc.demon.nl Last updated: 2004-01-19 | |
| Site: http://www.smcc.demon.nl/webcam/ | |
| As of this moment, the following cameras are supported: | |
| * 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 | |
| The main webpage for the Philips driver is at the address above. It contains | |
| a lot of extra information, a FAQ, and the binary plugin 'PWCX'. This plugin | |
| contains decompression routines that allow you to use higher image sizes and | |
| framerates; in addition the webcam uses less bandwidth on the USB bus (handy | |
| if you want to run more than 1 camera simultaneously). These routines fall | |
| under a NDA, and may therefore not be distributed as source; however, its use | |
| is completely optional. | |
| You can build this code either into your kernel, or as a module. I recommend | |
| the latter, since it makes troubleshooting a lot easier. The built-in | |
| microphone is supported through the USB Audio class. | |
| When you load the module you can set some default settings for the | |
| camera; some programs depend on a particular image-size or -format and | |
| don't know how to set it properly in the driver. The options are: | |
| size | |
| Can be one of 'sqcif', 'qsif', 'qcif', 'sif', 'cif' or | |
| 'vga', for an image size of resp. 128x96, 160x120, 176x144, | |
| 320x240, 352x288 and 640x480 (of course, only for those cameras that | |
| support these resolutions). | |
| fps | |
| Specifies the desired framerate. Is an integer in the range of 4-30. | |
| fbufs | |
| This parameter specifies the number of internal buffers to use for storing | |
| frames from the cam. This will help if the process that reads images from | |
| the cam is a bit slow or momentarily busy. However, on slow machines it | |
| only introduces lag, so choose carefully. The default is 3, which is | |
| reasonable. You can set it between 2 and 5. | |
| mbufs | |
| This is an integer between 1 and 10. It will tell the module the number of | |
| buffers to reserve for mmap(), VIDIOCCGMBUF, VIDIOCMCAPTURE and friends. | |
| The default is 2, which is adequate for most applications (double | |
| buffering). | |
| Should you experience a lot of 'Dumping frame...' messages during | |
| grabbing with a tool that uses mmap(), you might want to increase if. | |
| However, it doesn't really buffer images, it just gives you a bit more | |
| slack when your program is behind. But you need a multi-threaded or | |
| forked program to really take advantage of these buffers. | |
| The absolute maximum is 10, but don't set it too high! Every buffer takes | |
| up 460 KB of RAM, so unless you have a lot of memory setting this to | |
| something more than 4 is an absolute waste. This memory is only | |
| allocated during open(), so nothing is wasted when the camera is not in | |
| use. | |
| power_save | |
| When power_save is enabled (set to 1), the module will try to shut down | |
| the cam on close() and re-activate on open(). This will save power and | |
| turn off the LED. Not all cameras support this though (the 645 and 646 | |
| don't have power saving at all), and some models don't work either (they | |
| will shut down, but never wake up). Consider this experimental. By | |
| default this option is disabled. | |
| compression (only useful with the plugin) | |
| With this option you can control the compression factor that the camera | |
| uses to squeeze the image through the USB bus. You can set the | |
| parameter between 0 and 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. | |
| High compression takes less bandwidth of course, but it could also | |
| introduce some unwanted artefacts. The default is 2, medium compression. | |
| See the FAQ on the website for an overview of which modes require | |
| compression. | |
| The compression parameter does not apply to the 645 and 646 cameras | |
| and OEM models derived from those (only a few). Most cams honour this | |
| parameter. | |
| leds | |
| This settings takes 2 integers, that define the on/off time for the LED | |
| (in milliseconds). One of the interesting things that you can do with | |
| this is let the LED blink while the camera is in use. This:: | |
| leds=500,500 | |
| will blink the LED once every second. But with:: | |
| leds=0,0 | |
| the LED never goes on, making it suitable for silent surveillance. | |
| By default the camera's LED is on solid while in use, and turned off | |
| when the camera is not used anymore. | |
| This parameter works only with the ToUCam range of cameras (720, 730, 740, | |
| 750) and OEMs. For other cameras this command is silently ignored, and | |
| the LED cannot be controlled. | |
| Finally: this parameters does not take effect UNTIL the first time you | |
| open the camera device. Until then, the LED remains on. | |
| dev_hint | |
| A long standing problem with USB devices is their dynamic nature: you | |
| never know what device a camera gets assigned; it depends on module load | |
| order, the hub configuration, the order in which devices are plugged in, | |
| and the phase of the moon (i.e. it can be random). With this option you | |
| can give the driver a hint as to what video device node (/dev/videoX) it | |
| should use with a specific camera. This is also handy if you have two | |
| cameras of the same model. | |
| A camera is specified by its type (the number from the camera model, | |
| like PCA645, PCVC750VC, etc) and optionally the serial number (visible | |
| in /sys/kernel/debug/usb/devices). A hint consists of a string with the | |
| following format:: | |
| [type[.serialnumber]:]node | |
| The square brackets mean that both the type and the serialnumber are | |
| optional, but a serialnumber cannot be specified without a type (which | |
| would be rather pointless). The serialnumber is separated from the type | |
| by a '.'; the node number by a ':'. | |
| This somewhat cryptic syntax is best explained by a few examples:: | |
| 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. | |
| Some points worth knowing: | |
| - Serialnumbers are case sensitive and must be written full, including | |
| leading zeroes (it's treated as a string). | |
| - If a device node is already occupied, registration will fail and | |
| the webcam is not available. | |
| - You can have up to 64 video devices; be sure to make enough device | |
| nodes in /dev if you want to spread the numbers. | |
| After /dev/video9 comes /dev/video10 (not /dev/videoA). | |
| - If a camera does not match any dev_hint, it will simply get assigned | |
| the first available device node, just as it used to be. | |
| trace | |
| In order to better detect problems, it is now possible to turn on a | |
| 'trace' of some of the calls the module makes; it logs all items in your | |
| kernel log at debug level. | |
| The trace variable is a bitmask; each bit represents a certain feature. | |
| If you want to trace something, look up the bit value(s) in the table | |
| below, add the values together and supply that to the trace variable. | |
| ====== ======= ================================================ ======= | |
| Value Value Description Default | |
| (dec) (hex) | |
| ====== ======= ================================================ ======= | |
| 1 0x1 Module initialization; this will log messages On | |
| while loading and unloading the module | |
| 2 0x2 probe() and disconnect() traces On | |
| 4 0x4 Trace open() and close() calls Off | |
| 8 0x8 read(), mmap() and associated ioctl() calls Off | |
| 16 0x10 Memory allocation of buffers, etc. Off | |
| 32 0x20 Showing underflow, overflow and Dumping frame On | |
| messages | |
| 64 0x40 Show viewport and image sizes Off | |
| 128 0x80 PWCX debugging Off | |
| ====== ======= ================================================ ======= | |
| For example, to trace the open() & read() functions, sum 8 + 4 = 12, | |
| so you would supply trace=12 during insmod or modprobe. If | |
| you want to turn the initialization and probing tracing off, set trace=0. | |
| The default value for trace is 35 (0x23). | |
| Example:: | |
| # modprobe pwc size=cif fps=15 power_save=1 | |
| The fbufs, mbufs and trace parameters are global and apply to all connected | |
| cameras. Each camera has its own set of buffers. | |
| size and fps only specify defaults when you open() the device; this is to | |
| accommodate some tools that don't set the size. You can change these | |
| settings after open() with the Video4Linux ioctl() calls. The default of | |
| defaults is QCIF size at 10 fps. | |
| The compression parameter is semiglobal; it sets the initial compression | |
| preference for all camera's, but this parameter can be set per camera with | |
| the VIDIOCPWCSCQUAL ioctl() call. | |
| All parameters are optional. | |