[cpia] CPiA colour balance problem [patch]

rich@annexia.org rich@annexia.org
Mon, 6 Mar 2000 22:18:39 +0000


On Mon, Mar 06, 2000 at 09:48:02PM +0000, rich@annexia.org wrote:
[...]
> I'm going to take a deeper look at this problem.

Fixed it. I hope you're all going to be suitably embarrassed
by the fix :-)

By the way - I left a warning in place in the patch. If the
patch is working correctly, then the warning should *never*
be printed out.

You also have to apply this patch after applying my previous
colour balance patch.

Rich.

----------------------------------------------------------------------
diff -ur cpia-0.7.3-cb-fix/module/cpia.c cpia-0.7.3-cb-fix-comp-fix/module/cpia.c
--- cpia-0.7.3-cb-fix/module/cpia.c	Mon Mar  6 21:53:44 2000
+++ cpia-0.7.3-cb-fix-comp-fix/module/cpia.c	Mon Mar  6 22:12:14 2000
@@ -1700,6 +1700,29 @@
 			cam->params.exposure.green1Comp = data[5];
 			cam->params.exposure.green2Comp = data[6];
 			cam->params.exposure.blueComp = data[7];
+			/* If the *Comp parameters are wacko, generate
+			 * a warning, and reset them back to default
+			 * values.             - rich@annexia.org
+			 */
+			if (cam->params.exposure.redComp < 220 ||
+			    cam->params.exposure.redComp > 255 ||
+			    cam->params.exposure.green1Comp < 214 ||
+			    cam->params.exposure.green1Comp > 255 ||
+			    cam->params.exposure.green2Comp < 214 ||
+			    cam->params.exposure.green2Comp > 255 ||
+			    cam->params.exposure.blueComp < 230 ||
+			    cam->params.exposure.blueComp > 255)
+			  {
+			    printk (KERN_WARNING "*_comp parameters have gone AWOL (%d/%d/%d/%d) - reseting them\n",
+				    cam->params.exposure.redComp,
+				    cam->params.exposure.green1Comp,
+				    cam->params.exposure.green2Comp,
+				    cam->params.exposure.blueComp);
+			    cam->params.exposure.redComp = 220;
+			    cam->params.exposure.green1Comp = 214;
+			    cam->params.exposure.green2Comp = 214;
+			    cam->params.exposure.blueComp = 230;
+			  }
 			up(&cam->param_lock);
 			break;
 		default:
@@ -2362,10 +2385,10 @@
 	                    cam->params.exposure.fineExp,
 	                    cam->params.exposure.coarseExpLo,
 	                    cam->params.exposure.coarseExpHi,
-	                    cam->params.exposure.redComp,
-	                    cam->params.exposure.green1Comp,
-	                    cam->params.exposure.green2Comp,
-	                    cam->params.exposure.blueComp);
+			    cam->params.exposure.redComp,
+			    cam->params.exposure.green1Comp,
+			    cam->params.exposure.green2Comp,
+			    cam->params.exposure.blueComp);
 	do_command_extended(cam, CPIA_COMMAND_SetExposure,
 			    0, 3, 0, 0,
 			    0, 0, 0, 0, 0, 0, 0, 0);
diff -ur cpia-0.7.3-cb-fix/module/cpia_usb.c cpia-0.7.3-cb-fix-comp-fix/module/cpia_usb.c
--- cpia-0.7.3-cb-fix/module/cpia_usb.c	Wed Mar  1 10:47:44 2000
+++ cpia-0.7.3-cb-fix-comp-fix/module/cpia_usb.c	Mon Mar  6 22:17:51 2000
@@ -276,7 +276,7 @@
  *  WritePacket
  *
  ***************************************************************************/
-static int WritePacket(struct usb_device *udev, const u8 *packet)
+static int WritePacket(struct usb_device *udev, const u8 *packet, u8 *buf, size_t size)
 {
 	if (!packet)
 		return -EINVAL;
@@ -285,7 +285,7 @@
 			 packet[1] + (packet[0] << 8),
 			 USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 			 packet[2] + (packet[3] << 8), 
-			 packet[4] + (packet[5] << 8), NULL, 0, HZ);
+			 packet[4] + (packet[5] << 8), buf, size, HZ);
 }
 
 /****************************************************************************
@@ -338,7 +338,7 @@
 
 		memcpy(data, buffer, databytes);
 	} else if(command[0] == DATA_OUT)
-		WritePacket(udev, command);
+		WritePacket(udev, command, data, databytes);
 	else {
 		DBG("Unexpected first byte of command: %x\n", command[0]);
 		err = -EINVAL;
----------------------------------------------------------------------

-- 
rich@annexia.org | Is your school part of http://www.schoolmaster.net ?
BiblioTech Ltd, Unit 2 Piper Centre, 50 Carnwath Road, London, SW6 3EG.
+44 20 7384 6917 | Click here to play XRacer: http://xracer.annexia.org
Copyright © 2000 Richard Jones | GnuPG/PGP key from www.annexia.org