blob: 0033c2be68173d9d7863c821f8b5be86a6cc2c3c [file] [log] [blame]
Ed Tanous9140a672017-04-24 17:01:32 -07001#include <aspeed/JTABLES.H>
2
3static unsigned char zigzag[64] = {
4 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42,
5 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53,
6 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60,
7 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63};
8
9static unsigned char dezigzag[64 + 15] = {
10 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40,
11 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36,
12 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61,
13 54, 47, 55, 62, 63,
14 // let corrupt input sample past end
15 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63};
16
17static unsigned char *std_luminance_qt;
18static unsigned char *std_chrominance_qt;
19
20// Standard Huffman tables (cf. JPEG standard section K.3) */
21
22static unsigned char std_dc_luminance_nrcodes[17] = {0, 0, 1, 5, 1, 1, 1, 1, 1,
23 1, 0, 0, 0, 0, 0, 0, 0};
24static unsigned char std_dc_luminance_values[12] = {0, 1, 2, 3, 4, 5,
25 6, 7, 8, 9, 10, 11};
26
27static unsigned char std_dc_chrominance_nrcodes[17] = {
28 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0};
29static unsigned char std_dc_chrominance_values[12] = {0, 1, 2, 3, 4, 5,
30 6, 7, 8, 9, 10, 11};
31
32static unsigned char std_ac_luminance_nrcodes[17] = {
33 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d};
34static unsigned char std_ac_luminance_values[162] = {
35 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06,
36 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
37 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72,
38 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
39 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45,
40 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
41 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75,
42 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
43 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3,
44 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
45 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
46 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
47 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4,
48 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa};
49
50static unsigned char std_ac_chrominance_nrcodes[17] = {
51 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77};
52static unsigned char std_ac_chrominance_values[162] = {
53 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41,
54 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
55 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1,
56 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
57 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44,
58 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
59 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74,
60 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
61 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a,
62 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
63 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
64 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
65 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4,
66 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa};
67
68unsigned short int DC_LUMINANCE_HUFFMANCODE[13 * 2] = {
69 /* 0 */ 0x0000, 0,
70 /* 1 */ 0x4000, 2,
71 /* 2 */ 0x6000, 3,
72 /* 3 */ 0x8000, 3,
73 /* 4 */ 0xA000, 3,
74 /* 5 */ 0xC000, 3,
75 /* 6 */ 0xE000, 3,
76 /* 7 */ 0xF000, 4,
77 /* 8 */ 0xF800, 5,
78 /* 9 */ 0xFC00, 6,
79 /* 10 */ 0xFE00, 7,
80 /* 11 */ 0xFF00, 8,
81 /* 12 */ 0xFFFF, 9,
82};
83
84unsigned short int DC_CHROMINANCE_HUFFMANCODE[13 * 2] = {
85 /* 0 */ 0x0000, 0,
86 /* 1 */ 0x4000, 2,
87 /* 2 */ 0x8000, 2,
88 /* 3 */ 0xC000, 2,
89 /* 4 */ 0xE000, 3,
90 /* 5 */ 0xF000, 4,
91 /* 6 */ 0xF800, 5,
92 /* 7 */ 0xFC00, 6,
93 /* 8 */ 0xFE00, 7,
94 /* 9 */ 0xFF00, 8,
95 /* 10 */ 0xFF80, 9,
96 /* 11 */ 0xFFC0, 10,
97 /* 12 */ 0xFFFF, 11,
98};
99
100unsigned short int AC_LUMINANCE_HUFFMANCODE[39 * 2] = {
101 /* 0 */ 0x0000, 0,
102 /* 1 */ 0x4000, 2,
103 /* 2 */ 0x8000, 2,
104 /* 3 */ 0xA000, 3,
105 /* 4 */ 0xB000, 4,
106 /* 5 */ 0xC000, 4,
107 /* 6 */ 0xD000, 4,
108 /* 7 */ 0xD800, 5,
109 /* 8 */ 0xE000, 5,
110 /* 9 */ 0xE800, 5,
111 /* 10 */ 0xEC00, 6,
112 /* 11 */ 0xF000, 6,
113 /* 12 */ 0xF200, 7,
114 /* 13 */ 0xF400, 7,
115 /* 14 */ 0xF600, 7,
116 /* 15 */ 0xF800, 7,
117 /* 16 */ 0xF900, 8,
118 /* 17 */ 0xFA00, 8,
119 /* 18 */ 0xFB00, 8,
120 /* 19 */ 0xFB80, 9,
121 /* 20 */ 0xFC00, 9,
122 /* 21 */ 0xFC80, 9,
123 /* 22 */ 0xFD00, 9,
124 /* 23 */ 0xFD80, 9,
125 /* 24 */ 0xFDC0, 10,
126 /* 25 */ 0xFE00, 10,
127 /* 26 */ 0xFE40, 10,
128 /* 27 */ 0xFE80, 10,
129 /* 28 */ 0xFEC0, 10,
130 /* 29 */ 0xFEE0, 11,
131 /* 30 */ 0xFF00, 11,
132 /* 31 */ 0xFF20, 11,
133 /* 32 */ 0xFF40, 11,
134 /* 33 */ 0xFF50, 12,
135 /* 34 */ 0xFF60, 12,
136 /* 35 */ 0xFF70, 12,
137 /* 36 */ 0xFF80, 12,
138 /* 37 */ 0xFF82, 15,
139 /* 38 */ 0xFFFF, 16,
140};
141
142unsigned short int AC_CHROMINANCE_HUFFMANCODE[45 * 2] = {
143 /* 0 */ 0x0000, 0,
144 /* 1 */ 0x4000, 2,
145 /* 2 */ 0x8000, 2,
146 /* 3 */ 0xA000, 3,
147 /* 4 */ 0xB000, 4,
148 /* 5 */ 0xC000, 4,
149 /* 6 */ 0xC800, 5,
150 /* 7 */ 0xD000, 5,
151 /* 8 */ 0xD800, 5,
152 /* 9 */ 0xE000, 5,
153 /* 10 */ 0xE400, 6,
154 /* 11 */ 0xE800, 6,
155 /* 12 */ 0xEC00, 6,
156 /* 13 */ 0xF000, 6,
157 /* 14 */ 0xF200, 7,
158 /* 15 */ 0xF400, 7,
159 /* 16 */ 0xF600, 7,
160 /* 17 */ 0xF700, 8,
161 /* 18 */ 0xF800, 8,
162 /* 19 */ 0xF900, 8,
163 /* 20 */ 0xFA00, 8,
164 /* 21 */ 0xFA80, 9,
165 /* 22 */ 0xFB00, 9,
166 /* 23 */ 0xFB80, 9,
167 /* 24 */ 0xFC00, 9,
168 /* 25 */ 0xFC80, 9,
169 /* 26 */ 0xFD00, 9,
170 /* 27 */ 0xFD80, 9,
171 /* 28 */ 0xFDC0, 10,
172 /* 29 */ 0xFE00, 10,
173 /* 30 */ 0xFE40, 10,
174 /* 31 */ 0xFE80, 10,
175 /* 32 */ 0xFEC0, 10,
176 /* 33 */ 0xFEE0, 11,
177 /* 34 */ 0xFF00, 11,
178 /* 35 */ 0xFF20, 11,
179 /* 36 */ 0xFF40, 11,
180 /* 37 */ 0xFF50, 12,
181 /* 38 */ 0xFF60, 12,
182 /* 39 */ 0xFF70, 12,
183 /* 40 */ 0xFF80, 12,
184 /* 41 */ 0xFF84, 14,
185 /* 42 */ 0xFF86, 15,
186 /* 43 */ 0xFF88, 15,
187 /* 44 */ 0xFFFF, 16,
188};
189
190//[100]=========================
191static unsigned char Tbl_100Y[64] = {
192 2, 1, 1, 2, 3, 5, 6, 7, 1, 1, 1, 2, 3, 7, 7, 6,
193 1, 1, 2, 3, 5, 7, 8, 7, 1, 2, 2, 3, 6, 10, 10, 7,
194 2, 2, 4, 7, 8, 13, 12, 9, 3, 4, 6, 8, 10, 13, 14, 11,
195 6, 8, 9, 10, 12, 15, 15, 12, 9, 11, 11, 12, 14, 12, 12, 12};
196static unsigned char Tbl_100UV[64] = {
197 3, 3, 4, 8, 18, 18, 18, 18, 3, 3, 4, 12, 18, 18, 18, 18,
198 4, 4, 10, 18, 18, 18, 18, 18, 8, 12, 18, 18, 18, 18, 18, 18,
199 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
200 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18};
201
202//[086]=========================
203static unsigned char Tbl_086Y[64] = {
204 3, 2, 1, 3, 4, 7, 9, 11, 2, 2, 2, 3, 4, 10, 11, 10,
205 2, 2, 3, 4, 7, 10, 12, 10, 2, 3, 4, 5, 9, 16, 15, 11,
206 3, 4, 6, 10, 12, 20, 19, 14, 4, 6, 10, 12, 15, 19, 21, 17,
207 9, 12, 14, 16, 19, 22, 22, 18, 13, 17, 17, 18, 21, 18, 19, 18};
208static unsigned char Tbl_086UV[64] = {
209 4, 5, 6, 13, 27, 27, 27, 27, 5, 5, 7, 18, 27, 27, 27, 27,
210 6, 7, 15, 27, 27, 27, 27, 27, 13, 18, 27, 27, 27, 27, 27, 27,
211 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
212 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27};
213
214//[071]=========================
215static unsigned char Tbl_071Y[64] = {
216 6, 4, 3, 6, 9, 15, 19, 22, 4, 4, 5, 7, 9, 21, 22, 20,
217 5, 4, 6, 9, 15, 21, 25, 21, 5, 6, 8, 10, 19, 32, 30, 23,
218 6, 8, 13, 21, 25, 40, 38, 28, 9, 13, 20, 24, 30, 39, 42, 34,
219 18, 24, 29, 32, 38, 45, 45, 37, 27, 34, 35, 36, 42, 37, 38, 37};
220static unsigned char Tbl_071UV[64] = {
221 9, 10, 13, 26, 55, 55, 55, 55, 10, 11, 14, 37, 55, 55, 55, 55,
222 13, 14, 31, 55, 55, 55, 55, 55, 26, 37, 55, 55, 55, 55, 55, 55,
223 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
224 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55};
225//[057]=========================
226static unsigned char Tbl_057Y[64] = {
227 9, 6, 5, 9, 13, 22, 28, 34, 6, 6, 7, 10, 14, 32, 33, 30,
228 7, 7, 9, 13, 22, 32, 38, 31, 7, 9, 12, 16, 28, 48, 45, 34,
229 10, 12, 20, 31, 38, 61, 57, 43, 13, 19, 30, 36, 45, 58, 63, 51,
230 27, 36, 43, 48, 57, 68, 67, 56, 40, 51, 53, 55, 63, 56, 57, 55};
231static unsigned char Tbl_057UV[64] = {
232 13, 14, 19, 38, 80, 80, 80, 80, 14, 17, 21, 53, 80, 80, 80, 80,
233 19, 21, 45, 80, 80, 80, 80, 80, 38, 53, 80, 80, 80, 80, 80, 80,
234 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
235 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80};
236
237//[043]=========================
238static unsigned char Tbl_043Y[64] = {
239 11, 7, 7, 11, 17, 28, 36, 43, 8, 8, 10, 13, 18, 41, 43, 39,
240 10, 9, 11, 17, 28, 40, 49, 40, 10, 12, 15, 20, 36, 62, 57, 44,
241 12, 15, 26, 40, 48, 78, 74, 55, 17, 25, 39, 46, 58, 74, 81, 66,
242 35, 46, 56, 62, 74, 86, 86, 72, 51, 66, 68, 70, 80, 71, 74, 71};
243static unsigned char Tbl_043UV[64] = {
244 18, 19, 26, 51, 108, 108, 108, 108, 19, 22, 28, 72, 108,
245 108, 108, 108, 26, 28, 61, 108, 108, 108, 108, 108, 51, 72,
246 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
247 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
248 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108};
249
250//[029]=========================
251static unsigned char Tbl_029Y[64] = {
252 14, 9, 9, 14, 21, 36, 46, 55, 10, 10, 12, 17, 23, 52, 54, 49,
253 12, 11, 14, 21, 36, 51, 62, 50, 12, 15, 19, 26, 46, 78, 72, 56,
254 16, 19, 33, 50, 61, 98, 93, 69, 21, 31, 49, 58, 73, 94, 102, 83,
255 44, 58, 70, 78, 93, 109, 108, 91, 65, 83, 86, 88, 101, 90, 93, 89};
256static unsigned char Tbl_029UV[64] = {
257 22, 24, 32, 63, 133, 133, 133, 133, 24, 28, 34, 88, 133,
258 133, 133, 133, 32, 34, 75, 133, 133, 133, 133, 133, 63, 88,
259 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
260 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
261 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133};
262
263//[014]=========================
264static unsigned char Tbl_014Y[64] = {
265 17, 12, 10, 17, 26, 43, 55, 66, 13, 13, 15, 20, 28, 63, 65, 60,
266 15, 14, 17, 26, 43, 62, 75, 61, 15, 18, 24, 31, 55, 95, 87, 67,
267 19, 24, 40, 61, 74, 119, 112, 84, 26, 38, 60, 70, 88, 113, 123, 100,
268 53, 70, 85, 95, 112, 132, 131, 110, 78, 100, 103, 107, 122, 109, 112, 108};
269static unsigned char Tbl_014UV[64] = {
270 27, 29, 39, 76, 160, 160, 160, 160, 29, 34, 42, 107, 160,
271 160, 160, 160, 39, 42, 91, 160, 160, 160, 160, 160, 76, 107,
272 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
273 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
274 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160};
275//[000]=========================
276static unsigned char Tbl_000Y[64] = {
277 20, 13, 12, 20, 30, 50, 63, 76, 15, 15, 17, 23, 32, 72, 75, 68,
278 17, 16, 20, 30, 50, 71, 86, 70, 17, 21, 27, 36, 63, 108, 100, 77,
279 22, 27, 46, 70, 85, 136, 128, 96, 30, 43, 68, 80, 101, 130, 141, 115,
280 61, 80, 97, 108, 128, 151, 150, 126, 90, 115, 118, 122, 140, 125, 128, 123};
281static unsigned char Tbl_000UV[64] = {
282 31, 33, 45, 88, 185, 185, 185, 185, 33, 39, 48, 123, 185,
283 185, 185, 185, 45, 48, 105, 185, 185, 185, 185, 185, 88, 123,
284 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
285 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
286 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185};