[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