diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 104 |
1 files changed, 91 insertions, 13 deletions
@@ -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); |