Greg KH wrote:

>What this means is you didn't send me all of the changesets from when
>you cloned my tree to the one that you sent me.
>
>Can you either send me all of the changesets, or just send me a patch?
>

Here's a treediff between your tree and mine (which also doubles as a 
patch). As you can see, my tree is OK, but its metadata must be corrupt.

Either that, or you accidentally tried to receive it on your 2.4 tree ;)

-- 
Mark McClelland
[EMAIL PROTECTED]


diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet 
usb-2.5/drivers/usb/Config.help usb-2.5-bad/drivers/usb/Config.help
--- usb-2.5/drivers/usb/Config.help     Fri Feb 22 15:04:55 2002
+++ usb-2.5-bad/drivers/usb/Config.help Thu Feb 21 21:22:08 2002
@@ -210,8 +210,10 @@
 
 CONFIG_USB_OV511
   Say Y here if you want to connect this type of camera to your
-  computer's USB port. See <file:Documentation/usb/ov511.txt> for more
-  information and for a list of supported cameras.
+  computer's USB port. See <file:Documentation/usb/ov511.txt> for
+  configuration options, and the driver homepage at
+  <http://alpha.dyndns.org/ov511/> for a list of supported cameras
+  and other information.
 
   This driver uses the Video For Linux API. You must say Y or M to
   "Video For Linux" (under Character Devices) to use this driver.
@@ -222,6 +224,23 @@
   inserted in and removed from the running kernel whenever you want).
   The module will be called ov511.o. If you want to compile it as a
   module, say M here and read <file:Documentation/modules.txt>.
+
+OV511 Decompression support
+CONFIG_USB_OV511_DEC
+  Say M here if you want to achieve higher frame rates, at the
+  expense of image quality. A 300 MHz or faster CPU is recommended.
+
+  This feature is NOT activated by default. The OV511 driver must have
+  compression enabled (eg. loaded with the "compress=1" module
+  parameter). See <file:Documentation/usb/ov511.txt> for more
+  information.
+
+  This code is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called ov511_decomp.o. You must load ov511.o
+  before loading this module, and you must unload this module before
+  unloading ov511.o. Read <file:Documentation/modules.txt> to learn
+  more about modules.
 
 CONFIG_USB_CDCETHER
   This driver supports devices conforming to the Communication Device
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet 
usb-2.5/drivers/usb/Config.in usb-2.5-bad/drivers/usb/Config.in
--- usb-2.5/drivers/usb/Config.in       Fri Feb 22 15:04:55 2002
+++ usb-2.5-bad/drivers/usb/Config.in   Thu Feb 21 21:22:09 2002
@@ -74,6 +74,7 @@
 else
    dep_tristate '  USB IBM (Xirlink) C-it Camera support' CONFIG_USB_IBMCAM 
$CONFIG_USB $CONFIG_VIDEO_DEV
    dep_tristate '  USB OV511 Camera support' CONFIG_USB_OV511 $CONFIG_USB 
$CONFIG_VIDEO_DEV
+      dep_tristate '    OV511 Decompression support' CONFIG_USB_OV511_DEC 
+$CONFIG_USB_OV511
    dep_tristate '  USB Philips Cameras' CONFIG_USB_PWC $CONFIG_USB $CONFIG_VIDEO_DEV
    dep_tristate '  USB SE401 Camera support' CONFIG_USB_SE401 $CONFIG_USB 
$CONFIG_VIDEO_DEV
    dep_tristate '  USB STV680 (Pencam) Camera support' CONFIG_USB_STV680 $CONFIG_USB 
$CONFIG_VIDEO_DEV
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet 
usb-2.5/drivers/usb/Makefile usb-2.5-bad/drivers/usb/Makefile
--- usb-2.5/drivers/usb/Makefile        Fri Feb 22 15:04:55 2002
+++ usb-2.5-bad/drivers/usb/Makefile    Thu Feb 21 21:22:15 2002
@@ -72,6 +72,7 @@
 obj-$(CONFIG_USB_DABUSB)       += dabusb.o
 obj-$(CONFIG_USB_VICAM)                += vicam.o
 obj-$(CONFIG_USB_OV511)                += ov511.o
+obj-$(CONFIG_USB_OV511_DEC)    += ov511_decomp.o
 obj-$(CONFIG_USB_SE401)                += se401.o
 obj-$(CONFIG_USB_STV680)       += stv680.o
 obj-$(CONFIG_USB_PEGASUS)      += pegasus.o
