| 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. | 
 |  |