summaryrefslogtreecommitdiffstats
path: root/src/jpeg.c
blob: 5c779ea4e753339f10c00cb123d0fc5e75e0436b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#define SOI_MK	0xFFD8		/* start of image	*/
#define SOF_MK	0xFFC0		/* start of frame	*/
#define EOI_MK	0xFFD9		/* end of image		*/
#define DRI_MK	0xFFDD		/* restart interval	*/

#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;
  	/* First find the SOI marker: */
  		aux = get_size(hCounter); hCounter+=2;
  		if (aux != SOI_MK)
  		{ printf("INFO:\tNO SOI marker!\n"); return 0;}

    	printf("%ld:\tINFO:\tFound the SOI marker!\n", hCounter);

		/* Read first marker */
		while( aux != SOF_MK)
		{
			aux = get_size(hCounter); hCounter+=2;
			if(aux == SOF_MK)
			{
			  get_size(hCounter); hCounter+=2;	/* header size, don't care */

	    	  /* load basic image parameters */
	    	  hCounter++;	/* precision, 8bit, don't care */
	    	  *y_size = get_size(hCounter); hCounter+=2;
	    	  *x_size = get_size(hCounter); hCounter+=2;

	    	  printf("\tINFO:\tImage size is %d by %d\n", *x_size, *y_size);

	    	  *depth = Image[hCounter];	/* # of components */

			  printf("\tINFO:\t");
			  switch (*depth)
			  {
			  	  case 1:
			      printf("Monochrome");
			      break;
			  	  case 3:
			      printf("Color");
			      break;
			  	  default:
			  	    printf("Not a");
			      break;
			    }
			  printf(" JPEG image!\n");

	    	  return 0;
			}
			else
				hCounter = hCounter + get_size(hCounter);
		}
	return 1;
}

unsigned char WriteJPEGHeaderInfo (unsigned char *Image,unsigned int offset,unsigned int x_size,unsigned int y_size, unsigned char depth)
{
	return 0;
}