diff -Nur --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet 
usb-2.5/drivers/usb/ov511_decomp.c usb-2.5-bad/drivers/usb/ov511_decomp.c
--- usb-2.5/drivers/usb/ov511_decomp.c  Wed Dec 31 16:00:00 1969
+++ usb-2.5-bad/drivers/usb/ov511_decomp.c      Thu Feb 21 21:21:35 2002
@@ -0,0 +1,1260 @@
+/* OV511 Decompression Support Module (No-MMX version)
+ *
+ * Copyright (c) 1999-2002 Mark W. McClelland. All rights reserved.
+ * Original decompression code Copyright 1998-2000 OmniVision Technologies
+ *
+ * Please see the file: linux/Documentation/usb/ov511.txt 
+ * and the web site at:  http://alpha.dyndns.org/ov511
+ * for more info.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; version 2 of the License. You may also, at your
+ * option, follow the terms under the heading "BSD LICENSE", below.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/init.h>
+
+#include "ov511.h"
+
+/* Version Information */
+
+#define DRIVER_VERSION "v1.3"
+#define DRIVER_AUTHOR "Mark McClelland <[EMAIL PROTECTED]>, OmniVision \
+Technologies <http://www.ovt.com/>"
+#define DRIVER_DESC "OV511 Decompression Module"
+
+/* Prototypes */
+
+extern int ov511_register_decomp_module(int ver, struct ov51x_decomp_ops *ops,
+                                       int ov518, int mmx);
+extern void ov511_deregister_decomp_module(int ov518, int mmx);
+extern void * ov511_vmalloc(unsigned long size);
+extern void ov511_vfree(void * addr);
+
+/* Constants */
+
+static const int interface_ver = DECOMP_INTERFACE_VER;
+static const int ov518 = 0;
+static const int mmx = 0;
+
+/* Module features */
+
+/* 0=no debug messages
+ * 1=init/detection/unload and other significant messages,
+ * 2=some warning messages
+ * 3=config/control function calls
+ * 4=most function calls and data parsing messages
+ * 5=highly repetitive mesgs
+ * NOTE: This should be changed to 0, 1, or 2 for production kernels
+ */
+static int debug = 0;
+
+MODULE_PARM(debug, "i");
+MODULE_PARM_DESC(debug, 
+  "Debug level: 0=none, 1=inits, 2=warning, 3=config, 4=functions, 5=max");
+
+MODULE_AUTHOR(DRIVER_AUTHOR);
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("GPL");
+
+static void 
+DecompressYHI(unsigned char *pIn,
+             unsigned char *pOut,
+             int           *iIn,       /* in/out */
+             int           *iOut,      /* in/out */
+             const int      w,
+             const int      YUVFlag)
+{
+       short ZigZag[64];
+       int temp[64];
+       int Zcnt_Flag = 0;
+       int Num8_Flag = 0;
+       int in_pos = *iIn;
+       int out_pos = *iOut;
+       int tmp, tmp1, tmp2, tmp3;
+       unsigned char header, ZTable[64];
+       short tmpl, tmph, half_byte, idx, count;
+       unsigned long ZigZag_length = 0, ZT_length, i, j;
+       short DeZigZag[64]; 
+
+       const short a = 11584;
+       const short b = 16068;
+       const short c = 15136;
+       const short d = 13624;
+       const short e =  9104;
+       const short f =  6270;
+       const short g =  3196;
+
+       int out_idx;
+
+       /* Take off every 'Zig' */
+       for (i = 0; i < 64; i++) {
+               ZigZag[i] = 0;
+       }
+
+       /*****************************
+        * Read in the Y header byte *
+        *****************************/
+
+       header = pIn[in_pos];
+       in_pos++;
+
+       ZigZag_length = header & 0x3f;
+       ZigZag_length = ZigZag_length + 1;
+
+       Num8_Flag = header & 0x40;
+       Zcnt_Flag = header & 0x80;
+
+       /*************************
+        * Read in the Y content *
+        *************************/
+
+       if (Zcnt_Flag == 0) {    /* Without Zero Table read contents directly */
+               /* Read in ZigZag[0] */
+               ZigZag[0] = pIn[in_pos++];
+               tmpl = pIn[in_pos++];
+               tmph = tmpl<<8;
+               ZigZag[0] = ZigZag[0] | tmph;
+               ZigZag[0] = ZigZag[0]<<4;
+               ZigZag[0] = ZigZag[0]>>4;
+
+               if (Num8_Flag) { /* 8 Bits */
+                       for (i = 1; i < ZigZag_length; i++) {
+                               ZigZag[i] = pIn[in_pos++];
+                               ZigZag[i] = ZigZag[i]<<8;
+                               ZigZag[i] = ZigZag[i]>>8;
+                       }
+               } else {   /* 12 bits and has no Zero Table */
+                       idx = 1;
+                       half_byte = 0;
+                       for (i = 1; i < ZigZag_length; i++) {
+                               if (half_byte == 0) {
+                                       ZigZag[i] = pIn[in_pos++];
+                                       tmpl = pIn[in_pos++];
+                                       tmph = tmpl<<8;
+                                       tmph = tmph&0x0f00;
+                                       ZigZag[i] = ZigZag[i] | tmph;
+                                       ZigZag[i] = ZigZag[i]<<4;
+                                       ZigZag[i] = ZigZag[i]>>4;
+                                       half_byte = 1;
+                               } else {
+                                       ZigZag[i] = pIn[in_pos++];
+                                       ZigZag[i] = ZigZag[i]<<8;
+                                       tmpl = tmpl & 0x00f0;
+                                       ZigZag[i] = ZigZag[i] | tmpl;
+                                       ZigZag[i] = ZigZag[i]>>4;
+                                       half_byte = 0;
+                               }
+                       }
+               }
+       } else {  /* Has Zero Table */
+               /* Calculate Z-Table length */
+               ZT_length = ZigZag_length/8;
+               tmp = ZigZag_length%8;
+
+               if (tmp > 0) {
+                       ZT_length = ZT_length + 1;
+               }
+
+               /* Read in Zero Table */
+               for (j = 0; j < ZT_length; j++) {
+                       ZTable[j] = pIn[in_pos++];
+               }
+
+               /* Read in ZigZag[0] */
+               ZigZag[0] = pIn[in_pos++];
+               tmpl = pIn[in_pos++];
+               tmph = tmpl<<8;
+               ZigZag[0] = ZigZag[0] | tmph;
+               ZigZag[0] = ZigZag[0]<<4;
+               ZigZag[0] = ZigZag[0]>>4;
+
+               /* Decode ZigZag */
+               idx = 0;
+               ZTable[idx] = ZTable[idx]<<1;
+               count = 7;
+
+               if (Num8_Flag) {        /* 8 Bits and has zero table */
+                       for (i = 1; i < ZigZag_length; i++) {
+                               if ((ZTable[idx]&0x80)) {
+                                       ZigZag[i] = pIn[in_pos++];
+                                       ZigZag[i] = ZigZag[i]<<8;
+                                       ZigZag[i] = ZigZag[i]>>8;
+                               }
+
+                               ZTable[idx]=ZTable[idx]<<1;
+                               count--;
+                               if (count == 0) {
+                                       count = 8;
+                                       idx++;
+                               }
+                       }
+
+               } else {        /* 12 bits and has Zero Table */
+                       half_byte = 0;
+                       for (i = 1; i < ZigZag_length; i++) {
+                               if (ZTable[idx]&0x80) {
+                                       if (half_byte == 0) {
+                                               ZigZag[i] = pIn[in_pos++];
+                                               tmpl = pIn[in_pos++];
+                                               tmph = tmpl <<8;
+                                               tmph = tmph & 0x0f00;
+                                               ZigZag[i] = ZigZag[i] | tmph;
+                                               ZigZag[i] = ZigZag[i]<<4;
+                                               ZigZag[i] = ZigZag[i]>>4;
+                                               half_byte = 1;
+                                       } else {
+                                               ZigZag[i] = pIn[in_pos++];
+                                               ZigZag[i] = ZigZag[i]<<8;
+                                               tmpl = tmpl & 0x00f0;
+                                               ZigZag[i] = ZigZag[i] | tmpl;
+                                               ZigZag[i] = ZigZag[i]>>4;
+                                               half_byte = 0;
+                                       }
+                               }
+                               
+                               ZTable[idx] = ZTable[idx]<<1;
+                               count--;
+                               if (count == 0) {
+                                       count = 8;
+                                       idx++;
+                               }
+                       }
+               }       
+       }               
+
+       /*************
+        * De-ZigZag *
+        *************/
+
+       for (j = 0; j < 64; j++) {
+               DeZigZag[j] = 0;
+       }
+
+       if (YUVFlag == 1) {
+               DeZigZag[0] = ZigZag[0];
+               DeZigZag[1] = ZigZag[1]<<1;
+               DeZigZag[2] = ZigZag[5]<<1;
+               DeZigZag[3] = ZigZag[6]<<2;
+
+               DeZigZag[8] = ZigZag[2]<<1;
+               DeZigZag[9] = ZigZag[4]<<1;
+               DeZigZag[10] = ZigZag[7]<<1;
+               DeZigZag[11] = ZigZag[13]<<2;
+
+               DeZigZag[16] = ZigZag[3]<<1;
+               DeZigZag[17] = ZigZag[8]<<1;
+               DeZigZag[18] = ZigZag[12]<<2;
+               DeZigZag[19] = ZigZag[17]<<2;
+
+               DeZigZag[24] = ZigZag[9]<<2;
+               DeZigZag[25] = ZigZag[11]<<2;
+               DeZigZag[26] = ZigZag[18]<<2;
+               DeZigZag[27] = ZigZag[24]<<3;
+       } else {
+               DeZigZag[0] = ZigZag[0];
+               DeZigZag[1] = ZigZag[1]<<2;
+               DeZigZag[2] = ZigZag[5]<<2;
+               DeZigZag[3] = ZigZag[6]<<3;
+
+               DeZigZag[8] = ZigZag[2]<<2;
+               DeZigZag[9] = ZigZag[4]<<2;
+               DeZigZag[10] = ZigZag[7]<<2;
+               DeZigZag[11] = ZigZag[13]<<4;
+
+               DeZigZag[16] = ZigZag[3]<<2;
+               DeZigZag[17] = ZigZag[8]<<2;
+               DeZigZag[18] = ZigZag[12]<<3;
+               DeZigZag[19] = ZigZag[17]<<4;
+
+               DeZigZag[24] = ZigZag[9]<<3;
+               DeZigZag[25] = ZigZag[11]<<4;
+               DeZigZag[26] = ZigZag[18]<<4;
+               DeZigZag[27] = ZigZag[24]<<4;
+       }
+
+#if 0
+       /* Dequante */
+       if (YUVFlag == 1) {
+               /* Dequante Y */
+               for (i=0; i<64; i++) {
+                       ZigZag[i] = DeZigZag[i]<<DQTY[i];
+               }
+       } else {
+               /* Dequante UV */
+               for (i=0; i<64; i++) {
+                       ZigZag[i] = DeZigZag[i]<<DQTUV[i];
+               }
+       }
+#endif
+
+       /*****************
+        **** IDCT 1D ****
+        *****************/
+
+       /* j = 0 */
+       tmp1=a*DeZigZag[0]+c*DeZigZag[2];
+       tmp2=b*DeZigZag[1];
+       tmp3=d*DeZigZag[3];
+
+       tmp=tmp1+tmp2+tmp3;
+       temp[0] = tmp>>15;
+
+       tmp=tmp1-tmp2-tmp3;
+       temp[56] = tmp>>15;
+
+       tmp1=a*DeZigZag[8]+c*DeZigZag[10];
+       tmp2=b*DeZigZag[9];
+       tmp3=d*DeZigZag[11];
+
+       tmp=tmp1+tmp2+tmp3;
+       temp[1] = tmp>>15;
+
+       tmp=tmp1-tmp2-tmp3;
+       temp[57] = tmp>>15;
+
+       tmp1=a*DeZigZag[16]+c*DeZigZag[18];
+       tmp2=b*DeZigZag[17];
+       tmp3=d*DeZigZag[19];
+
+       tmp=tmp1+tmp2+tmp3;
+       temp[2] = tmp>>15;
+
+       tmp=tmp1-tmp2-tmp3;
+       temp[58] = tmp>>15;
+
+       tmp1=a*DeZigZag[24]+c*DeZigZag[26];
+       tmp2=b*DeZigZag[25];
+       tmp3=d*DeZigZag[27];
+
+       tmp=tmp1+tmp2+tmp3;
+       temp[3] = tmp>>15;
+
+       tmp=tmp1-tmp2-tmp3;
+       temp[59] = tmp>>15;
+
+
+       /* j = 1 */
+       tmp1=a*DeZigZag[0]+f*DeZigZag[2];
+       tmp2=d*DeZigZag[1];
+       tmp3=g*DeZigZag[3];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[8] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[48] = tmp>>15;
+
+       tmp1=a*DeZigZag[8]+f*DeZigZag[10];
+       tmp2=d*DeZigZag[9];
+       tmp3=g*DeZigZag[11];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[9] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[49] = tmp>>15;
+
+       tmp1=a*DeZigZag[16]+f*DeZigZag[18];
+       tmp2=d*DeZigZag[17];
+       tmp3=g*DeZigZag[19];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[10] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[50] = tmp>>15;
+
+       tmp1=a*DeZigZag[24]+f*DeZigZag[26];
+       tmp2=d*DeZigZag[25];
+       tmp3=g*DeZigZag[27];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[11] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[51] = tmp>>15;
+
+
+       /* j = 2 */
+       tmp1=a*DeZigZag[0]-f*DeZigZag[2];
+       tmp2=e*DeZigZag[1];
+       tmp3=b*DeZigZag[3];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[16] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[40] = tmp>>15;
+
+       tmp1=a*DeZigZag[8]-f*DeZigZag[10];
+       tmp2=e*DeZigZag[9];
+       tmp3=b*DeZigZag[11];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[17] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[41] = tmp>>15;
+
+       tmp1=a*DeZigZag[16]-f*DeZigZag[18];
+       tmp2=e*DeZigZag[17];
+       tmp3=b*DeZigZag[19];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[18] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[42] = tmp>>15;
+
+       tmp1=a*DeZigZag[24]-f*DeZigZag[26];
+       tmp2=e*DeZigZag[25];
+       tmp3=b*DeZigZag[27];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[19] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[43] = tmp>>15;
+
+
+       /* j = 3 */
+       tmp1=a*DeZigZag[0]-c*DeZigZag[2];
+       tmp2=g*DeZigZag[1];
+       tmp3=e*DeZigZag[3];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[24] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[32] = tmp>>15;
+
+       tmp1=a*DeZigZag[8]-c*DeZigZag[10];
+       tmp2=g*DeZigZag[9];
+       tmp3=e*DeZigZag[11];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[25] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[33] = tmp>>15;
+
+       tmp1=a*DeZigZag[16]-c*DeZigZag[18];
+       tmp2=g*DeZigZag[17];
+       tmp3=e*DeZigZag[19];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[26] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[34] = tmp>>15;
+
+       tmp1=a*DeZigZag[24]-c*DeZigZag[26];
+       tmp2=g*DeZigZag[25];
+       tmp3=e*DeZigZag[27];
+
+       tmp=tmp1+tmp2-tmp3;
+       temp[27] = tmp>>15;
+
+       tmp=tmp1-tmp2+tmp3;
+       temp[35] = tmp>>15;
+
+
+       /*****************
+        **** IDCT 2D ****
+        *****************/
+
+       out_idx = out_pos;
+
+       /* i=0  */
+
+       /* j=0 */
+       tmp = temp[0]*a+temp[1]*b+temp[2]*c+temp[3]*d;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[0+out_idx] = (unsigned char) tmp;          
+
+       /* j=1 */
+       tmp = temp[0]*a+temp[1]*d+temp[2]*f+temp[3]*(-g);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[1+out_idx] = (unsigned char) tmp;          
+
+       /* j=2 */
+       tmp = temp[0]*a+temp[1]*e+temp[2]*(-f)+temp[3]*(-b);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[2+out_idx] = (unsigned char) tmp;          
+
+       /* j=3 */
+       tmp = temp[0]*a+temp[1]*g+temp[2]*(-c)+temp[3]*(-e);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[3+out_idx] = (unsigned char) tmp;  
+
+       /* j=4 */
+       tmp = temp[0]*a+temp[1]*(-g)+temp[2]*(-c)+temp[3]*e;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[4+out_idx] = (unsigned char) tmp;          
+
+       /* j=5 */
+       tmp = temp[0]*a+temp[1]*(-e)+temp[2]*(-f)+temp[3]*b;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[5+out_idx] = (unsigned char) tmp;          
+
+       /* j=6 */
+       tmp = temp[0]*a+temp[1]*(-d)+temp[2]*f+temp[3]*g;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[6+out_idx] = (unsigned char) tmp;          
+
+       /* j=7 */
+       tmp = temp[0]*a+temp[1]*(-b)+temp[2]*c+temp[3]*(-d);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[7+out_idx] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+       /* i=1  */
+
+       /* j=0 */
+       tmp = temp[8]*a+temp[9]*b+temp[10]*c+temp[11]*d;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=1 */
+       tmp = temp[8]*a+temp[9]*d+temp[10]*f+temp[11]*(-g);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=2 */
+       tmp = temp[8]*a+temp[9]*e+temp[10]*(-f)+temp[11]*(-b);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=3 */
+       tmp = temp[8]*a+temp[9]*g+temp[10]*(-c)+temp[11]*(-e);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp = temp[8]*a+temp[9]*(-g)+temp[10]*(-c)+temp[11]*e;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+       /* j=5 */
+       tmp = temp[8]*a+temp[9]*(-e)+temp[10]*(-f)+temp[11]*b;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       /* j=6 */
+       tmp = temp[8]*a+temp[9]*(-d)+temp[10]*f+temp[11]*g;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+
+       /* j=7 */
+       tmp = temp[8]*a+temp[9]*(-b)+temp[10]*c+temp[11]*(-d);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+
+       /* i=2 */
+
+       /* j=0 */
+       tmp = temp[16]*a+temp[17]*b+temp[18]*c+temp[19]*d;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=1 */
+       tmp = temp[16]*a+temp[17]*d+temp[18]*f+temp[19]*(-g);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=2 */
+       tmp = temp[16]*a+temp[17]*e+temp[18]*(-f)+temp[19]*(-b);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=3 */
+       tmp = temp[16]*a+temp[17]*g+temp[18]*(-c)+temp[19]*(-e);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp = temp[16]*a+temp[17]*(-g)+temp[18]*(-c)+temp[19]*e;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+       /* j=5 */
+       tmp = temp[16]*a+temp[17]*(-e)+temp[18]*(-f)+temp[19]*b;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       /* j=6 */
+       tmp = temp[16]*a+temp[17]*(-d)+temp[18]*f+temp[19]*g;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+
+       /* j=7 */
+       tmp = temp[16]*a+temp[17]*(-b)+temp[18]*c+temp[19]*(-d);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+       /* i=3 */
+
+       /* j=0 */
+       tmp = temp[24]*a+temp[25]*b+temp[26]*c+temp[27]*d;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=1 */
+       tmp = temp[24]*a+temp[25]*d+temp[26]*f+temp[27]*(-g);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=2 */
+       tmp = temp[24]*a+temp[25]*e+temp[26]*(-f)+temp[27]*(-b);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=3 */
+       tmp = temp[24]*a+temp[25]*g+temp[26]*(-c)+temp[27]*(-e);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp = temp[24]*a+temp[25]*(-g)+temp[26]*(-c)+temp[27]*e;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+       /* j=5 */
+       tmp = temp[24]*a+temp[25]*(-e)+temp[26]*(-f)+temp[27]*b;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       /* j=6 */
+       tmp = temp[24]*a+temp[25]*(-d)+temp[26]*f+temp[27]*g;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+
+       /* j=7 */
+       tmp = temp[24]*a+temp[25]*(-b)+temp[26]*c+temp[27]*(-d);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+       /* i=4 */
+
+       /* j=0 */
+       tmp = temp[32]*a+temp[33]*b+temp[34]*c+temp[35]*d;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=1 */
+       tmp = temp[32]*a+temp[33]*d+temp[34]*f+temp[35]*(-g);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=2 */
+       tmp = temp[32]*a+temp[33]*e+temp[34]*(-f)+temp[35]*(-b);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=3 */
+       tmp = temp[32]*a+temp[33]*g+temp[34]*(-c)+temp[35]*(-e);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp = temp[32]*a+temp[33]*(-g)+temp[34]*(-c)+temp[35]*e;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+       /* j=5 */
+       tmp = temp[32]*a+temp[33]*(-e)+temp[34]*(-f)+temp[35]*b;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       /* j=6 */
+       tmp = temp[32]*a+temp[33]*(-d)+temp[34]*f+temp[35]*g;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+
+       /* j=7 */
+       tmp = temp[32]*a+temp[33]*(-b)+temp[34]*c+temp[35]*(-d);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+       /* i=5 */
+
+       /* j=0 */
+       tmp = temp[40]*a+temp[41]*b+temp[42]*c+temp[43]*d;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=1 */
+       tmp = temp[40]*a+temp[41]*d+temp[42]*f+temp[43]*(-g);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=2 */
+       tmp = temp[40]*a+temp[41]*e+temp[42]*(-f)+temp[43]*(-b);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=3 */
+       tmp = temp[40]*a+temp[41]*g+temp[42]*(-c)+temp[43]*(-e);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp = temp[40]*a+temp[41]*(-g)+temp[42]*(-c)+temp[43]*e;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+       /* j=5 */
+       tmp = temp[40]*a+temp[41]*(-e)+temp[42]*(-f)+temp[43]*b;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       /* j=6 */
+       tmp = temp[40]*a+temp[41]*(-d)+temp[42]*f+temp[43]*g;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+
+       /* j=7 */
+       tmp = temp[40]*a+temp[41]*(-b)+temp[42]*c+temp[43]*(-d);
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+       /* i=6 */
+
+       tmp1=temp[48]*a+temp[50]*c;
+       tmp2=temp[49]*b;
+       tmp3=temp[51]*d;
+       /* j=0 */
+       tmp=tmp1+tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=7 */
+       tmp=tmp1-tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+       tmp1=temp[48]*a+temp[50]*f;
+       tmp2=temp[49]*d;
+       tmp3=temp[51]*g;
+       /* j=1 */
+       tmp=tmp1+tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=6 */
+       tmp=tmp1-tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+                       
+       tmp1=temp[48]*a-temp[50]*f;
+       tmp2=temp[49]*e;
+       tmp3=temp[51]*b;
+       /* j=2 */
+       tmp=tmp1+tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=5 */
+       tmp=tmp1-tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       tmp1=temp[48]*a-temp[50]*c;
+       tmp2=temp[49]*g;
+       tmp3=temp[51]*e;
+       /* j=3 */
+       tmp=tmp1+tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp=tmp1-tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+
+       out_idx += w;
+
+       /* i=7 */
+
+       tmp1=temp[56]*a+temp[58]*c;
+       tmp2=temp[57]*b;
+       tmp3=temp[59]*d;
+
+       /* j=0 */
+       tmp=tmp1+tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx] = (unsigned char) tmp;            
+
+       /* j=7 */
+       tmp=tmp1-tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+7] = (unsigned char) tmp;          
+
+       tmp1=temp[56]*a+temp[58]*f;
+       tmp2=temp[57]*d;
+       tmp3=temp[59]*g;
+
+       /* j=1 */
+       tmp=tmp1+tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+1] = (unsigned char) tmp;
+
+       /* j=6 */
+       tmp=tmp1-tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+6] = (unsigned char) tmp;          
+
+       tmp1=temp[56]*a-temp[58]*f;
+       tmp2=temp[57]*e;
+       tmp3=temp[59]*b;
+
+       /* j=2 */
+       tmp=tmp1+tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+2] = (unsigned char) tmp;
+
+       /* j=5 */
+       tmp=tmp1-tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+5] = (unsigned char) tmp;          
+
+       tmp1=temp[56]*a-temp[58]*c;
+       tmp2=temp[57]*g;
+       tmp3=temp[59]*e;
+
+       /* j=3 */
+       tmp=tmp1+tmp2-tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+3] = (unsigned char) tmp;          
+
+       /* j=4 */
+       tmp=tmp1-tmp2+tmp3;
+       tmp = tmp>>15;
+       tmp = tmp + 128;
+       if (tmp > 255) tmp=255;
+       if (tmp < 0)   tmp=0;
+       pOut[out_idx+4] = (unsigned char) tmp;          
+
+       *iIn = in_pos;
+       *iOut = out_pos + 8;
+} 
+
+#define DECOMP_Y() DecompressYHI(pIn, pY, &iIn, &iY, w, 1)
+
+#define DECOMP_U() DecompressYHI(pIn, pU, &iIn, &iU, w/2, 2)
+
+#define DECOMP_V() DecompressYHI(pIn, pV, &iIn, &iV, w/2, 2)
+
+inline static int 
+Decompress400HiNoMMX(unsigned char *pIn,
+                    unsigned char *pOut,
+                    const int      w,
+                    const int      h,
+                    const int      inSize)
+{
+       unsigned char *pY = pOut;
+       int x, y, iIn, iY;
+
+       iIn = 0;
+       for (y = 0; y < h; y += 8) {
+               iY = w*y;
+
+               for (x = 0; x < w; x += 8)
+                       DECOMP_Y();
+       }
+
+       return 0;
+}
+
+inline static int 
+Decompress420HiNoMMX(unsigned char *pIn,
+                    unsigned char *pOut,
+                    const int      w, 
+                    const int      h, 
+                    const int      inSize)
+{
+       unsigned char *pY = pOut;
+       unsigned char *pU = pY + w*h;
+       unsigned char *pV = pU + w*h/4;
+       int x, y, iY, iU, iV, iIn;
+
+       iIn = 0;
+       for (y = 0; y < h; y += 16) {
+               iY = w*y;
+               iU = iY/4;
+               iV = iU; 
+
+               if (iIn > inSize)
+                       return -1;
+
+               for (x = 0; x < w; x += 32) {
+                       DECOMP_U();
+                       DECOMP_V();
+                       DECOMP_Y();
+                       DECOMP_Y();
+                       DECOMP_Y();
+                       DECOMP_Y();
+               }
+
+               iY = w*(y + 8);
+               iV = (w*y + w)/4;
+               iU = iV;
+ 
+               for (x = 0; x < w; x += 32) {
+                       DECOMP_U();
+                       DECOMP_V();
+                       DECOMP_Y();
+                       DECOMP_Y();
+                       DECOMP_Y();
+                       DECOMP_Y();
+               }
+       }
+
+       return 0;
+}
+
+/* Input format is raw isoc. data (with header and packet 
+ * number stripped, and all-zero blocks removed).
+ * Output format is YUV400
+ * Returns uncompressed data length if success, or zero if error
+ */
+static int 
+Decompress400(unsigned char *pIn,
+             unsigned char *pOut,
+             int            w,
+             int            h,
+             int            inSize)
+{
+       int numpix = w * h;
+       int rc;
+
+       PDEBUG(4, "%dx%d pIn=%p pOut=%p inSize=%d", w, h, pIn, pOut, inSize);
+
+       rc = Decompress400HiNoMMX(pIn, pOut, w, h, inSize);
+
+       if (rc)
+               return 0;
+
+       return numpix;
+}
+
+
+/* Input format is raw isoc. data (with header and packet 
+ * number stripped, and all-zero blocks removed).
+ * Output format is planar YUV420
+ * Returns uncompressed data length if success, or zero if error
+ */
+static int 
+Decompress420(unsigned char *pIn,
+             unsigned char *pOut,
+             int            w,
+             int            h,
+             int            inSize)
+{
+       int numpix = w * h;
+       int rc;
+
+       PDEBUG(4, "%dx%d pIn=%p pOut=%p inSize=%d", w, h, pIn, pOut, inSize);
+
+       rc = Decompress420HiNoMMX(pIn, pOut, w, h, inSize);
+
+       if (rc)
+               return 0;
+
+/* Disabled by Mark */
+#if 0
+       /* For color saturation 8/22/00 */
+       {
+               long u , v;
+               unsigned char *pU = pOut + numpix;
+               unsigned char *pV = pU + numpix/4;
+               for (int i = 0; i < numpix/4; i++) {
+                       u = (long)*pU;
+                       v = (long)*pV;
+                       u -= 128;
+                       v -= 128;
+                       u = (u * 577) >> 10;
+                       v = (v * 730) >> 10;
+                       u += 128;
+                       v += 128;
+                       *pU++ = (unsigned char)u;
+                       *pV++ = (unsigned char)v;
+/*   u=0.564 */
+/*   v=0.713 */
+               }
+       }
+#endif
+
+       return (numpix * 3 / 2);
+}
+
+static void 
+DecompLock(void)
+{
+       MOD_INC_USE_COUNT;
+}
+
+static void 
+DecompUnlock(void)
+{
+       MOD_DEC_USE_COUNT;
+}
+
+static struct ov51x_decomp_ops decomp_ops = {
+       decomp_400:     Decompress400,  
+       decomp_420:     Decompress420,  
+       decomp_lock:    DecompLock,
+       decomp_unlock:  DecompUnlock
+};
+
+static int __init 
+decomp_init(void)
+{
+       int rc;
+
+       EXPORT_NO_SYMBOLS;
+
+       rc = ov511_register_decomp_module(DECOMP_INTERFACE_VER, &decomp_ops,
+                                         ov518, mmx);
+       if (rc) {
+               err("Could not register with ov511 (rc=%d)", rc);
+               return -1;
+       }
+
+       info(DRIVER_VERSION " : " DRIVER_DESC);
+
+       return 0;
+}
+
+static void __exit 
+decomp_exit(void)
+{
+       ov511_deregister_decomp_module(ov518, mmx);
+       info("deregistered\n");
+}
+
+module_init(decomp_init);
+module_exit(decomp_exit);

Reply via email to