summaryrefslogtreecommitdiffstats
path: root/src/fdct.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fdct.c')
-rw-r--r--src/fdct.c54
1 files changed, 36 insertions, 18 deletions
diff --git a/src/fdct.c b/src/fdct.c
index 2dab7c5..5552856 100644
--- a/src/fdct.c
+++ b/src/fdct.c
@@ -1,7 +1,6 @@
#include "dct.h" /* Private declarations for DCT subsystem */
#define DCTSIZE 8
-#define INT32 int
#define DESCALE(x,shft) ((x) >> (shft))
#define MULTIPLY(var,const) ((var) * (const))
@@ -9,29 +8,29 @@
#define CONST_BITS 13
#define PASS1_BITS 1 /* lose a little precision to avoid overflow */
-#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */
-#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */
-#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */
-#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */
-#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */
-#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */
-#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */
-#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */
-#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */
-#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */
-#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */
-#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */
+#define FIX_0_298631336 ((int) 2446) /* FIX(0.298631336) */
+#define FIX_0_390180644 ((int) 3196) /* FIX(0.390180644) */
+#define FIX_0_541196100 ((int) 4433) /* FIX(0.541196100) */
+#define FIX_0_765366865 ((int) 6270) /* FIX(0.765366865) */
+#define FIX_0_899976223 ((int) 7373) /* FIX(0.899976223) */
+#define FIX_1_175875602 ((int) 9633) /* FIX(1.175875602) */
+#define FIX_1_501321110 ((int) 12299) /* FIX(1.501321110) */
+#define FIX_1_847759065 ((int) 15137) /* FIX(1.847759065) */
+#define FIX_1_961570560 ((int) 16069) /* FIX(1.961570560) */
+#define FIX_2_053119869 ((int) 16819) /* FIX(2.053119869) */
+#define FIX_2_562915447 ((int) 20995) /* FIX(2.562915447) */
+#define FIX_3_072711026 ((int) 25172) /* FIX(3.072711026) */
/*
* Perform the forward DCT on one block of samples.
*/
-void jpeg_fdct_ifast (DCTELEM * data)
+void jpeg_fdct_ifast (DCTELEM * data, unsigned char * qdata)
{
- INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
- INT32 tmp10, tmp11, tmp12, tmp13;
- INT32 z1, z2, z3, z4, z5;
+ int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
+ int tmp10, tmp11, tmp12, tmp13;
+ int z1, z2, z3, z4, z5;
DCTELEM *dataptr;
int ctr;
//SHIFT_TEMPS
@@ -42,6 +41,16 @@ void jpeg_fdct_ifast (DCTELEM * data)
dataptr = data;
for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
+ dataptr[0] = dataptr[0] - 128;
+ dataptr[1] = dataptr[1] - 128;
+ dataptr[2] = dataptr[2] - 128;
+ dataptr[3] = dataptr[3] - 128;
+ dataptr[4] = dataptr[4] - 128;
+ dataptr[5] = dataptr[5] - 128;
+ dataptr[6] = dataptr[6] - 128;
+ dataptr[7] = dataptr[7] - 128;
+
+
tmp0 = dataptr[0] + dataptr[7];
tmp7 = dataptr[0] - dataptr[7];
tmp1 = dataptr[1] + dataptr[6];
@@ -157,11 +166,20 @@ void jpeg_fdct_ifast (DCTELEM * data)
z3 += z5;
z4 += z5;
- dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS+PASS1_BITS);
+ dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS+PASS1_BITS); //dataptr[DCTSIZE*1] = (dataptr[DCTSIZE*1] / 8)/ qdata[DCTSIZE*1]
dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS+PASS1_BITS);
dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS+PASS1_BITS);
dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS+PASS1_BITS);
+ dataptr[DCTSIZE*0] = (dataptr[DCTSIZE*0] / 8)/ qdata[DCTSIZE*0];
+ dataptr[DCTSIZE*1] = (dataptr[DCTSIZE*1] / 8)/ qdata[DCTSIZE*1];
+ dataptr[DCTSIZE*2] = (dataptr[DCTSIZE*2] / 8)/ qdata[DCTSIZE*2];
+ dataptr[DCTSIZE*3] = (dataptr[DCTSIZE*3] / 8)/ qdata[DCTSIZE*3];
+ dataptr[DCTSIZE*4] = (dataptr[DCTSIZE*4] / 8)/ qdata[DCTSIZE*4];
+ dataptr[DCTSIZE*5] = (dataptr[DCTSIZE*5] / 8)/ qdata[DCTSIZE*5];
+ dataptr[DCTSIZE*6] = (dataptr[DCTSIZE*6] / 8)/ qdata[DCTSIZE*6];
+ dataptr[DCTSIZE*7] = (dataptr[DCTSIZE*7] / 8)/ qdata[DCTSIZE*7];
+
dataptr++; /* advance pointer to next column */
}
}