summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2005-06-02 12:44:58 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2005-06-02 12:44:58 (GMT)
commitf4cc8f1906c41a06cd69878094427fe21f7d2912 (patch)
treeddee88f322b0dcaf086cd13b29b1c6cfc28c51eb
parent5105c699551b511db93d9a65f2e51964f24ee271 (diff)
download5kk53-f4cc8f1906c41a06cd69878094427fe21f7d2912.zip
5kk53-f4cc8f1906c41a06cd69878094427fe21f7d2912.tar.gz
5kk53-f4cc8f1906c41a06cd69878094427fe21f7d2912.tar.bz2
Update for reading
-rw-r--r--src/jpeg.c71
1 files changed, 54 insertions, 17 deletions
diff --git a/src/jpeg.c b/src/jpeg.c
index 5c779ea..c90fe5b 100644
--- a/src/jpeg.c
+++ b/src/jpeg.c
@@ -1,14 +1,20 @@
#define SOI_MK 0xFFD8 /* start of image */
+#define APP_MK 0xFFE0 /* custom, up to FFEF */
+#define COM_MK 0xFFFE /* commment segment */
#define SOF_MK 0xFFC0 /* start of frame */
-#define EOI_MK 0xFFD9 /* end of image */
+#define SOS_MK 0xFFDA /* start of scan */
+#define DHT_MK 0xFFC4 /* Huffman table */
+#define DQT_MK 0xFFDB /* Quant. table */
#define DRI_MK 0xFFDD /* restart interval */
+#define EOI_MK 0xFFD9 /* end of image */
+#define MK_MSK 0xFFF0
#define get_size(fi) (((unsigned int)Image[fi]) << 8) + (unsigned int)Image[fi+1]
unsigned char GetJPEGHeaderInfo (unsigned char *Image,unsigned int *offset,unsigned int *x_size,unsigned int *y_size, unsigned char *depth)
{
unsigned int aux;
- int hCounter = 0;
+ int hCounter = 0, hAantal;
/* First find the SOI marker: */
aux = get_size(hCounter); hCounter+=2;
if (aux != SOI_MK)
@@ -17,13 +23,30 @@ unsigned char GetJPEGHeaderInfo (unsigned char *Image,unsigned int *offset,unsig
printf("%ld:\tINFO:\tFound the SOI marker!\n", hCounter);
/* Read first marker */
- while( aux != SOF_MK)
+ while( (aux != EOI_MK) && (aux != 0))
{
aux = get_size(hCounter); hCounter+=2;
- if(aux == SOF_MK)
+ switch(aux)
{
- get_size(hCounter); hCounter+=2; /* header size, don't care */
+ case APP_MK:
+ hAantal = get_size(hCounter);
+ printf("\tJFIF marker - APP0 Marker size: %i Count: %i\n", hAantal,hCounter);
+ printf("\tversion: %02x%02x units %x Xdensity %i Ydensity %i Xthumbnail %i Ythumbnail %i",
+ Image[hCounter+7],Image[hCounter+8],Image[hCounter+9],get_size(hCounter+10),get_size(hCounter+12)
+ ,Image[hCounter+14],Image[hCounter+15]);
+ hCounter = hCounter + hAantal;
+ break;
+ case COM_MK:
+ hAantal = get_size(hCounter);
+ printf("\tcommment segment Marker size: %i Count: %i\n", hAantal,hCounter);
+ hCounter = hCounter + hAantal;
+ break;
+ case SOF_MK:
+ hAantal= get_size(hCounter); /* header size */
+ printf("\tSOF: %i Count: %i\n", hAantal,hCounter);
+ hAantal= hCounter + get_size(hCounter);
+ hCounter+=2;
/* load basic image parameters */
hCounter++; /* precision, 8bit, don't care */
*y_size = get_size(hCounter); hCounter+=2;
@@ -36,27 +59,41 @@ unsigned char GetJPEGHeaderInfo (unsigned char *Image,unsigned int *offset,unsig
printf("\tINFO:\t");
switch (*depth)
{
- case 1:
- printf("Monochrome");
- break;
- case 3:
- printf("Color");
- break;
- default:
- printf("Not a");
- break;
+ case 1: printf("Monochrome"); break;
+ case 3: printf("Color"); break;
+ default: printf("Not a"); break;
}
printf(" JPEG image!\n");
+ hCounter = hAantal;
- return 0;
- }
- else
+ break;
+ case DHT_MK:
+ hAantal = get_size(hCounter);
+ printf("\tHuffman table size: %i Count: %i\n", hAantal,hCounter);
+ hCounter = hCounter + hAantal;
+ break;
+ case DQT_MK:
+ hAantal = get_size(hCounter);
+ printf("\tQuant. table size: %i Count: %i\n", hAantal,hCounter);
+ hCounter = hCounter + hAantal;
+ break;
+ default:
+ hAantal = get_size(hCounter);
+ printf("\tOverig nl: %04X Count: %i, aantal: %i\n", aux,hCounter, hAantal);
hCounter = hCounter + get_size(hCounter);
+ }
}
+ printf("\tEinde op: aux: %04X Count: %i \n", aux, hCounter);
return 1;
}
unsigned char WriteJPEGHeaderInfo (unsigned char *Image,unsigned int offset,unsigned int x_size,unsigned int y_size, unsigned char depth)
{
+ // SOI marker + JFIF marker - APP0 Marker size: 16 Count: 4
+
+ // version: 0102 units 1 Xdensity 300 Ydensity 300 Xthumbnail 0 Ythumbnail 0
+ // FF,D8,FF,E0,00,10,4A,46,49,46,00,01,02,01,01,2C,01,2C,00,00
+
+
return 0;
}