|  | 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 therefor 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 paramter 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 momentarely 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 /proc/bus/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 (this does not apply | 
|  | to devfs). 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() fuctions, 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. | 
|  |  |