summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c104
1 files changed, 91 insertions, 13 deletions
diff --git a/src/main.c b/src/main.c
index 39d99bb..1b25658 100644
--- a/src/main.c
+++ b/src/main.c
@@ -13,11 +13,75 @@
unsigned char Image1[MAXCOLS*3*MAXROWS+HEADER];
unsigned char Image2[MAXCOLS*3*MAXROWS+HEADER];
+DCTELEM quan_data[64] = {
+ 8, 6, 6, 7, 6, 5, 8, 7,
+ 7, 7, 9, 9, 8, 10, 12, 20,
+ 13, 12, 11, 11, 12, 25, 18, 19,
+ 15, 20, 29, 26, 31, 30, 29, 26,
+ 28, 28, 32, 36, 46, 39, 32, 34,
+ 44, 35, 28, 28, 40, 55, 41, 44,
+ 48, 49, 52, 52, 52, 31, 39, 57,
+ 61, 56, 50, 60, 46, 51, 52, 50
+};
+
+void quanize_data(int * data,int * qdata)
+{
+ int i,j;
+ for (i = 0; i < 8; i++)
+ {
+ for(j=0;j < 8;j++)
+ {
+ *(data + ((i * 8) + j)) = *(data + ((i * 8) + j)) / *(qdata + ((i * 8) + j)) ;
+ }
+ }
+}
+
+void scale_data(DCTELEM * data, DCTELEM scale)
+{
+ int i,j;
+ for (i = 0; i < 8; i++)
+ {
+ for(j=0;j < 8;j++)
+ {
+ *(data + ((i * 8) + j)) = *(data + ((i * 8) + j)) - scale ;
+ }
+ }
+
+}
+/*void dump_data(DCTELEM * data )
+{
+ int i,j;
+ for (i = 0; i < 8; i++)
+ {
+ printf("\n");
+ for(j=0;j < 8;j++)
+ {
+ printf("%d\t",*(data + ((i * 8) + j)));
+ }
+ }
+
+}
+
+void dump_data2(unsigned char * data )
+{
+ int i,j;
+ for (i = 0; i < 8; i++)
+ {
+ printf("\n");
+ for(j=0;j < 8;j++)
+ {
+ printf("%d\t",*(data + ((i * 8) + j)));
+ }
+ }
+
+}
+*/
int main(int argc, char *argv[]) {
int retval, i,j;
- int workspace[DCTSIZE_BLOCK];
- unsigned char blok8x8[64*3];
+ //int workspace[DCTSIZE_BLOCK];
+ unsigned char blok8x8_2[64];
+ int blok8x8[64];
unsigned char type;
unsigned int x_size, y_size, offset;
unsigned char depth;
@@ -78,16 +142,30 @@ int main(int argc, char *argv[]) {
// RGB -> YUV & Convert to 8x8 --> done
BMPto8x8AndYCbCr(i,j,x_size,y_size,offset,depth,Image1,blok8x8);
// DCT
- fdct(blok8x8);
- //fdct(workspace);
-
- // ZZ
-
- // Q
-
- // VLC (huffman)
-
- YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8);
+ // Basic data
+ //dump_data(blok8x8);
+ // Scaling -128
+ scale_data(blok8x8,128);
+ //printf("\nscaled -128\n");
+ // After scale
+ //dump_data(blok8x8);
+ //printf("\nafter DCT\n");
+ jpeg_fdct_ifast(blok8x8);
+ // After dct
+ //dump_data(blok8x8);
+
+ quanize_data(blok8x8,quan_data);
+ //printf("\nafter quantize\n");
+ //dump_data(blok8x8);
+
+ IDCT(blok8x8, blok8x8_2);
+ //printf("\nafter idct\n");
+
+ //dump_data2(blok8x8_2);
+
+ //printf("\n\n");
+
+ YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8_2);
}
}
@@ -108,7 +186,7 @@ int main(int argc, char *argv[]) {
// IDCT
//idct(workspace);
// YUV -> RGB & Convert 8x8 to BMP style &
- YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8);
+ YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8_2);
}
}
WriteBMPHeaderInfo(Image2,offset,x_size,y_size, depth);