blob: 641fcfb76a4070fbf052d10563727d873a9a2b87 [file] [log] [blame]
Ed Tanous9140a672017-04-24 17:01:32 -07001#pragma once
2static const unsigned char zigzag[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -07003 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42,
4 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53,
5 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60,
6 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63};
7
Ed Tanous9140a672017-04-24 17:01:32 -07008static const unsigned char dezigzag[64 + 15] = {
Ed Tanous93f987d2017-04-17 17:52:36 -07009 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40,
10 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36,
11 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61,
12 54, 47, 55, 62, 63,
13 // let corrupt input sample past end
14 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63};
15
Ed Tanous55c7b7a2018-05-22 15:27:24 -070016static const unsigned char *stdLuminanceQt;
17static const unsigned char *stdChrominanceQt;
Ed Tanous93f987d2017-04-17 17:52:36 -070018
19// Standard Huffman tables (cf. JPEG standard section K.3) */
20
Ed Tanous55c7b7a2018-05-22 15:27:24 -070021static const unsigned char stdDcLuminanceNrcodes[17] = {
Ed Tanous911ac312017-08-15 09:37:42 -070022 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0};
Ed Tanous55c7b7a2018-05-22 15:27:24 -070023static const unsigned char stdDcLuminanceValues[12] = {0, 1, 2, 3, 4, 5,
Ed Tanous911ac312017-08-15 09:37:42 -070024 6, 7, 8, 9, 10, 11};
Ed Tanous93f987d2017-04-17 17:52:36 -070025
Ed Tanous55c7b7a2018-05-22 15:27:24 -070026static const unsigned char stdDcChrominanceNrcodes[17] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070027 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0};
Ed Tanous55c7b7a2018-05-22 15:27:24 -070028static const unsigned char stdDcChrominanceValues[12] = {0, 1, 2, 3, 4, 5,
Ed Tanous911ac312017-08-15 09:37:42 -070029 6, 7, 8, 9, 10, 11};
Ed Tanous93f987d2017-04-17 17:52:36 -070030
Ed Tanous55c7b7a2018-05-22 15:27:24 -070031static const unsigned char stdAcLuminanceNrcodes[17] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070032 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d};
Ed Tanous55c7b7a2018-05-22 15:27:24 -070033static const unsigned char stdAcLuminanceValues[162] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070034 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06,
35 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
36 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72,
37 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
38 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45,
39 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
40 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75,
41 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
42 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3,
43 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
44 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
45 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
46 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4,
47 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa};
48
Ed Tanous55c7b7a2018-05-22 15:27:24 -070049static const unsigned char stdAcChrominanceNrcodes[17] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070050 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77};
Ed Tanous55c7b7a2018-05-22 15:27:24 -070051static const unsigned char stdAcChrominanceValues[162] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070052 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41,
53 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
54 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1,
55 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
56 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44,
57 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
58 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74,
59 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
60 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a,
61 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
62 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
63 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
64 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4,
65 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa};
66
Ed Tanous55c7b7a2018-05-22 15:27:24 -070067static const unsigned short int dcLuminanceHuffmancode[13 * 2] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070068 /* 0 */ 0x0000, 0,
69 /* 1 */ 0x4000, 2,
70 /* 2 */ 0x6000, 3,
71 /* 3 */ 0x8000, 3,
72 /* 4 */ 0xA000, 3,
73 /* 5 */ 0xC000, 3,
74 /* 6 */ 0xE000, 3,
75 /* 7 */ 0xF000, 4,
76 /* 8 */ 0xF800, 5,
77 /* 9 */ 0xFC00, 6,
78 /* 10 */ 0xFE00, 7,
79 /* 11 */ 0xFF00, 8,
80 /* 12 */ 0xFFFF, 9,
81};
82
Ed Tanous55c7b7a2018-05-22 15:27:24 -070083static const unsigned short int dcChrominanceHuffmancode[13 * 2] = {
Ed Tanous93f987d2017-04-17 17:52:36 -070084 /* 0 */ 0x0000, 0,
85 /* 1 */ 0x4000, 2,
86 /* 2 */ 0x8000, 2,
87 /* 3 */ 0xC000, 2,
88 /* 4 */ 0xE000, 3,
89 /* 5 */ 0xF000, 4,
90 /* 6 */ 0xF800, 5,
91 /* 7 */ 0xFC00, 6,
92 /* 8 */ 0xFE00, 7,
93 /* 9 */ 0xFF00, 8,
94 /* 10 */ 0xFF80, 9,
95 /* 11 */ 0xFFC0, 10,
96 /* 12 */ 0xFFFF, 11,
97};
98
Ed Tanous55c7b7a2018-05-22 15:27:24 -070099static const unsigned short int acLuminanceHuffmancode[39 * 2] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700100 /* 0 */ 0x0000, 0,
101 /* 1 */ 0x4000, 2,
102 /* 2 */ 0x8000, 2,
103 /* 3 */ 0xA000, 3,
104 /* 4 */ 0xB000, 4,
105 /* 5 */ 0xC000, 4,
106 /* 6 */ 0xD000, 4,
107 /* 7 */ 0xD800, 5,
108 /* 8 */ 0xE000, 5,
109 /* 9 */ 0xE800, 5,
110 /* 10 */ 0xEC00, 6,
111 /* 11 */ 0xF000, 6,
112 /* 12 */ 0xF200, 7,
113 /* 13 */ 0xF400, 7,
114 /* 14 */ 0xF600, 7,
115 /* 15 */ 0xF800, 7,
116 /* 16 */ 0xF900, 8,
117 /* 17 */ 0xFA00, 8,
118 /* 18 */ 0xFB00, 8,
119 /* 19 */ 0xFB80, 9,
120 /* 20 */ 0xFC00, 9,
121 /* 21 */ 0xFC80, 9,
122 /* 22 */ 0xFD00, 9,
123 /* 23 */ 0xFD80, 9,
124 /* 24 */ 0xFDC0, 10,
125 /* 25 */ 0xFE00, 10,
126 /* 26 */ 0xFE40, 10,
127 /* 27 */ 0xFE80, 10,
128 /* 28 */ 0xFEC0, 10,
129 /* 29 */ 0xFEE0, 11,
130 /* 30 */ 0xFF00, 11,
131 /* 31 */ 0xFF20, 11,
132 /* 32 */ 0xFF40, 11,
133 /* 33 */ 0xFF50, 12,
134 /* 34 */ 0xFF60, 12,
135 /* 35 */ 0xFF70, 12,
136 /* 36 */ 0xFF80, 12,
137 /* 37 */ 0xFF82, 15,
138 /* 38 */ 0xFFFF, 16,
139};
140
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700141static const unsigned short int acChrominanceHuffmancode[45 * 2] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700142 /* 0 */ 0x0000, 0,
143 /* 1 */ 0x4000, 2,
144 /* 2 */ 0x8000, 2,
145 /* 3 */ 0xA000, 3,
146 /* 4 */ 0xB000, 4,
147 /* 5 */ 0xC000, 4,
148 /* 6 */ 0xC800, 5,
149 /* 7 */ 0xD000, 5,
150 /* 8 */ 0xD800, 5,
151 /* 9 */ 0xE000, 5,
152 /* 10 */ 0xE400, 6,
153 /* 11 */ 0xE800, 6,
154 /* 12 */ 0xEC00, 6,
155 /* 13 */ 0xF000, 6,
156 /* 14 */ 0xF200, 7,
157 /* 15 */ 0xF400, 7,
158 /* 16 */ 0xF600, 7,
159 /* 17 */ 0xF700, 8,
160 /* 18 */ 0xF800, 8,
161 /* 19 */ 0xF900, 8,
162 /* 20 */ 0xFA00, 8,
163 /* 21 */ 0xFA80, 9,
164 /* 22 */ 0xFB00, 9,
165 /* 23 */ 0xFB80, 9,
166 /* 24 */ 0xFC00, 9,
167 /* 25 */ 0xFC80, 9,
168 /* 26 */ 0xFD00, 9,
169 /* 27 */ 0xFD80, 9,
170 /* 28 */ 0xFDC0, 10,
171 /* 29 */ 0xFE00, 10,
172 /* 30 */ 0xFE40, 10,
173 /* 31 */ 0xFE80, 10,
174 /* 32 */ 0xFEC0, 10,
175 /* 33 */ 0xFEE0, 11,
176 /* 34 */ 0xFF00, 11,
177 /* 35 */ 0xFF20, 11,
178 /* 36 */ 0xFF40, 11,
179 /* 37 */ 0xFF50, 12,
180 /* 38 */ 0xFF60, 12,
181 /* 39 */ 0xFF70, 12,
182 /* 40 */ 0xFF80, 12,
183 /* 41 */ 0xFF84, 14,
184 /* 42 */ 0xFF86, 15,
185 /* 43 */ 0xFF88, 15,
186 /* 44 */ 0xFFFF, 16,
187};
188
189//[100]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700190static const unsigned char tbl100Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700191 2, 1, 1, 2, 3, 5, 6, 7, 1, 1, 1, 2, 3, 7, 7, 6,
192 1, 1, 2, 3, 5, 7, 8, 7, 1, 2, 2, 3, 6, 10, 10, 7,
193 2, 2, 4, 7, 8, 13, 12, 9, 3, 4, 6, 8, 10, 13, 14, 11,
194 6, 8, 9, 10, 12, 15, 15, 12, 9, 11, 11, 12, 14, 12, 12, 12};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700195static const unsigned char tbl100Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700196 3, 3, 4, 8, 18, 18, 18, 18, 3, 3, 4, 12, 18, 18, 18, 18,
197 4, 4, 10, 18, 18, 18, 18, 18, 8, 12, 18, 18, 18, 18, 18, 18,
198 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
199 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18};
200
201//[086]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700202static const unsigned char tbl086Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700203 3, 2, 1, 3, 4, 7, 9, 11, 2, 2, 2, 3, 4, 10, 11, 10,
204 2, 2, 3, 4, 7, 10, 12, 10, 2, 3, 4, 5, 9, 16, 15, 11,
205 3, 4, 6, 10, 12, 20, 19, 14, 4, 6, 10, 12, 15, 19, 21, 17,
206 9, 12, 14, 16, 19, 22, 22, 18, 13, 17, 17, 18, 21, 18, 19, 18};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700207static const unsigned char tbl086Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700208 4, 5, 6, 13, 27, 27, 27, 27, 5, 5, 7, 18, 27, 27, 27, 27,
209 6, 7, 15, 27, 27, 27, 27, 27, 13, 18, 27, 27, 27, 27, 27, 27,
210 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
211 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27};
212
213//[071]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700214static const unsigned char tbl071Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700215 6, 4, 3, 6, 9, 15, 19, 22, 4, 4, 5, 7, 9, 21, 22, 20,
216 5, 4, 6, 9, 15, 21, 25, 21, 5, 6, 8, 10, 19, 32, 30, 23,
217 6, 8, 13, 21, 25, 40, 38, 28, 9, 13, 20, 24, 30, 39, 42, 34,
218 18, 24, 29, 32, 38, 45, 45, 37, 27, 34, 35, 36, 42, 37, 38, 37};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700219static const unsigned char tbl071Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700220 9, 10, 13, 26, 55, 55, 55, 55, 10, 11, 14, 37, 55, 55, 55, 55,
221 13, 14, 31, 55, 55, 55, 55, 55, 26, 37, 55, 55, 55, 55, 55, 55,
222 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
223 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55};
224//[057]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700225static const unsigned char tbl057Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700226 9, 6, 5, 9, 13, 22, 28, 34, 6, 6, 7, 10, 14, 32, 33, 30,
227 7, 7, 9, 13, 22, 32, 38, 31, 7, 9, 12, 16, 28, 48, 45, 34,
228 10, 12, 20, 31, 38, 61, 57, 43, 13, 19, 30, 36, 45, 58, 63, 51,
229 27, 36, 43, 48, 57, 68, 67, 56, 40, 51, 53, 55, 63, 56, 57, 55};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700230static const unsigned char tbl057Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700231 13, 14, 19, 38, 80, 80, 80, 80, 14, 17, 21, 53, 80, 80, 80, 80,
232 19, 21, 45, 80, 80, 80, 80, 80, 38, 53, 80, 80, 80, 80, 80, 80,
233 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
234 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80};
235
236//[043]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700237static const unsigned char tbl043Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700238 11, 7, 7, 11, 17, 28, 36, 43, 8, 8, 10, 13, 18, 41, 43, 39,
239 10, 9, 11, 17, 28, 40, 49, 40, 10, 12, 15, 20, 36, 62, 57, 44,
240 12, 15, 26, 40, 48, 78, 74, 55, 17, 25, 39, 46, 58, 74, 81, 66,
241 35, 46, 56, 62, 74, 86, 86, 72, 51, 66, 68, 70, 80, 71, 74, 71};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700242static const unsigned char tbl043Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700243 18, 19, 26, 51, 108, 108, 108, 108, 19, 22, 28, 72, 108,
244 108, 108, 108, 26, 28, 61, 108, 108, 108, 108, 108, 51, 72,
245 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
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};
248
249//[029]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700250static const unsigned char tbl029Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700251 14, 9, 9, 14, 21, 36, 46, 55, 10, 10, 12, 17, 23, 52, 54, 49,
252 12, 11, 14, 21, 36, 51, 62, 50, 12, 15, 19, 26, 46, 78, 72, 56,
253 16, 19, 33, 50, 61, 98, 93, 69, 21, 31, 49, 58, 73, 94, 102, 83,
254 44, 58, 70, 78, 93, 109, 108, 91, 65, 83, 86, 88, 101, 90, 93, 89};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700255static const unsigned char tbl029Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700256 22, 24, 32, 63, 133, 133, 133, 133, 24, 28, 34, 88, 133,
257 133, 133, 133, 32, 34, 75, 133, 133, 133, 133, 133, 63, 88,
258 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
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};
261
262//[014]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700263static const unsigned char tbl014Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700264 17, 12, 10, 17, 26, 43, 55, 66, 13, 13, 15, 20, 28, 63, 65, 60,
265 15, 14, 17, 26, 43, 62, 75, 61, 15, 18, 24, 31, 55, 95, 87, 67,
266 19, 24, 40, 61, 74, 119, 112, 84, 26, 38, 60, 70, 88, 113, 123, 100,
267 53, 70, 85, 95, 112, 132, 131, 110, 78, 100, 103, 107, 122, 109, 112, 108};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700268static const unsigned char tbl014Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700269 27, 29, 39, 76, 160, 160, 160, 160, 29, 34, 42, 107, 160,
270 160, 160, 160, 39, 42, 91, 160, 160, 160, 160, 160, 76, 107,
271 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
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};
274//[000]=========================
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700275static const unsigned char tbl000Y[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700276 20, 13, 12, 20, 30, 50, 63, 76, 15, 15, 17, 23, 32, 72, 75, 68,
277 17, 16, 20, 30, 50, 71, 86, 70, 17, 21, 27, 36, 63, 108, 100, 77,
278 22, 27, 46, 70, 85, 136, 128, 96, 30, 43, 68, 80, 101, 130, 141, 115,
279 61, 80, 97, 108, 128, 151, 150, 126, 90, 115, 118, 122, 140, 125, 128, 123};
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700280static const unsigned char tbl000Uv[64] = {
Ed Tanous93f987d2017-04-17 17:52:36 -0700281 31, 33, 45, 88, 185, 185, 185, 185, 33, 39, 48, 123, 185,
282 185, 185, 185, 45, 48, 105, 185, 185, 185, 185, 185, 88, 123,
283 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
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};
286
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700287struct HuffmanTable {
288 unsigned char length[17]; // k =1-16 ; L[k] indicates the number of Huffman
Ed Tanous93f987d2017-04-17 17:52:36 -0700289 // codes of length k
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700290 unsigned short int minorCode[17]; // indicates the value of the smallest
Ed Tanous93f987d2017-04-17 17:52:36 -0700291 // Huffman code of length k
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700292 unsigned short int majorCode[17]; // similar, but the highest code
293 unsigned char v[65536]; // V[k][j] = Value associated to the j-th Huffman
Ed Tanous93f987d2017-04-17 17:52:36 -0700294 // code of length k
295 // High nibble = nr of previous 0 coefficients
296 // Low nibble = size (in bits) of the coefficient which will be taken from the
297 // data stream
Ed Tanous55c7b7a2018-05-22 15:27:24 -0700298 unsigned char len[65536];
Ed Tanous911ac312017-08-15 09:37:42 -0700299};