summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2005-04-13 21:43:13 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2005-04-13 21:43:13 (GMT)
commit3e1f9d1ca1bc599a401ee66793c5aa6885354ac0 (patch)
treea0e6016cecde0c43c72d16ec0938c3a9f4f23d10
parentbad92fb32d5b32fdb478f4c4cbe2daa8d9900cbf (diff)
download5kk53-3e1f9d1ca1bc599a401ee66793c5aa6885354ac0.zip
5kk53-3e1f9d1ca1bc599a401ee66793c5aa6885354ac0.tar.gz
5kk53-3e1f9d1ca1bc599a401ee66793c5aa6885354ac0.tar.bz2
8 and 24 bits working. And PSV just won :-)..
-rw-r--r--src/bmpjpeg.c20
-rw-r--r--src/main.c119
2 files changed, 58 insertions, 81 deletions
diff --git a/src/bmpjpeg.c b/src/bmpjpeg.c
index 3d76e70..a21bfe8 100644
--- a/src/bmpjpeg.c
+++ b/src/bmpjpeg.c
@@ -2,13 +2,14 @@
void BMPto8x8AndYCbCr(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y, int offset, unsigned char depth ,unsigned char *Image, unsigned char *blok8x8)
{
- unsigned char i;
+ unsigned char i,color;
int x,y,Start_point;
+// printf("\nBMPto8x8AndYCbCr:\n");
depth = depth/8;
Start_point = offset + (ImageSize_x*(ImageSize_y-1)+Start_x-(Start_y*ImageSize_x))*depth;
for(i=0;i<(64*depth);i+=depth)
{
- if((i%8)==0) printf("\n");
+// if((i%8)==0) printf("\n");
if((Start_y+(i/(8*depth))) < ImageSize_y)
{
if((Start_x+((i%(8*depth))/depth)) < ImageSize_x)
@@ -20,12 +21,12 @@ void BMPto8x8AndYCbCr(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y
Image[Start_point+(i%(8*depth))+2-(i/(8*depth))*(ImageSize_x*depth)],
&blok8x8[i],&blok8x8[i+1],&blok8x8[i+2]);
- printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]);
+ // printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]);
}
if(depth == 1)
{
- blok8x8[i+0] = Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)];
- printf("%02x ",blok8x8[i]);
+ blok8x8[i] = Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)];
+// printf("%02x ",blok8x8[i]);
}
}
}
@@ -38,11 +39,12 @@ void YCbCrAnd8x8toBMP(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y
{
unsigned char i;
int x,y,Start_point;
+// printf("\nYCbCrAnd8x8toBMP:\n");
depth = depth/8;
Start_point = offset + (ImageSize_x*(ImageSize_y-1)+Start_x-(Start_y*ImageSize_x))*depth;
for(i=0;i<(64*depth);i+=depth)
{
- if((i%8)==0) printf("\n");
+// if((i%8)==0) printf("\n");
if((Start_y+(i/(8*depth))) < ImageSize_y)
{
if((Start_x+((i%(8*depth))/depth)) < ImageSize_x)
@@ -54,12 +56,12 @@ void YCbCrAnd8x8toBMP(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y
&Image[Start_point+(i%(8*depth))+1-(i/(8*depth))*(ImageSize_x*depth)],
&Image[Start_point+(i%(8*depth))+2-(i/(8*depth))*(ImageSize_x*depth)]);
- printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]);
+ // printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]);
}
if(depth == 1)
{
- Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)] = blok8x8[i+0];
- printf("%02x ",blok8x8[i]);
+ Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)] = blok8x8[i];
+// printf("%02x ",blok8x8[i]);
}
}
}
diff --git a/src/main.c b/src/main.c
index 332978c..39d99bb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,30 +6,16 @@
#define ENCODE 0
#define DECODE 1
-#define MAXROWS 1024
-#define MAXCOLS 768
+#define MAXROWS 1200
+#define MAXCOLS 800
#define HEADER 54
unsigned char Image1[MAXCOLS*3*MAXROWS+HEADER];
-
-/*------------------------------------------*/
-/* some constants for on-the-fly IQ and IZZ */
-/*------------------------------------------*/
-
-static const int G_ZZ[] = {
- 0, 1, 8, 16, 9, 2, 3, 10,
- 17, 24, 32, 25, 18, 11, 4, 5,
- 12, 19, 26, 33, 40, 48, 41, 34,
- 27, 20, 13, 6, 7, 14, 21, 28,
- 35, 42, 49, 56, 57, 50, 43, 36,
- 29, 22, 15, 23, 30, 37, 44, 51,
- 58, 59, 52, 45, 38, 31, 39, 46,
- 53, 60, 61, 54, 47, 55, 62, 63
-};
+unsigned char Image2[MAXCOLS*3*MAXROWS+HEADER];
int main(int argc, char *argv[]) {
- int retval, i;
+ int retval, i,j;
int workspace[DCTSIZE_BLOCK];
unsigned char blok8x8[64*3];
unsigned char type;
@@ -71,78 +57,67 @@ int main(int argc, char *argv[]) {
// retval = 0;
+ GetBMPHeaderInfo (Image1,&offset,&x_size,&y_size,&depth);
+ /*printf("Before:");
+ for(i=0;i<(x_size*y_size*3+offset);i++)
+ {
+ if((i%24)==0) printf("\n");
+ printf("%02x ",Image1[i]);
+ }
+*/
+
switch(type) {
case ENCODE:
-
- GetBMPHeaderInfo (Image1,&offset,&x_size,&y_size,&depth);
+ // GetBMPHeaderInfo (Image1,&offset,&x_size,&y_size,&depth);
printf("Image Resolution: %d x %d x %i Offset: %i\n", x_size, y_size, depth, offset);
- // RGB -> YUV ---> done
+ for(i=0;i<x_size;i+=8)
+ {
+ for(j=0;j<y_size;j+=8)
+ {
+ //printf("\nImage Resolution: %i %i\n", i,j);
+ // RGB -> YUV & Convert to 8x8 --> done
+ BMPto8x8AndYCbCr(i,j,x_size,y_size,offset,depth,Image1,blok8x8);
+ // DCT
+ fdct(blok8x8);
+ //fdct(workspace);
- // Convert to 8x8 --> done
- //BMPto8x8AndYCbCr(0,0,x_size,y_size,offset,depth,Image1,blok8x8);
- // DCT
- fdct(workspace);
+ // ZZ
- // ZZ
+ // Q
- // Q
+ // VLC (huffman)
- // VLC (huffman)
+ YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8);
+ }
+ }
break;
case DECODE:
-
GetJPEGHeaderInfo (Image1,&offset,&x_size,&y_size,&depth);
- // VLD (huffman)
-
- // IQ
+ for(i=0;i<x_size;i+=8)
+ {
+ for(j=0;j<y_size;j+=8)
+ {
- // ZZ
+ // VLD (huffman)
- // IDCT
- //idct(workspace);
- // Convert 8x8 to BMP style -> done
- // YUV -> RGB
- // YCbCrAnd8x8toBMP()
- // WriteBMPHeaderInfo(Image1,offset,x_size,y_size, depth);
+ // IQ
- break;
- }
+ // ZZ
+ // IDCT
+ //idct(workspace);
+ // YUV -> RGB & Convert 8x8 to BMP style &
+ YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8);
+ }
+ }
+ WriteBMPHeaderInfo(Image2,offset,x_size,y_size, depth);
- printf("Before:");
- for(i=0;i<(x_size*y_size*3);i++)
- {
- if((i%24)==0) printf("\n");
- printf("%02x ",Image1[i+offset]);
- }
- printf("\nBMPto8x8 functie\n");
-
- BMPto8x8AndYCbCr(0,0,x_size,y_size,offset,depth,Image1,blok8x8);
- printf("\n8x8 Blok:\n");
- for(i=0;i<64;i++)
- {
- printf("%02x",blok8x8[i]);
- }
-
- for(i=0;i<(x_size*y_size*3);i++)
- {
- Image1[i+offset] = 0;
- }
-
- printf("\n8x8toBMP functie\n");
- YCbCrAnd8x8toBMP(0,0,x_size,y_size,offset,depth,Image1,blok8x8);
-
- printf("\nAfter:\n");
- for(i=0;i<(x_size*y_size*3);i++)
- {
- if((i%24)==0) printf("\n");
- printf("%02x ",Image1[i+offset]);
+ break;
}
-
-
+ WriteBMPHeaderInfo(Image2,offset,x_size,y_size, depth);
//Write Image to the output file.
- fwrite(Image1, sizeof(unsigned char), (x_size*y_size*(depth/8))+offset, fO);
+ fwrite(Image2, sizeof(unsigned char), (x_size*y_size*(depth/8))+offset, fO);
fclose(fI);
fclose(fO);