1 
2 #ifndef _JPEG_DECODER_H_
3 #define _JPEG_DECODER_H_
4 
5 #include <stdint.h>
6 
7 #define JPEG_MARKER_STUFFED		0x00
8 #define JPEG_MARKER_TEM			0x01
9 #define JPEG_MARKER_RES			0x02
10 
11 #define JPEG_MARKER_SOF_0		0xc0
12 #define JPEG_MARKER_SOF_1		0xc1
13 #define JPEG_MARKER_SOF_2		0xc2
14 #define JPEG_MARKER_SOF_3		0xc3
15 #define JPEG_MARKER_DEFINE_HUFFMAN_TABLES		0xc4
16 #define JPEG_MARKER_SOF_5		0xc5
17 #define JPEG_MARKER_SOF_6		0xc6
18 #define JPEG_MARKER_SOF_7		0xc7
19 #define JPEG_MARKER_JPG			0xc8
20 #define JPEG_MARKER_SOF_9		0xc9
21 #define JPEG_MARKER_SOF_10		0xca
22 #define JPEG_MARKER_SOF_11		0xcb
23 #define JPEG_MARKER_DEFINE_ARITHMETIC_CONDITIONING	0xcc
24 #define JPEG_MARKER_SOF_13		0xcd
25 #define JPEG_MARKER_SOF_14		0xce
26 #define JPEG_MARKER_SOF_15		0xcf
27 
28 #define JPEG_MARKER_RST_0		0xd0
29 #define JPEG_MARKER_RST_1		0xd1
30 #define JPEG_MARKER_RST_2		0xd2
31 #define JPEG_MARKER_RST_3		0xd3
32 #define JPEG_MARKER_RST_4		0xd4
33 #define JPEG_MARKER_RST_5		0xd5
34 #define JPEG_MARKER_RST_6		0xd6
35 #define JPEG_MARKER_RST_7		0xd7
36 
37 #define JPEG_MARKER_SOI			0xd8
38 #define JPEG_MARKER_EOI			0xd9
39 #define JPEG_MARKER_SOS			0xda
40 #define JPEG_MARKER_DEFINE_QUANTIZATION_TABLES		0xdb
41 #define JPEG_MARKER_DNL			0xdc
42 #define JPEG_MARKER_DEFINE_RESTART_INTERVAL		0xdd
43 #define JPEG_MARKER_DHP			0xde
44 #define JPEG_MARKER_EXP			0xdf
45 #define JPEG_MARKER_APP(x)		(0xe0 + (x))
46 #define JPEG_MARKER_JPG_(x)		(0xf0 + (x))
47 #define JPEG_MARKER_COMMENT                             0xfe
48 
49 #define JPEG_MARKER_JFIF		JPEG_MARKER_APP(0)
50 
51 #define JPEG_MARKER_IS_START_OF_FRAME(x) ((x)>=0xc0 && (x) <= 0xcf && (x)!=0xc4 && (x)!=0xc8 && (x)!=0xcc)
52 #define JPEG_MARKER_IS_APP(x) ((x)>=0xe0 && (x) <= 0xef)
53 #define JPEG_MARKER_IS_RESET(x) ((x)>=0xd0 && (x)<=0xd7)
54 
55 
56 typedef struct _JpegDecoder JpegDecoder;
57 
58 
59 JpegDecoder *jpeg_decoder_new(void);
60 void jpeg_decoder_free(JpegDecoder *dec);
61 int jpeg_decoder_addbits(JpegDecoder *dec, unsigned char *data, unsigned int len);
62 int jpeg_decoder_decode (JpegDecoder *dec);
63 int jpeg_decoder_get_image_size(JpegDecoder *dec, int *width, int *height);
64 int jpeg_decoder_get_component_size(JpegDecoder *dec, int id,
65 	int *width, int *height);
66 int jpeg_decoder_get_component_subsampling(JpegDecoder *dec, int id,
67 	int *h_subsample, int *v_subsample);
68 int jpeg_decoder_get_component_ptr(JpegDecoder *dec, int id,
69 	unsigned char **image, int *rowstride);
70 
71 unsigned char *jpeg_decoder_get_argb_image (JpegDecoder *dec);
72 int jpeg_decode_argb (uint8_t *data, int length, uint32_t **image,
73     int *width, int *height);
74 
75 #endif
76 
77