| 
									
										
										
										
											2006-02-27 00:09:05 -03:00
										 |  |  | $Id: README,v 1.7 2005/08/29 23:39:57 sbertin Exp $ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1. Introduction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	This is a driver for STMicroelectronics's CPiA2 (second generation | 
					
						
							|  |  |  | Colour Processor Interface ASIC) based cameras. This camera outputs an MJPEG | 
					
						
							|  |  |  | stream at up to vga size. It implements the Video4Linux interface as much as | 
					
						
							|  |  |  | possible.  Since the V4L interface does not support compressed formats, only | 
					
						
							|  |  |  | an mjpeg enabled application can be used with the camera. We have modified the | 
					
						
							|  |  |  | gqcam application to view this stream. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	The driver is implemented as two kernel modules. The cpia2 module | 
					
						
							|  |  |  | contains the camera functions and the V4L interface.  The cpia2_usb module | 
					
						
							|  |  |  | contains usb specific functions.  The main reason for this was the size of the | 
					
						
							| 
									
										
										
										
											2012-04-05 17:02:52 -07:00
										 |  |  | module was getting out of hand, so I separated them.  It is not likely that | 
					
						
							| 
									
										
										
										
											2006-02-27 00:09:05 -03:00
										 |  |  | there will be a parallel port version. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FEATURES: | 
					
						
							|  |  |  |    - Supports cameras with the Vision stv6410 (CIF) and stv6500 (VGA) cmos | 
					
						
							|  |  |  |      sensors. I only have the vga sensor, so can't test the other. | 
					
						
							|  |  |  |    - Image formats: VGA, QVGA, CIF, QCIF, and a number of sizes in between. | 
					
						
							|  |  |  |      VGA and QVGA are the native image sizes for the VGA camera. CIF is done | 
					
						
							|  |  |  |      in the coprocessor by scaling QVGA.  All other sizes are done by clipping. | 
					
						
							|  |  |  |    - Palette: YCrCb, compressed with MJPEG. | 
					
						
							|  |  |  |    - Some compression parameters are settable. | 
					
						
							|  |  |  |    - Sensor framerate is adjustable (up to 30 fps CIF, 15 fps VGA). | 
					
						
							|  |  |  |    - Adjust brightness, color, contrast while streaming. | 
					
						
							|  |  |  |    - Flicker control settable for 50 or 60 Hz mains frequency. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2. Making and installing the stv672 driver modules: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Requirements: | 
					
						
							|  |  |  | 	------------- | 
					
						
							|  |  |  | 	This should work with 2.4 (2.4.23 and later) and 2.6 kernels, but has | 
					
						
							|  |  |  | only been tested on 2.6.  Video4Linux must be either compiled into the kernel or | 
					
						
							|  |  |  | available as a module.  Video4Linux2 is automatically detected and made | 
					
						
							|  |  |  | available at compile time. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Compiling: | 
					
						
							|  |  |  | 	---------- | 
					
						
							|  |  |  | 	As root, do a make install.  This will compile and install the modules | 
					
						
							|  |  |  | into the media/video directory in the module tree. For 2.4 kernels, use | 
					
						
							|  |  |  | Makefile_2.4 (aka do make -f Makefile_2.4 install). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Setup: | 
					
						
							|  |  |  | 	------ | 
					
						
							|  |  |  | 	Use 'modprobe cpia2' to load and 'modprobe -r cpia2' to unload. This | 
					
						
							|  |  |  | may be done automatically by your distribution. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3. Driver options | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Option		Description | 
					
						
							|  |  |  | 	------		----------- | 
					
						
							|  |  |  | 	video_nr	video device to register (0=/dev/video0, etc) | 
					
						
							|  |  |  | 			range -1 to 64.  default is -1 (first available) | 
					
						
							|  |  |  | 			If you have more than 1 camera, this MUST be -1. | 
					
						
							|  |  |  | 	buffer_size	Size for each frame buffer in bytes (default 68k) | 
					
						
							|  |  |  | 	num_buffers	Number of frame buffers (1-32, default 3) | 
					
						
							|  |  |  | 	alternate	USB Alternate (2-7, default 7) | 
					
						
							|  |  |  | 	flicker_freq	Frequency for flicker reduction(50 or 60, default 60) | 
					
						
							|  |  |  | 	flicker_mode	0 to disable, or 1 to enable flicker reduction. | 
					
						
							|  |  |  | 			(default 0). This is only effective if the camera | 
					
						
							|  |  |  | 			uses a stv0672 coprocessor. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Setting the options: | 
					
						
							|  |  |  | 	-------------------- | 
					
						
							|  |  |  | 	If you are using modules, edit /etc/modules.conf and add an options | 
					
						
							|  |  |  | line like this: | 
					
						
							|  |  |  | 	options cpia2 num_buffers=3 buffer_size=65535 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	If the driver is compiled into the kernel, at boot time specify them | 
					
						
							|  |  |  | like this: | 
					
						
							| 
									
										
										
										
											2006-02-28 04:40:51 -03:00
										 |  |  | 	cpia2.num_buffers=3 cpia2.buffer_size=65535 | 
					
						
							| 
									
										
										
										
											2006-02-27 00:09:05 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	What buffer size should I use? | 
					
						
							|  |  |  | 	------------------------------ | 
					
						
							|  |  |  | 	The maximum image size depends on the alternate you choose, and the | 
					
						
							|  |  |  | frame rate achieved by the camera.  If the compression engine is able to | 
					
						
							|  |  |  | keep up with the frame rate, the maximum image size is given by the table | 
					
						
							|  |  |  | below. | 
					
						
							|  |  |  | 	The compression engine starts out at maximum compression, and will | 
					
						
							|  |  |  | increase image quality until it is close to the size in the table.  As long | 
					
						
							|  |  |  | as the compression engine can keep up with the frame rate, after a short time | 
					
						
							|  |  |  | the images will all be about the size in the table, regardless of resolution. | 
					
						
							|  |  |  | 	At low alternate settings, the compression engine may not be able to | 
					
						
							|  |  |  | compress the image enough and will reduce the frame rate by producing larger | 
					
						
							|  |  |  | images. | 
					
						
							|  |  |  | 	The default of 68k should be good for most users.  This will handle | 
					
						
							|  |  |  | any alternate at frame rates down to 15fps.  For lower frame rates, it may | 
					
						
							|  |  |  | be necessary to increase the buffer size to avoid having frames dropped due | 
					
						
							|  |  |  | to insufficient space. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			     Image size(bytes) | 
					
						
							|  |  |  | 	Alternate  bytes/ms   15fps    30fps | 
					
						
							|  |  |  | 	    2         128      8533     4267 | 
					
						
							|  |  |  | 	    3         384     25600    12800 | 
					
						
							|  |  |  | 	    4         640     42667    21333 | 
					
						
							|  |  |  | 	    5         768     51200    25600 | 
					
						
							|  |  |  | 	    6         896     59733    29867 | 
					
						
							|  |  |  | 	    7        1023     68200    34100 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	How many buffers should I use? | 
					
						
							|  |  |  | 	------------------------------ | 
					
						
							|  |  |  | 	For normal streaming, 3 should give the best results.  With only 2, | 
					
						
							|  |  |  | it is possible for the camera to finish sending one image just after a | 
					
						
							|  |  |  | program has started reading the other.  If this happens, the driver must drop | 
					
						
							|  |  |  | a frame.  The exception to this is if you have a heavily loaded machine.  In | 
					
						
							|  |  |  | this case use 2 buffers.  You are probably not reading at the full frame rate. | 
					
						
							|  |  |  | If the camera can send multiple images before a read finishes, it could | 
					
						
							|  |  |  | overwrite the third buffer before the read finishes, leading to a corrupt | 
					
						
							|  |  |  | image.  Single and double buffering have extra checks to avoid overwriting. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 4. Using the camera | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	We are providing a modified gqcam application to view the output. In | 
					
						
							|  |  |  | order to avoid confusion, here it is called mview.  There is also the qx5view | 
					
						
							|  |  |  | program which can also control the lights on the qx5 microscope. MJPEG Tools | 
					
						
							|  |  |  | (http://mjpeg.sourceforge.net) can also be used to record from the camera. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 5. Notes to developers: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    - This is a driver version stripped of the 2.4 back compatibility | 
					
						
							|  |  |  |      and old MJPEG ioctl API. See cpia2.sf.net for 2.4 support. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 6. Thanks: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    - Peter Pregler <Peter_Pregler@email.com>, | 
					
						
							|  |  |  |      Scott J. Bertin <scottbertin@yahoo.com>, and | 
					
						
							|  |  |  |      Jarl Totland <Jarl.Totland@bdc.no> for the original cpia driver, which | 
					
						
							|  |  |  |      this one was modelled from. |