1#ifndef JPEG_H
2#define JPEG_H 1
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
29static const u8 jpeg_head[] = {
30 0xff, 0xd8,
31
32
33 0xff, 0xdb, 0x00, 0x84,
340,
35#define JPEG_QT0_OFFSET 7
36 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
37 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
38 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
39 0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
40 0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
41 0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
42 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
43 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
441,
45#define JPEG_QT1_OFFSET 72
46 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
47 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
48 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
49 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
50 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
51 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
52 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
53 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
54
55
56 0xff, 0xc4, 0x01, 0xa2,
57 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01,
58 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
60 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x01, 0x00, 0x03,
61 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
62 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
63 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
64 0x0a, 0x0b, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03,
65 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
66 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04,
67 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13,
68 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
69 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15,
70 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82,
71 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25,
72 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36,
73 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46,
74 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
75 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66,
76 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76,
77 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86,
78 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95,
79 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4,
80 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3,
81 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2,
82 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca,
83 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
84 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
85 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5,
86 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x11, 0x00, 0x02,
87 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
88 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01,
89 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06,
90 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22,
91 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1,
92 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62,
93 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25,
94 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28,
95 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
96 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
97 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
98 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
99 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a,
100 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
101 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
102 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
103 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
104 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
105 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
106 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3,
107 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2,
108 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
109#ifdef CONEX_CAM
110
111#define JPEG_HDR_SZ 556
112#else
113 0xff, 0xc0, 0x00, 0x11,
114 0x08,
115#define JPEG_HEIGHT_OFFSET 561
116 0x01, 0xe0,
117 0x02, 0x80,
118 0x03,
119 0x01,
120 0x21,
121 0x00,
122 0x02, 0x11, 0x01,
123 0x03, 0x11, 0x01,
124
125 0xff, 0xda, 0x00, 0x0c,
126 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
127#define JPEG_HDR_SZ 589
128#endif
129};
130
131
132static void jpeg_define(u8 *jpeg_hdr,
133 int height,
134 int width,
135 int samplesY)
136{
137 memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head);
138#ifndef CONEX_CAM
139 jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8;
140 jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height;
141 jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8;
142 jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width;
143 jpeg_hdr[JPEG_HEIGHT_OFFSET + 6] = samplesY;
144#endif
145}
146
147
148static void jpeg_set_qual(u8 *jpeg_hdr,
149 int quality)
150{
151 int i, sc;
152
153 if (quality <= 0)
154 sc = 5000;
155 else if (quality < 50)
156 sc = 5000 / quality;
157 else
158 sc = 200 - quality * 2;
159 for (i = 0; i < 64; i++) {
160 jpeg_hdr[JPEG_QT0_OFFSET + i] =
161 (jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
162 jpeg_hdr[JPEG_QT1_OFFSET + i] =
163 (jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
164 }
165}
166#endif
167