1 //***************************************************************************/
2 // This software is released under the 2-Clause BSD license, included
5 // Copyright (c) 2021, Aous Naman
6 // Copyright (c) 2021, Kakadu Software Pty Ltd, Australia
7 // Copyright (c) 2021, The University of New South Wales, Australia
9 // Redistribution and use in source and binary forms, with or without
10 // modification, are permitted provided that the following conditions are
13 // 1. Redistributions of source code must retain the above copyright
14 // notice, this list of conditions and the following disclaimer.
16 // 2. Redistributions in binary form must reproduce the above copyright
17 // notice, this list of conditions and the following disclaimer in the
18 // documentation and/or other materials provided with the distribution.
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21 // IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
26 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 //***************************************************************************/
32 // This file is part of the OpenJpeg software implementation.
33 // File: t1_ht_generate_luts.c
35 // Date: 01 September 2021
36 //***************************************************************************/
46 #include "opj_stdint.h"
48 typedef int8_t OPJ_INT8;
49 typedef uint8_t OPJ_UINT8;
50 typedef int16_t OPJ_INT16;
51 typedef uint16_t OPJ_UINT16;
52 typedef int32_t OPJ_INT32;
53 typedef uint32_t OPJ_UINT32;
54 typedef int64_t OPJ_INT64;
55 typedef uint64_t OPJ_UINT64;
57 //************************************************************************/
58 /** @brief HT decoding tables, as given in the standard
60 * Data in the table is arranged in this format:
61 * c_q is the context for a quad
62 * rho is the signficance pattern for a quad
63 * u_off indicate if u value is 0 (u_off is 0), or communicated
64 * e_k, e_1 EMB patterns
66 * cwd VLC codeword length
68 typedef struct vlc_src_table {
69 int c_q, rho, u_off, e_k, e_1, cwd, cwd_len;
74 static vlc_src_table_t tbl0[] = {
75 {0, 0x1, 0x0, 0x0, 0x0, 0x06, 4},
76 {0, 0x1, 0x1, 0x1, 0x1, 0x3F, 7},
77 {0, 0x2, 0x0, 0x0, 0x0, 0x00, 3},
78 {0, 0x2, 0x1, 0x2, 0x2, 0x7F, 7},
79 {0, 0x3, 0x0, 0x0, 0x0, 0x11, 5},
80 {0, 0x3, 0x1, 0x2, 0x2, 0x5F, 7},
81 {0, 0x3, 0x1, 0x3, 0x1, 0x1F, 7},
82 {0, 0x4, 0x0, 0x0, 0x0, 0x02, 3},
83 {0, 0x4, 0x1, 0x4, 0x4, 0x13, 6},
84 {0, 0x5, 0x0, 0x0, 0x0, 0x0E, 5},
85 {0, 0x5, 0x1, 0x4, 0x4, 0x23, 6},
86 {0, 0x5, 0x1, 0x5, 0x1, 0x0F, 7},
87 {0, 0x6, 0x0, 0x0, 0x0, 0x03, 6},
88 {0, 0x6, 0x1, 0x0, 0x0, 0x6F, 7},
89 {0, 0x7, 0x0, 0x0, 0x0, 0x2F, 7},
90 {0, 0x7, 0x1, 0x2, 0x2, 0x4F, 7},
91 {0, 0x7, 0x1, 0x2, 0x0, 0x0D, 6},
92 {0, 0x8, 0x0, 0x0, 0x0, 0x04, 3},
93 {0, 0x8, 0x1, 0x8, 0x8, 0x3D, 6},
94 {0, 0x9, 0x0, 0x0, 0x0, 0x1D, 6},
95 {0, 0x9, 0x1, 0x0, 0x0, 0x2D, 6},
96 {0, 0xA, 0x0, 0x0, 0x0, 0x01, 5},
97 {0, 0xA, 0x1, 0x8, 0x8, 0x35, 6},
98 {0, 0xA, 0x1, 0xA, 0x2, 0x77, 7},
99 {0, 0xB, 0x0, 0x0, 0x0, 0x37, 7},
100 {0, 0xB, 0x1, 0x1, 0x1, 0x57, 7},
101 {0, 0xB, 0x1, 0x1, 0x0, 0x09, 6},
102 {0, 0xC, 0x0, 0x0, 0x0, 0x1E, 5},
103 {0, 0xC, 0x1, 0xC, 0xC, 0x17, 7},
104 {0, 0xC, 0x1, 0xC, 0x4, 0x15, 6},
105 {0, 0xC, 0x1, 0xC, 0x8, 0x25, 6},
106 {0, 0xD, 0x0, 0x0, 0x0, 0x67, 7},
107 {0, 0xD, 0x1, 0x1, 0x1, 0x27, 7},
108 {0, 0xD, 0x1, 0x5, 0x4, 0x47, 7},
109 {0, 0xD, 0x1, 0xD, 0x8, 0x07, 7},
110 {0, 0xE, 0x0, 0x0, 0x0, 0x7B, 7},
111 {0, 0xE, 0x1, 0x2, 0x2, 0x4B, 7},
112 {0, 0xE, 0x1, 0xA, 0x8, 0x05, 6},
113 {0, 0xE, 0x1, 0xE, 0x4, 0x3B, 7},
114 {0, 0xF, 0x0, 0x0, 0x0, 0x5B, 7},
115 {0, 0xF, 0x1, 0x9, 0x9, 0x1B, 7},
116 {0, 0xF, 0x1, 0xB, 0xA, 0x6B, 7},
117 {0, 0xF, 0x1, 0xF, 0xC, 0x2B, 7},
118 {0, 0xF, 0x1, 0xF, 0x8, 0x39, 6},
119 {0, 0xF, 0x1, 0xE, 0x6, 0x73, 7},
120 {0, 0xF, 0x1, 0xE, 0x2, 0x19, 6},
121 {0, 0xF, 0x1, 0xF, 0x5, 0x0B, 7},
122 {0, 0xF, 0x1, 0xF, 0x4, 0x29, 6},
123 {0, 0xF, 0x1, 0xF, 0x1, 0x33, 7},
124 {1, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
125 {1, 0x1, 0x0, 0x0, 0x0, 0x0E, 4},
126 {1, 0x1, 0x1, 0x1, 0x1, 0x1F, 7},
127 {1, 0x2, 0x0, 0x0, 0x0, 0x06, 4},
128 {1, 0x2, 0x1, 0x2, 0x2, 0x3B, 6},
129 {1, 0x3, 0x0, 0x0, 0x0, 0x1B, 6},
130 {1, 0x3, 0x1, 0x0, 0x0, 0x3D, 6},
131 {1, 0x4, 0x0, 0x0, 0x0, 0x0A, 4},
132 {1, 0x4, 0x1, 0x4, 0x4, 0x2B, 6},
133 {1, 0x5, 0x0, 0x0, 0x0, 0x0B, 6},
134 {1, 0x5, 0x1, 0x4, 0x4, 0x33, 6},
135 {1, 0x5, 0x1, 0x5, 0x1, 0x7F, 7},
136 {1, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
137 {1, 0x6, 0x1, 0x0, 0x0, 0x23, 6},
138 {1, 0x7, 0x0, 0x0, 0x0, 0x3F, 7},
139 {1, 0x7, 0x1, 0x2, 0x2, 0x5F, 7},
140 {1, 0x7, 0x1, 0x2, 0x0, 0x03, 6},
141 {1, 0x8, 0x0, 0x0, 0x0, 0x02, 4},
142 {1, 0x8, 0x1, 0x8, 0x8, 0x1D, 6},
143 {1, 0x9, 0x0, 0x0, 0x0, 0x2D, 6},
144 {1, 0x9, 0x1, 0x0, 0x0, 0x0D, 6},
145 {1, 0xA, 0x0, 0x0, 0x0, 0x35, 6},
146 {1, 0xA, 0x1, 0x8, 0x8, 0x15, 6},
147 {1, 0xA, 0x1, 0xA, 0x2, 0x6F, 7},
148 {1, 0xB, 0x0, 0x0, 0x0, 0x2F, 7},
149 {1, 0xB, 0x1, 0x1, 0x1, 0x4F, 7},
150 {1, 0xB, 0x1, 0x1, 0x0, 0x11, 6},
151 {1, 0xC, 0x0, 0x0, 0x0, 0x01, 5},
152 {1, 0xC, 0x1, 0x8, 0x8, 0x25, 6},
153 {1, 0xC, 0x1, 0xC, 0x4, 0x05, 6},
154 {1, 0xD, 0x0, 0x0, 0x0, 0x0F, 7},
155 {1, 0xD, 0x1, 0x1, 0x1, 0x17, 7},
156 {1, 0xD, 0x1, 0x5, 0x4, 0x39, 6},
157 {1, 0xD, 0x1, 0xD, 0x8, 0x77, 7},
158 {1, 0xE, 0x0, 0x0, 0x0, 0x37, 7},
159 {1, 0xE, 0x1, 0x2, 0x2, 0x57, 7},
160 {1, 0xE, 0x1, 0xA, 0x8, 0x19, 6},
161 {1, 0xE, 0x1, 0xE, 0x4, 0x67, 7},
162 {1, 0xF, 0x0, 0x0, 0x0, 0x07, 7},
163 {1, 0xF, 0x1, 0xB, 0x8, 0x29, 6},
164 {1, 0xF, 0x1, 0x8, 0x8, 0x27, 7},
165 {1, 0xF, 0x1, 0xA, 0x2, 0x09, 6},
166 {1, 0xF, 0x1, 0xE, 0x4, 0x31, 6},
167 {1, 0xF, 0x1, 0xF, 0x1, 0x47, 7},
168 {2, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
169 {2, 0x1, 0x0, 0x0, 0x0, 0x0E, 4},
170 {2, 0x1, 0x1, 0x1, 0x1, 0x1B, 6},
171 {2, 0x2, 0x0, 0x0, 0x0, 0x06, 4},
172 {2, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
173 {2, 0x3, 0x0, 0x0, 0x0, 0x2B, 6},
174 {2, 0x3, 0x1, 0x1, 0x1, 0x33, 6},
175 {2, 0x3, 0x1, 0x3, 0x2, 0x7F, 7},
176 {2, 0x4, 0x0, 0x0, 0x0, 0x0A, 4},
177 {2, 0x4, 0x1, 0x4, 0x4, 0x0B, 6},
178 {2, 0x5, 0x0, 0x0, 0x0, 0x01, 5},
179 {2, 0x5, 0x1, 0x5, 0x5, 0x2F, 7},
180 {2, 0x5, 0x1, 0x5, 0x1, 0x13, 6},
181 {2, 0x5, 0x1, 0x5, 0x4, 0x23, 6},
182 {2, 0x6, 0x0, 0x0, 0x0, 0x03, 6},
183 {2, 0x6, 0x1, 0x0, 0x0, 0x5F, 7},
184 {2, 0x7, 0x0, 0x0, 0x0, 0x1F, 7},
185 {2, 0x7, 0x1, 0x2, 0x2, 0x6F, 7},
186 {2, 0x7, 0x1, 0x3, 0x1, 0x11, 6},
187 {2, 0x7, 0x1, 0x7, 0x4, 0x37, 7},
188 {2, 0x8, 0x0, 0x0, 0x0, 0x02, 4},
189 {2, 0x8, 0x1, 0x8, 0x8, 0x4F, 7},
190 {2, 0x9, 0x0, 0x0, 0x0, 0x3D, 6},
191 {2, 0x9, 0x1, 0x0, 0x0, 0x1D, 6},
192 {2, 0xA, 0x0, 0x0, 0x0, 0x2D, 6},
193 {2, 0xA, 0x1, 0x0, 0x0, 0x0D, 6},
194 {2, 0xB, 0x0, 0x0, 0x0, 0x0F, 7},
195 {2, 0xB, 0x1, 0x2, 0x2, 0x77, 7},
196 {2, 0xB, 0x1, 0x2, 0x0, 0x35, 6},
197 {2, 0xC, 0x0, 0x0, 0x0, 0x15, 6},
198 {2, 0xC, 0x1, 0x4, 0x4, 0x25, 6},
199 {2, 0xC, 0x1, 0xC, 0x8, 0x57, 7},
200 {2, 0xD, 0x0, 0x0, 0x0, 0x17, 7},
201 {2, 0xD, 0x1, 0x8, 0x8, 0x05, 6},
202 {2, 0xD, 0x1, 0xC, 0x4, 0x39, 6},
203 {2, 0xD, 0x1, 0xD, 0x1, 0x67, 7},
204 {2, 0xE, 0x0, 0x0, 0x0, 0x27, 7},
205 {2, 0xE, 0x1, 0x2, 0x2, 0x7B, 7},
206 {2, 0xE, 0x1, 0x2, 0x0, 0x19, 6},
207 {2, 0xF, 0x0, 0x0, 0x0, 0x47, 7},
208 {2, 0xF, 0x1, 0xF, 0x1, 0x29, 6},
209 {2, 0xF, 0x1, 0x1, 0x1, 0x09, 6},
210 {2, 0xF, 0x1, 0x3, 0x2, 0x07, 7},
211 {2, 0xF, 0x1, 0x7, 0x4, 0x31, 6},
212 {2, 0xF, 0x1, 0xF, 0x8, 0x3B, 7},
213 {3, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
214 {3, 0x1, 0x0, 0x0, 0x0, 0x04, 4},
215 {3, 0x1, 0x1, 0x1, 0x1, 0x3D, 6},
216 {3, 0x2, 0x0, 0x0, 0x0, 0x0C, 5},
217 {3, 0x2, 0x1, 0x2, 0x2, 0x4F, 7},
218 {3, 0x3, 0x0, 0x0, 0x0, 0x1D, 6},
219 {3, 0x3, 0x1, 0x1, 0x1, 0x05, 6},
220 {3, 0x3, 0x1, 0x3, 0x2, 0x7F, 7},
221 {3, 0x4, 0x0, 0x0, 0x0, 0x16, 5},
222 {3, 0x4, 0x1, 0x4, 0x4, 0x2D, 6},
223 {3, 0x5, 0x0, 0x0, 0x0, 0x06, 5},
224 {3, 0x5, 0x1, 0x5, 0x5, 0x1A, 5},
225 {3, 0x5, 0x1, 0x5, 0x1, 0x0D, 6},
226 {3, 0x5, 0x1, 0x5, 0x4, 0x35, 6},
227 {3, 0x6, 0x0, 0x0, 0x0, 0x3F, 7},
228 {3, 0x6, 0x1, 0x4, 0x4, 0x5F, 7},
229 {3, 0x6, 0x1, 0x6, 0x2, 0x1F, 7},
230 {3, 0x7, 0x0, 0x0, 0x0, 0x6F, 7},
231 {3, 0x7, 0x1, 0x6, 0x6, 0x2F, 7},
232 {3, 0x7, 0x1, 0x6, 0x4, 0x15, 6},
233 {3, 0x7, 0x1, 0x7, 0x3, 0x77, 7},
234 {3, 0x7, 0x1, 0x7, 0x1, 0x25, 6},
235 {3, 0x7, 0x1, 0x7, 0x2, 0x0F, 7},
236 {3, 0x8, 0x0, 0x0, 0x0, 0x0A, 5},
237 {3, 0x8, 0x1, 0x8, 0x8, 0x07, 7},
238 {3, 0x9, 0x0, 0x0, 0x0, 0x39, 6},
239 {3, 0x9, 0x1, 0x1, 0x1, 0x37, 7},
240 {3, 0x9, 0x1, 0x9, 0x8, 0x57, 7},
241 {3, 0xA, 0x0, 0x0, 0x0, 0x19, 6},
242 {3, 0xA, 0x1, 0x8, 0x8, 0x29, 6},
243 {3, 0xA, 0x1, 0xA, 0x2, 0x17, 7},
244 {3, 0xB, 0x0, 0x0, 0x0, 0x67, 7},
245 {3, 0xB, 0x1, 0xB, 0x1, 0x27, 7},
246 {3, 0xB, 0x1, 0x1, 0x1, 0x47, 7},
247 {3, 0xB, 0x1, 0x3, 0x2, 0x09, 6},
248 {3, 0xB, 0x1, 0xB, 0x8, 0x7B, 7},
249 {3, 0xC, 0x0, 0x0, 0x0, 0x31, 6},
250 {3, 0xC, 0x1, 0x4, 0x4, 0x11, 6},
251 {3, 0xC, 0x1, 0xC, 0x8, 0x3B, 7},
252 {3, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
253 {3, 0xD, 0x1, 0x9, 0x9, 0x1B, 7},
254 {3, 0xD, 0x1, 0xD, 0x5, 0x2B, 7},
255 {3, 0xD, 0x1, 0xD, 0x1, 0x21, 6},
256 {3, 0xD, 0x1, 0xD, 0xC, 0x6B, 7},
257 {3, 0xD, 0x1, 0xD, 0x4, 0x01, 6},
258 {3, 0xD, 0x1, 0xD, 0x8, 0x4B, 7},
259 {3, 0xE, 0x0, 0x0, 0x0, 0x0B, 7},
260 {3, 0xE, 0x1, 0xE, 0x4, 0x73, 7},
261 {3, 0xE, 0x1, 0x4, 0x4, 0x13, 7},
262 {3, 0xE, 0x1, 0xC, 0x8, 0x3E, 6},
263 {3, 0xE, 0x1, 0xE, 0x2, 0x33, 7},
264 {3, 0xF, 0x0, 0x0, 0x0, 0x53, 7},
265 {3, 0xF, 0x1, 0xA, 0xA, 0x0E, 6},
266 {3, 0xF, 0x1, 0xB, 0x9, 0x63, 7},
267 {3, 0xF, 0x1, 0xF, 0xC, 0x03, 7},
268 {3, 0xF, 0x1, 0xF, 0x8, 0x12, 5},
269 {3, 0xF, 0x1, 0xE, 0x6, 0x23, 7},
270 {3, 0xF, 0x1, 0xF, 0x5, 0x1E, 6},
271 {3, 0xF, 0x1, 0xF, 0x4, 0x02, 5},
272 {3, 0xF, 0x1, 0xF, 0x3, 0x43, 7},
273 {3, 0xF, 0x1, 0xF, 0x1, 0x1C, 5},
274 {3, 0xF, 0x1, 0xF, 0x2, 0x2E, 6},
275 {4, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
276 {4, 0x1, 0x0, 0x0, 0x0, 0x0E, 4},
277 {4, 0x1, 0x1, 0x1, 0x1, 0x3F, 7},
278 {4, 0x2, 0x0, 0x0, 0x0, 0x06, 4},
279 {4, 0x2, 0x1, 0x2, 0x2, 0x1B, 6},
280 {4, 0x3, 0x0, 0x0, 0x0, 0x2B, 6},
281 {4, 0x3, 0x1, 0x2, 0x2, 0x3D, 6},
282 {4, 0x3, 0x1, 0x3, 0x1, 0x7F, 7},
283 {4, 0x4, 0x0, 0x0, 0x0, 0x0A, 4},
284 {4, 0x4, 0x1, 0x4, 0x4, 0x5F, 7},
285 {4, 0x5, 0x0, 0x0, 0x0, 0x0B, 6},
286 {4, 0x5, 0x1, 0x0, 0x0, 0x33, 6},
287 {4, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
288 {4, 0x6, 0x1, 0x0, 0x0, 0x23, 6},
289 {4, 0x7, 0x0, 0x0, 0x0, 0x1F, 7},
290 {4, 0x7, 0x1, 0x4, 0x4, 0x6F, 7},
291 {4, 0x7, 0x1, 0x4, 0x0, 0x03, 6},
292 {4, 0x8, 0x0, 0x0, 0x0, 0x02, 4},
293 {4, 0x8, 0x1, 0x8, 0x8, 0x1D, 6},
294 {4, 0x9, 0x0, 0x0, 0x0, 0x11, 6},
295 {4, 0x9, 0x1, 0x0, 0x0, 0x77, 7},
296 {4, 0xA, 0x0, 0x0, 0x0, 0x01, 5},
297 {4, 0xA, 0x1, 0xA, 0xA, 0x2F, 7},
298 {4, 0xA, 0x1, 0xA, 0x2, 0x2D, 6},
299 {4, 0xA, 0x1, 0xA, 0x8, 0x0D, 6},
300 {4, 0xB, 0x0, 0x0, 0x0, 0x4F, 7},
301 {4, 0xB, 0x1, 0xB, 0x2, 0x0F, 7},
302 {4, 0xB, 0x1, 0x0, 0x0, 0x35, 6},
303 {4, 0xC, 0x0, 0x0, 0x0, 0x15, 6},
304 {4, 0xC, 0x1, 0x8, 0x8, 0x25, 6},
305 {4, 0xC, 0x1, 0xC, 0x4, 0x37, 7},
306 {4, 0xD, 0x0, 0x0, 0x0, 0x57, 7},
307 {4, 0xD, 0x1, 0x1, 0x1, 0x07, 7},
308 {4, 0xD, 0x1, 0x1, 0x0, 0x05, 6},
309 {4, 0xE, 0x0, 0x0, 0x0, 0x17, 7},
310 {4, 0xE, 0x1, 0x4, 0x4, 0x39, 6},
311 {4, 0xE, 0x1, 0xC, 0x8, 0x19, 6},
312 {4, 0xE, 0x1, 0xE, 0x2, 0x67, 7},
313 {4, 0xF, 0x0, 0x0, 0x0, 0x27, 7},
314 {4, 0xF, 0x1, 0x9, 0x9, 0x47, 7},
315 {4, 0xF, 0x1, 0x9, 0x1, 0x29, 6},
316 {4, 0xF, 0x1, 0x7, 0x6, 0x7B, 7},
317 {4, 0xF, 0x1, 0x7, 0x2, 0x09, 6},
318 {4, 0xF, 0x1, 0xB, 0x8, 0x31, 6},
319 {4, 0xF, 0x1, 0xF, 0x4, 0x3B, 7},
320 {5, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
321 {5, 0x1, 0x0, 0x0, 0x0, 0x1A, 5},
322 {5, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
323 {5, 0x2, 0x0, 0x0, 0x0, 0x0A, 5},
324 {5, 0x2, 0x1, 0x2, 0x2, 0x1D, 6},
325 {5, 0x3, 0x0, 0x0, 0x0, 0x2D, 6},
326 {5, 0x3, 0x1, 0x3, 0x3, 0x5F, 7},
327 {5, 0x3, 0x1, 0x3, 0x2, 0x39, 6},
328 {5, 0x3, 0x1, 0x3, 0x1, 0x3F, 7},
329 {5, 0x4, 0x0, 0x0, 0x0, 0x12, 5},
330 {5, 0x4, 0x1, 0x4, 0x4, 0x1F, 7},
331 {5, 0x5, 0x0, 0x0, 0x0, 0x0D, 6},
332 {5, 0x5, 0x1, 0x4, 0x4, 0x35, 6},
333 {5, 0x5, 0x1, 0x5, 0x1, 0x6F, 7},
334 {5, 0x6, 0x0, 0x0, 0x0, 0x15, 6},
335 {5, 0x6, 0x1, 0x2, 0x2, 0x25, 6},
336 {5, 0x6, 0x1, 0x6, 0x4, 0x2F, 7},
337 {5, 0x7, 0x0, 0x0, 0x0, 0x4F, 7},
338 {5, 0x7, 0x1, 0x6, 0x6, 0x57, 7},
339 {5, 0x7, 0x1, 0x6, 0x4, 0x05, 6},
340 {5, 0x7, 0x1, 0x7, 0x3, 0x0F, 7},
341 {5, 0x7, 0x1, 0x7, 0x2, 0x77, 7},
342 {5, 0x7, 0x1, 0x7, 0x1, 0x37, 7},
343 {5, 0x8, 0x0, 0x0, 0x0, 0x02, 5},
344 {5, 0x8, 0x1, 0x8, 0x8, 0x19, 6},
345 {5, 0x9, 0x0, 0x0, 0x0, 0x26, 6},
346 {5, 0x9, 0x1, 0x8, 0x8, 0x17, 7},
347 {5, 0x9, 0x1, 0x9, 0x1, 0x67, 7},
348 {5, 0xA, 0x0, 0x0, 0x0, 0x1C, 5},
349 {5, 0xA, 0x1, 0xA, 0xA, 0x29, 6},
350 {5, 0xA, 0x1, 0xA, 0x2, 0x09, 6},
351 {5, 0xA, 0x1, 0xA, 0x8, 0x31, 6},
352 {5, 0xB, 0x0, 0x0, 0x0, 0x27, 7},
353 {5, 0xB, 0x1, 0x9, 0x9, 0x07, 7},
354 {5, 0xB, 0x1, 0x9, 0x8, 0x11, 6},
355 {5, 0xB, 0x1, 0xB, 0x3, 0x47, 7},
356 {5, 0xB, 0x1, 0xB, 0x2, 0x21, 6},
357 {5, 0xB, 0x1, 0xB, 0x1, 0x7B, 7},
358 {5, 0xC, 0x0, 0x0, 0x0, 0x01, 6},
359 {5, 0xC, 0x1, 0x8, 0x8, 0x3E, 6},
360 {5, 0xC, 0x1, 0xC, 0x4, 0x3B, 7},
361 {5, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
362 {5, 0xD, 0x1, 0x9, 0x9, 0x6B, 7},
363 {5, 0xD, 0x1, 0x9, 0x8, 0x1E, 6},
364 {5, 0xD, 0x1, 0xD, 0x5, 0x1B, 7},
365 {5, 0xD, 0x1, 0xD, 0x4, 0x2E, 6},
366 {5, 0xD, 0x1, 0xD, 0x1, 0x2B, 7},
367 {5, 0xE, 0x0, 0x0, 0x0, 0x4B, 7},
368 {5, 0xE, 0x1, 0x6, 0x6, 0x0B, 7},
369 {5, 0xE, 0x1, 0xE, 0xA, 0x33, 7},
370 {5, 0xE, 0x1, 0xE, 0x2, 0x0E, 6},
371 {5, 0xE, 0x1, 0xE, 0xC, 0x73, 7},
372 {5, 0xE, 0x1, 0xE, 0x8, 0x36, 6},
373 {5, 0xE, 0x1, 0xE, 0x4, 0x53, 7},
374 {5, 0xF, 0x0, 0x0, 0x0, 0x13, 7},
375 {5, 0xF, 0x1, 0x7, 0x7, 0x43, 7},
376 {5, 0xF, 0x1, 0x7, 0x6, 0x16, 6},
377 {5, 0xF, 0x1, 0x7, 0x5, 0x63, 7},
378 {5, 0xF, 0x1, 0xF, 0xC, 0x23, 7},
379 {5, 0xF, 0x1, 0xF, 0x4, 0x0C, 5},
380 {5, 0xF, 0x1, 0xD, 0x9, 0x03, 7},
381 {5, 0xF, 0x1, 0xF, 0xA, 0x3D, 7},
382 {5, 0xF, 0x1, 0xF, 0x8, 0x14, 5},
383 {5, 0xF, 0x1, 0xF, 0x3, 0x7D, 7},
384 {5, 0xF, 0x1, 0xF, 0x2, 0x04, 5},
385 {5, 0xF, 0x1, 0xF, 0x1, 0x06, 6},
386 {6, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
387 {6, 0x1, 0x0, 0x0, 0x0, 0x04, 4},
388 {6, 0x1, 0x1, 0x1, 0x1, 0x03, 6},
389 {6, 0x2, 0x0, 0x0, 0x0, 0x0C, 5},
390 {6, 0x2, 0x1, 0x2, 0x2, 0x0D, 6},
391 {6, 0x3, 0x0, 0x0, 0x0, 0x1A, 5},
392 {6, 0x3, 0x1, 0x3, 0x3, 0x3D, 6},
393 {6, 0x3, 0x1, 0x3, 0x1, 0x1D, 6},
394 {6, 0x3, 0x1, 0x3, 0x2, 0x2D, 6},
395 {6, 0x4, 0x0, 0x0, 0x0, 0x0A, 5},
396 {6, 0x4, 0x1, 0x4, 0x4, 0x3F, 7},
397 {6, 0x5, 0x0, 0x0, 0x0, 0x35, 6},
398 {6, 0x5, 0x1, 0x1, 0x1, 0x15, 6},
399 {6, 0x5, 0x1, 0x5, 0x4, 0x7F, 7},
400 {6, 0x6, 0x0, 0x0, 0x0, 0x25, 6},
401 {6, 0x6, 0x1, 0x2, 0x2, 0x5F, 7},
402 {6, 0x6, 0x1, 0x6, 0x4, 0x1F, 7},
403 {6, 0x7, 0x0, 0x0, 0x0, 0x6F, 7},
404 {6, 0x7, 0x1, 0x6, 0x6, 0x4F, 7},
405 {6, 0x7, 0x1, 0x6, 0x4, 0x05, 6},
406 {6, 0x7, 0x1, 0x7, 0x3, 0x2F, 7},
407 {6, 0x7, 0x1, 0x7, 0x1, 0x36, 6},
408 {6, 0x7, 0x1, 0x7, 0x2, 0x77, 7},
409 {6, 0x8, 0x0, 0x0, 0x0, 0x12, 5},
410 {6, 0x8, 0x1, 0x8, 0x8, 0x0F, 7},
411 {6, 0x9, 0x0, 0x0, 0x0, 0x39, 6},
412 {6, 0x9, 0x1, 0x1, 0x1, 0x37, 7},
413 {6, 0x9, 0x1, 0x9, 0x8, 0x57, 7},
414 {6, 0xA, 0x0, 0x0, 0x0, 0x19, 6},
415 {6, 0xA, 0x1, 0x2, 0x2, 0x29, 6},
416 {6, 0xA, 0x1, 0xA, 0x8, 0x17, 7},
417 {6, 0xB, 0x0, 0x0, 0x0, 0x67, 7},
418 {6, 0xB, 0x1, 0x9, 0x9, 0x47, 7},
419 {6, 0xB, 0x1, 0x9, 0x1, 0x09, 6},
420 {6, 0xB, 0x1, 0xB, 0xA, 0x27, 7},
421 {6, 0xB, 0x1, 0xB, 0x2, 0x31, 6},
422 {6, 0xB, 0x1, 0xB, 0x8, 0x7B, 7},
423 {6, 0xC, 0x0, 0x0, 0x0, 0x11, 6},
424 {6, 0xC, 0x1, 0xC, 0xC, 0x07, 7},
425 {6, 0xC, 0x1, 0xC, 0x8, 0x21, 6},
426 {6, 0xC, 0x1, 0xC, 0x4, 0x3B, 7},
427 {6, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
428 {6, 0xD, 0x1, 0x5, 0x5, 0x33, 7},
429 {6, 0xD, 0x1, 0x5, 0x4, 0x01, 6},
430 {6, 0xD, 0x1, 0xC, 0x8, 0x1B, 7},
431 {6, 0xD, 0x1, 0xD, 0x1, 0x6B, 7},
432 {6, 0xE, 0x0, 0x0, 0x0, 0x2B, 7},
433 {6, 0xE, 0x1, 0xE, 0x2, 0x4B, 7},
434 {6, 0xE, 0x1, 0x2, 0x2, 0x0B, 7},
435 {6, 0xE, 0x1, 0xE, 0xC, 0x73, 7},
436 {6, 0xE, 0x1, 0xE, 0x8, 0x3E, 6},
437 {6, 0xE, 0x1, 0xE, 0x4, 0x53, 7},
438 {6, 0xF, 0x0, 0x0, 0x0, 0x13, 7},
439 {6, 0xF, 0x1, 0x6, 0x6, 0x1E, 6},
440 {6, 0xF, 0x1, 0xE, 0xA, 0x2E, 6},
441 {6, 0xF, 0x1, 0xF, 0x3, 0x0E, 6},
442 {6, 0xF, 0x1, 0xF, 0x2, 0x02, 5},
443 {6, 0xF, 0x1, 0xB, 0x9, 0x63, 7},
444 {6, 0xF, 0x1, 0xF, 0xC, 0x16, 6},
445 {6, 0xF, 0x1, 0xF, 0x8, 0x06, 6},
446 {6, 0xF, 0x1, 0xF, 0x5, 0x23, 7},
447 {6, 0xF, 0x1, 0xF, 0x1, 0x1C, 5},
448 {6, 0xF, 0x1, 0xF, 0x4, 0x26, 6},
449 {7, 0x0, 0x0, 0x0, 0x0, 0x12, 5},
450 {7, 0x1, 0x0, 0x0, 0x0, 0x05, 6},
451 {7, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
452 {7, 0x2, 0x0, 0x0, 0x0, 0x39, 6},
453 {7, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
454 {7, 0x3, 0x0, 0x0, 0x0, 0x5F, 7},
455 {7, 0x3, 0x1, 0x3, 0x3, 0x1F, 7},
456 {7, 0x3, 0x1, 0x3, 0x2, 0x6F, 7},
457 {7, 0x3, 0x1, 0x3, 0x1, 0x2F, 7},
458 {7, 0x4, 0x0, 0x0, 0x0, 0x4F, 7},
459 {7, 0x4, 0x1, 0x4, 0x4, 0x0F, 7},
460 {7, 0x5, 0x0, 0x0, 0x0, 0x57, 7},
461 {7, 0x5, 0x1, 0x1, 0x1, 0x19, 6},
462 {7, 0x5, 0x1, 0x5, 0x4, 0x77, 7},
463 {7, 0x6, 0x0, 0x0, 0x0, 0x37, 7},
464 {7, 0x6, 0x1, 0x0, 0x0, 0x29, 6},
465 {7, 0x7, 0x0, 0x0, 0x0, 0x17, 7},
466 {7, 0x7, 0x1, 0x6, 0x6, 0x67, 7},
467 {7, 0x7, 0x1, 0x7, 0x3, 0x27, 7},
468 {7, 0x7, 0x1, 0x7, 0x2, 0x47, 7},
469 {7, 0x7, 0x1, 0x7, 0x5, 0x1B, 7},
470 {7, 0x7, 0x1, 0x7, 0x1, 0x09, 6},
471 {7, 0x7, 0x1, 0x7, 0x4, 0x07, 7},
472 {7, 0x8, 0x0, 0x0, 0x0, 0x7B, 7},
473 {7, 0x8, 0x1, 0x8, 0x8, 0x3B, 7},
474 {7, 0x9, 0x0, 0x0, 0x0, 0x5B, 7},
475 {7, 0x9, 0x1, 0x0, 0x0, 0x31, 6},
476 {7, 0xA, 0x0, 0x0, 0x0, 0x53, 7},
477 {7, 0xA, 0x1, 0x2, 0x2, 0x11, 6},
478 {7, 0xA, 0x1, 0xA, 0x8, 0x6B, 7},
479 {7, 0xB, 0x0, 0x0, 0x0, 0x2B, 7},
480 {7, 0xB, 0x1, 0x9, 0x9, 0x4B, 7},
481 {7, 0xB, 0x1, 0xB, 0x3, 0x0B, 7},
482 {7, 0xB, 0x1, 0xB, 0x1, 0x73, 7},
483 {7, 0xB, 0x1, 0xB, 0xA, 0x33, 7},
484 {7, 0xB, 0x1, 0xB, 0x2, 0x21, 6},
485 {7, 0xB, 0x1, 0xB, 0x8, 0x13, 7},
486 {7, 0xC, 0x0, 0x0, 0x0, 0x63, 7},
487 {7, 0xC, 0x1, 0x8, 0x8, 0x23, 7},
488 {7, 0xC, 0x1, 0xC, 0x4, 0x43, 7},
489 {7, 0xD, 0x0, 0x0, 0x0, 0x03, 7},
490 {7, 0xD, 0x1, 0x9, 0x9, 0x7D, 7},
491 {7, 0xD, 0x1, 0xD, 0x5, 0x5D, 7},
492 {7, 0xD, 0x1, 0xD, 0x1, 0x01, 6},
493 {7, 0xD, 0x1, 0xD, 0xC, 0x3D, 7},
494 {7, 0xD, 0x1, 0xD, 0x4, 0x3E, 6},
495 {7, 0xD, 0x1, 0xD, 0x8, 0x1D, 7},
496 {7, 0xE, 0x0, 0x0, 0x0, 0x6D, 7},
497 {7, 0xE, 0x1, 0x6, 0x6, 0x2D, 7},
498 {7, 0xE, 0x1, 0xE, 0xA, 0x0D, 7},
499 {7, 0xE, 0x1, 0xE, 0x2, 0x1E, 6},
500 {7, 0xE, 0x1, 0xE, 0xC, 0x4D, 7},
501 {7, 0xE, 0x1, 0xE, 0x8, 0x0E, 6},
502 {7, 0xE, 0x1, 0xE, 0x4, 0x75, 7},
503 {7, 0xF, 0x0, 0x0, 0x0, 0x15, 7},
504 {7, 0xF, 0x1, 0xF, 0xF, 0x06, 5},
505 {7, 0xF, 0x1, 0xF, 0xD, 0x35, 7},
506 {7, 0xF, 0x1, 0xF, 0x7, 0x55, 7},
507 {7, 0xF, 0x1, 0xF, 0x5, 0x1A, 5},
508 {7, 0xF, 0x1, 0xF, 0xB, 0x25, 7},
509 {7, 0xF, 0x1, 0xF, 0x3, 0x0A, 5},
510 {7, 0xF, 0x1, 0xF, 0x9, 0x2E, 6},
511 {7, 0xF, 0x1, 0xF, 0x1, 0x00, 4},
512 {7, 0xF, 0x1, 0xF, 0xE, 0x65, 7},
513 {7, 0xF, 0x1, 0xF, 0x6, 0x36, 6},
514 {7, 0xF, 0x1, 0xF, 0xA, 0x02, 5},
515 {7, 0xF, 0x1, 0xF, 0x2, 0x0C, 4},
516 {7, 0xF, 0x1, 0xF, 0xC, 0x16, 6},
517 {7, 0xF, 0x1, 0xF, 0x8, 0x04, 4},
518 {7, 0xF, 0x1, 0xF, 0x4, 0x08, 4}
521 // nono-initial quad rows
522 static vlc_src_table_t tbl1[] = {
523 {0, 0x1, 0x0, 0x0, 0x0, 0x00, 3},
524 {0, 0x1, 0x1, 0x1, 0x1, 0x27, 6},
525 {0, 0x2, 0x0, 0x0, 0x0, 0x06, 3},
526 {0, 0x2, 0x1, 0x2, 0x2, 0x17, 6},
527 {0, 0x3, 0x0, 0x0, 0x0, 0x0D, 5},
528 {0, 0x3, 0x1, 0x0, 0x0, 0x3B, 6},
529 {0, 0x4, 0x0, 0x0, 0x0, 0x02, 3},
530 {0, 0x4, 0x1, 0x4, 0x4, 0x07, 6},
531 {0, 0x5, 0x0, 0x0, 0x0, 0x15, 5},
532 {0, 0x5, 0x1, 0x0, 0x0, 0x2B, 6},
533 {0, 0x6, 0x0, 0x0, 0x0, 0x01, 5},
534 {0, 0x6, 0x1, 0x0, 0x0, 0x7F, 7},
535 {0, 0x7, 0x0, 0x0, 0x0, 0x1F, 7},
536 {0, 0x7, 0x1, 0x0, 0x0, 0x1B, 6},
537 {0, 0x8, 0x0, 0x0, 0x0, 0x04, 3},
538 {0, 0x8, 0x1, 0x8, 0x8, 0x05, 5},
539 {0, 0x9, 0x0, 0x0, 0x0, 0x19, 5},
540 {0, 0x9, 0x1, 0x0, 0x0, 0x13, 6},
541 {0, 0xA, 0x0, 0x0, 0x0, 0x09, 5},
542 {0, 0xA, 0x1, 0x8, 0x8, 0x0B, 6},
543 {0, 0xA, 0x1, 0xA, 0x2, 0x3F, 7},
544 {0, 0xB, 0x0, 0x0, 0x0, 0x5F, 7},
545 {0, 0xB, 0x1, 0x0, 0x0, 0x33, 6},
546 {0, 0xC, 0x0, 0x0, 0x0, 0x11, 5},
547 {0, 0xC, 0x1, 0x8, 0x8, 0x23, 6},
548 {0, 0xC, 0x1, 0xC, 0x4, 0x6F, 7},
549 {0, 0xD, 0x0, 0x0, 0x0, 0x0F, 7},
550 {0, 0xD, 0x1, 0x0, 0x0, 0x03, 6},
551 {0, 0xE, 0x0, 0x0, 0x0, 0x2F, 7},
552 {0, 0xE, 0x1, 0x4, 0x4, 0x4F, 7},
553 {0, 0xE, 0x1, 0x4, 0x0, 0x3D, 6},
554 {0, 0xF, 0x0, 0x0, 0x0, 0x77, 7},
555 {0, 0xF, 0x1, 0x1, 0x1, 0x37, 7},
556 {0, 0xF, 0x1, 0x1, 0x0, 0x1D, 6},
557 {1, 0x0, 0x0, 0x0, 0x0, 0x00, 1},
558 {1, 0x1, 0x0, 0x0, 0x0, 0x05, 4},
559 {1, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
560 {1, 0x2, 0x0, 0x0, 0x0, 0x09, 4},
561 {1, 0x2, 0x1, 0x2, 0x2, 0x1F, 7},
562 {1, 0x3, 0x0, 0x0, 0x0, 0x1D, 5},
563 {1, 0x3, 0x1, 0x1, 0x1, 0x3F, 7},
564 {1, 0x3, 0x1, 0x3, 0x2, 0x5F, 7},
565 {1, 0x4, 0x0, 0x0, 0x0, 0x0D, 5},
566 {1, 0x4, 0x1, 0x4, 0x4, 0x37, 7},
567 {1, 0x5, 0x0, 0x0, 0x0, 0x03, 6},
568 {1, 0x5, 0x1, 0x0, 0x0, 0x6F, 7},
569 {1, 0x6, 0x0, 0x0, 0x0, 0x2F, 7},
570 {1, 0x6, 0x1, 0x0, 0x0, 0x4F, 7},
571 {1, 0x7, 0x0, 0x0, 0x0, 0x0F, 7},
572 {1, 0x7, 0x1, 0x0, 0x0, 0x77, 7},
573 {1, 0x8, 0x0, 0x0, 0x0, 0x01, 4},
574 {1, 0x8, 0x1, 0x8, 0x8, 0x17, 7},
575 {1, 0x9, 0x0, 0x0, 0x0, 0x0B, 6},
576 {1, 0x9, 0x1, 0x0, 0x0, 0x57, 7},
577 {1, 0xA, 0x0, 0x0, 0x0, 0x33, 6},
578 {1, 0xA, 0x1, 0x0, 0x0, 0x67, 7},
579 {1, 0xB, 0x0, 0x0, 0x0, 0x27, 7},
580 {1, 0xB, 0x1, 0x0, 0x0, 0x2B, 7},
581 {1, 0xC, 0x0, 0x0, 0x0, 0x13, 6},
582 {1, 0xC, 0x1, 0x0, 0x0, 0x47, 7},
583 {1, 0xD, 0x0, 0x0, 0x0, 0x07, 7},
584 {1, 0xD, 0x1, 0x0, 0x0, 0x7B, 7},
585 {1, 0xE, 0x0, 0x0, 0x0, 0x3B, 7},
586 {1, 0xE, 0x1, 0x0, 0x0, 0x5B, 7},
587 {1, 0xF, 0x0, 0x0, 0x0, 0x1B, 7},
588 {1, 0xF, 0x1, 0x4, 0x4, 0x6B, 7},
589 {1, 0xF, 0x1, 0x4, 0x0, 0x23, 6},
590 {2, 0x0, 0x0, 0x0, 0x0, 0x00, 1},
591 {2, 0x1, 0x0, 0x0, 0x0, 0x09, 4},
592 {2, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
593 {2, 0x2, 0x0, 0x0, 0x0, 0x01, 4},
594 {2, 0x2, 0x1, 0x2, 0x2, 0x23, 6},
595 {2, 0x3, 0x0, 0x0, 0x0, 0x3D, 6},
596 {2, 0x3, 0x1, 0x2, 0x2, 0x3F, 7},
597 {2, 0x3, 0x1, 0x3, 0x1, 0x1F, 7},
598 {2, 0x4, 0x0, 0x0, 0x0, 0x15, 5},
599 {2, 0x4, 0x1, 0x4, 0x4, 0x5F, 7},
600 {2, 0x5, 0x0, 0x0, 0x0, 0x03, 6},
601 {2, 0x5, 0x1, 0x0, 0x0, 0x6F, 7},
602 {2, 0x6, 0x0, 0x0, 0x0, 0x2F, 7},
603 {2, 0x6, 0x1, 0x0, 0x0, 0x4F, 7},
604 {2, 0x7, 0x0, 0x0, 0x0, 0x0F, 7},
605 {2, 0x7, 0x1, 0x0, 0x0, 0x17, 7},
606 {2, 0x8, 0x0, 0x0, 0x0, 0x05, 5},
607 {2, 0x8, 0x1, 0x8, 0x8, 0x77, 7},
608 {2, 0x9, 0x0, 0x0, 0x0, 0x37, 7},
609 {2, 0x9, 0x1, 0x0, 0x0, 0x57, 7},
610 {2, 0xA, 0x0, 0x0, 0x0, 0x1D, 6},
611 {2, 0xA, 0x1, 0xA, 0xA, 0x7B, 7},
612 {2, 0xA, 0x1, 0xA, 0x2, 0x2D, 6},
613 {2, 0xA, 0x1, 0xA, 0x8, 0x67, 7},
614 {2, 0xB, 0x0, 0x0, 0x0, 0x27, 7},
615 {2, 0xB, 0x1, 0xB, 0x2, 0x47, 7},
616 {2, 0xB, 0x1, 0x0, 0x0, 0x07, 7},
617 {2, 0xC, 0x0, 0x0, 0x0, 0x0D, 6},
618 {2, 0xC, 0x1, 0x0, 0x0, 0x3B, 7},
619 {2, 0xD, 0x0, 0x0, 0x0, 0x5B, 7},
620 {2, 0xD, 0x1, 0x0, 0x0, 0x1B, 7},
621 {2, 0xE, 0x0, 0x0, 0x0, 0x6B, 7},
622 {2, 0xE, 0x1, 0x4, 0x4, 0x2B, 7},
623 {2, 0xE, 0x1, 0x4, 0x0, 0x4B, 7},
624 {2, 0xF, 0x0, 0x0, 0x0, 0x0B, 7},
625 {2, 0xF, 0x1, 0x4, 0x4, 0x73, 7},
626 {2, 0xF, 0x1, 0x5, 0x1, 0x33, 7},
627 {2, 0xF, 0x1, 0x7, 0x2, 0x53, 7},
628 {2, 0xF, 0x1, 0xF, 0x8, 0x13, 7},
629 {3, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
630 {3, 0x1, 0x0, 0x0, 0x0, 0x0A, 4},
631 {3, 0x1, 0x1, 0x1, 0x1, 0x0B, 6},
632 {3, 0x2, 0x0, 0x0, 0x0, 0x02, 4},
633 {3, 0x2, 0x1, 0x2, 0x2, 0x23, 6},
634 {3, 0x3, 0x0, 0x0, 0x0, 0x0E, 5},
635 {3, 0x3, 0x1, 0x3, 0x3, 0x7F, 7},
636 {3, 0x3, 0x1, 0x3, 0x2, 0x33, 6},
637 {3, 0x3, 0x1, 0x3, 0x1, 0x13, 6},
638 {3, 0x4, 0x0, 0x0, 0x0, 0x16, 5},
639 {3, 0x4, 0x1, 0x4, 0x4, 0x3F, 7},
640 {3, 0x5, 0x0, 0x0, 0x0, 0x03, 6},
641 {3, 0x5, 0x1, 0x1, 0x1, 0x3D, 6},
642 {3, 0x5, 0x1, 0x5, 0x4, 0x1F, 7},
643 {3, 0x6, 0x0, 0x0, 0x0, 0x1D, 6},
644 {3, 0x6, 0x1, 0x0, 0x0, 0x5F, 7},
645 {3, 0x7, 0x0, 0x0, 0x0, 0x2D, 6},
646 {3, 0x7, 0x1, 0x4, 0x4, 0x2F, 7},
647 {3, 0x7, 0x1, 0x5, 0x1, 0x1E, 6},
648 {3, 0x7, 0x1, 0x7, 0x2, 0x6F, 7},
649 {3, 0x8, 0x0, 0x0, 0x0, 0x06, 5},
650 {3, 0x8, 0x1, 0x8, 0x8, 0x4F, 7},
651 {3, 0x9, 0x0, 0x0, 0x0, 0x0D, 6},
652 {3, 0x9, 0x1, 0x0, 0x0, 0x35, 6},
653 {3, 0xA, 0x0, 0x0, 0x0, 0x15, 6},
654 {3, 0xA, 0x1, 0x2, 0x2, 0x25, 6},
655 {3, 0xA, 0x1, 0xA, 0x8, 0x0F, 7},
656 {3, 0xB, 0x0, 0x0, 0x0, 0x05, 6},
657 {3, 0xB, 0x1, 0x8, 0x8, 0x39, 6},
658 {3, 0xB, 0x1, 0xB, 0x3, 0x17, 7},
659 {3, 0xB, 0x1, 0xB, 0x2, 0x19, 6},
660 {3, 0xB, 0x1, 0xB, 0x1, 0x77, 7},
661 {3, 0xC, 0x0, 0x0, 0x0, 0x29, 6},
662 {3, 0xC, 0x1, 0x0, 0x0, 0x09, 6},
663 {3, 0xD, 0x0, 0x0, 0x0, 0x37, 7},
664 {3, 0xD, 0x1, 0x4, 0x4, 0x57, 7},
665 {3, 0xD, 0x1, 0x4, 0x0, 0x31, 6},
666 {3, 0xE, 0x0, 0x0, 0x0, 0x67, 7},
667 {3, 0xE, 0x1, 0x4, 0x4, 0x27, 7},
668 {3, 0xE, 0x1, 0xC, 0x8, 0x47, 7},
669 {3, 0xE, 0x1, 0xE, 0x2, 0x6B, 7},
670 {3, 0xF, 0x0, 0x0, 0x0, 0x11, 6},
671 {3, 0xF, 0x1, 0x6, 0x6, 0x07, 7},
672 {3, 0xF, 0x1, 0x7, 0x3, 0x7B, 7},
673 {3, 0xF, 0x1, 0xF, 0xA, 0x3B, 7},
674 {3, 0xF, 0x1, 0xF, 0x2, 0x21, 6},
675 {3, 0xF, 0x1, 0xF, 0x8, 0x01, 6},
676 {3, 0xF, 0x1, 0xA, 0x8, 0x5B, 7},
677 {3, 0xF, 0x1, 0xF, 0x5, 0x1B, 7},
678 {3, 0xF, 0x1, 0xF, 0x1, 0x3E, 6},
679 {3, 0xF, 0x1, 0xF, 0x4, 0x2B, 7},
680 {4, 0x0, 0x0, 0x0, 0x0, 0x00, 1},
681 {4, 0x1, 0x0, 0x0, 0x0, 0x0D, 5},
682 {4, 0x1, 0x1, 0x1, 0x1, 0x7F, 7},
683 {4, 0x2, 0x0, 0x0, 0x0, 0x15, 5},
684 {4, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
685 {4, 0x3, 0x0, 0x0, 0x0, 0x5F, 7},
686 {4, 0x3, 0x1, 0x0, 0x0, 0x6F, 7},
687 {4, 0x4, 0x0, 0x0, 0x0, 0x09, 4},
688 {4, 0x4, 0x1, 0x4, 0x4, 0x23, 6},
689 {4, 0x5, 0x0, 0x0, 0x0, 0x33, 6},
690 {4, 0x5, 0x1, 0x0, 0x0, 0x1F, 7},
691 {4, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
692 {4, 0x6, 0x1, 0x0, 0x0, 0x2F, 7},
693 {4, 0x7, 0x0, 0x0, 0x0, 0x4F, 7},
694 {4, 0x7, 0x1, 0x0, 0x0, 0x57, 7},
695 {4, 0x8, 0x0, 0x0, 0x0, 0x01, 4},
696 {4, 0x8, 0x1, 0x8, 0x8, 0x0F, 7},
697 {4, 0x9, 0x0, 0x0, 0x0, 0x77, 7},
698 {4, 0x9, 0x1, 0x0, 0x0, 0x37, 7},
699 {4, 0xA, 0x0, 0x0, 0x0, 0x1D, 6},
700 {4, 0xA, 0x1, 0x0, 0x0, 0x17, 7},
701 {4, 0xB, 0x0, 0x0, 0x0, 0x67, 7},
702 {4, 0xB, 0x1, 0x0, 0x0, 0x6B, 7},
703 {4, 0xC, 0x0, 0x0, 0x0, 0x05, 5},
704 {4, 0xC, 0x1, 0xC, 0xC, 0x27, 7},
705 {4, 0xC, 0x1, 0xC, 0x8, 0x47, 7},
706 {4, 0xC, 0x1, 0xC, 0x4, 0x07, 7},
707 {4, 0xD, 0x0, 0x0, 0x0, 0x7B, 7},
708 {4, 0xD, 0x1, 0x0, 0x0, 0x3B, 7},
709 {4, 0xE, 0x0, 0x0, 0x0, 0x5B, 7},
710 {4, 0xE, 0x1, 0x2, 0x2, 0x1B, 7},
711 {4, 0xE, 0x1, 0x2, 0x0, 0x03, 6},
712 {4, 0xF, 0x0, 0x0, 0x0, 0x2B, 7},
713 {4, 0xF, 0x1, 0x1, 0x1, 0x4B, 7},
714 {4, 0xF, 0x1, 0x3, 0x2, 0x0B, 7},
715 {4, 0xF, 0x1, 0x3, 0x0, 0x3D, 6},
716 {5, 0x0, 0x0, 0x0, 0x0, 0x00, 2},
717 {5, 0x1, 0x0, 0x0, 0x0, 0x1E, 5},
718 {5, 0x1, 0x1, 0x1, 0x1, 0x3B, 6},
719 {5, 0x2, 0x0, 0x0, 0x0, 0x0A, 5},
720 {5, 0x2, 0x1, 0x2, 0x2, 0x3F, 7},
721 {5, 0x3, 0x0, 0x0, 0x0, 0x1B, 6},
722 {5, 0x3, 0x1, 0x0, 0x0, 0x0B, 6},
723 {5, 0x4, 0x0, 0x0, 0x0, 0x02, 4},
724 {5, 0x4, 0x1, 0x4, 0x4, 0x2B, 6},
725 {5, 0x5, 0x0, 0x0, 0x0, 0x0E, 5},
726 {5, 0x5, 0x1, 0x4, 0x4, 0x33, 6},
727 {5, 0x5, 0x1, 0x5, 0x1, 0x7F, 7},
728 {5, 0x6, 0x0, 0x0, 0x0, 0x13, 6},
729 {5, 0x6, 0x1, 0x0, 0x0, 0x6F, 7},
730 {5, 0x7, 0x0, 0x0, 0x0, 0x23, 6},
731 {5, 0x7, 0x1, 0x2, 0x2, 0x5F, 7},
732 {5, 0x7, 0x1, 0x2, 0x0, 0x15, 6},
733 {5, 0x8, 0x0, 0x0, 0x0, 0x16, 5},
734 {5, 0x8, 0x1, 0x8, 0x8, 0x03, 6},
735 {5, 0x9, 0x0, 0x0, 0x0, 0x3D, 6},
736 {5, 0x9, 0x1, 0x0, 0x0, 0x1F, 7},
737 {5, 0xA, 0x0, 0x0, 0x0, 0x1D, 6},
738 {5, 0xA, 0x1, 0x0, 0x0, 0x2D, 6},
739 {5, 0xB, 0x0, 0x0, 0x0, 0x0D, 6},
740 {5, 0xB, 0x1, 0x1, 0x1, 0x4F, 7},
741 {5, 0xB, 0x1, 0x1, 0x0, 0x35, 6},
742 {5, 0xC, 0x0, 0x0, 0x0, 0x06, 5},
743 {5, 0xC, 0x1, 0x4, 0x4, 0x25, 6},
744 {5, 0xC, 0x1, 0xC, 0x8, 0x2F, 7},
745 {5, 0xD, 0x0, 0x0, 0x0, 0x05, 6},
746 {5, 0xD, 0x1, 0x1, 0x1, 0x77, 7},
747 {5, 0xD, 0x1, 0x5, 0x4, 0x39, 6},
748 {5, 0xD, 0x1, 0xD, 0x8, 0x0F, 7},
749 {5, 0xE, 0x0, 0x0, 0x0, 0x19, 6},
750 {5, 0xE, 0x1, 0x2, 0x2, 0x57, 7},
751 {5, 0xE, 0x1, 0xA, 0x8, 0x01, 6},
752 {5, 0xE, 0x1, 0xE, 0x4, 0x37, 7},
753 {5, 0xF, 0x0, 0x0, 0x0, 0x1A, 5},
754 {5, 0xF, 0x1, 0x9, 0x9, 0x17, 7},
755 {5, 0xF, 0x1, 0xD, 0x5, 0x67, 7},
756 {5, 0xF, 0x1, 0xF, 0x3, 0x07, 7},
757 {5, 0xF, 0x1, 0xF, 0x1, 0x29, 6},
758 {5, 0xF, 0x1, 0x7, 0x6, 0x27, 7},
759 {5, 0xF, 0x1, 0xF, 0xC, 0x09, 6},
760 {5, 0xF, 0x1, 0xF, 0x4, 0x31, 6},
761 {5, 0xF, 0x1, 0xF, 0xA, 0x47, 7},
762 {5, 0xF, 0x1, 0xF, 0x8, 0x11, 6},
763 {5, 0xF, 0x1, 0xF, 0x2, 0x21, 6},
764 {6, 0x0, 0x0, 0x0, 0x0, 0x00, 3},
765 {6, 0x1, 0x0, 0x0, 0x0, 0x02, 4},
766 {6, 0x1, 0x1, 0x1, 0x1, 0x03, 6},
767 {6, 0x2, 0x0, 0x0, 0x0, 0x0C, 4},
768 {6, 0x2, 0x1, 0x2, 0x2, 0x3D, 6},
769 {6, 0x3, 0x0, 0x0, 0x0, 0x1D, 6},
770 {6, 0x3, 0x1, 0x2, 0x2, 0x0D, 6},
771 {6, 0x3, 0x1, 0x3, 0x1, 0x7F, 7},
772 {6, 0x4, 0x0, 0x0, 0x0, 0x04, 4},
773 {6, 0x4, 0x1, 0x4, 0x4, 0x2D, 6},
774 {6, 0x5, 0x0, 0x0, 0x0, 0x0A, 5},
775 {6, 0x5, 0x1, 0x4, 0x4, 0x35, 6},
776 {6, 0x5, 0x1, 0x5, 0x1, 0x2F, 7},
777 {6, 0x6, 0x0, 0x0, 0x0, 0x15, 6},
778 {6, 0x6, 0x1, 0x2, 0x2, 0x3F, 7},
779 {6, 0x6, 0x1, 0x6, 0x4, 0x5F, 7},
780 {6, 0x7, 0x0, 0x0, 0x0, 0x25, 6},
781 {6, 0x7, 0x1, 0x2, 0x2, 0x29, 6},
782 {6, 0x7, 0x1, 0x3, 0x1, 0x1F, 7},
783 {6, 0x7, 0x1, 0x7, 0x4, 0x6F, 7},
784 {6, 0x8, 0x0, 0x0, 0x0, 0x16, 5},
785 {6, 0x8, 0x1, 0x8, 0x8, 0x05, 6},
786 {6, 0x9, 0x0, 0x0, 0x0, 0x39, 6},
787 {6, 0x9, 0x1, 0x0, 0x0, 0x19, 6},
788 {6, 0xA, 0x0, 0x0, 0x0, 0x06, 5},
789 {6, 0xA, 0x1, 0xA, 0xA, 0x0F, 7},
790 {6, 0xA, 0x1, 0xA, 0x2, 0x09, 6},
791 {6, 0xA, 0x1, 0xA, 0x8, 0x4F, 7},
792 {6, 0xB, 0x0, 0x0, 0x0, 0x0E, 6},
793 {6, 0xB, 0x1, 0xB, 0x2, 0x77, 7},
794 {6, 0xB, 0x1, 0x2, 0x2, 0x37, 7},
795 {6, 0xB, 0x1, 0xA, 0x8, 0x57, 7},
796 {6, 0xB, 0x1, 0xB, 0x1, 0x47, 7},
797 {6, 0xC, 0x0, 0x0, 0x0, 0x1A, 5},
798 {6, 0xC, 0x1, 0xC, 0xC, 0x17, 7},
799 {6, 0xC, 0x1, 0xC, 0x8, 0x67, 7},
800 {6, 0xC, 0x1, 0xC, 0x4, 0x27, 7},
801 {6, 0xD, 0x0, 0x0, 0x0, 0x31, 6},
802 {6, 0xD, 0x1, 0xD, 0x4, 0x07, 7},
803 {6, 0xD, 0x1, 0x4, 0x4, 0x7B, 7},
804 {6, 0xD, 0x1, 0xC, 0x8, 0x3B, 7},
805 {6, 0xD, 0x1, 0xD, 0x1, 0x2B, 7},
806 {6, 0xE, 0x0, 0x0, 0x0, 0x11, 6},
807 {6, 0xE, 0x1, 0xE, 0x4, 0x5B, 7},
808 {6, 0xE, 0x1, 0x4, 0x4, 0x1B, 7},
809 {6, 0xE, 0x1, 0xE, 0xA, 0x6B, 7},
810 {6, 0xE, 0x1, 0xE, 0x8, 0x21, 6},
811 {6, 0xE, 0x1, 0xE, 0x2, 0x33, 7},
812 {6, 0xF, 0x0, 0x0, 0x0, 0x01, 6},
813 {6, 0xF, 0x1, 0x3, 0x3, 0x4B, 7},
814 {6, 0xF, 0x1, 0x7, 0x6, 0x0B, 7},
815 {6, 0xF, 0x1, 0xF, 0xA, 0x73, 7},
816 {6, 0xF, 0x1, 0xF, 0x2, 0x3E, 6},
817 {6, 0xF, 0x1, 0xB, 0x9, 0x53, 7},
818 {6, 0xF, 0x1, 0xF, 0xC, 0x63, 7},
819 {6, 0xF, 0x1, 0xF, 0x8, 0x1E, 6},
820 {6, 0xF, 0x1, 0xF, 0x5, 0x13, 7},
821 {6, 0xF, 0x1, 0xF, 0x4, 0x2E, 6},
822 {6, 0xF, 0x1, 0xF, 0x1, 0x23, 7},
823 {7, 0x0, 0x0, 0x0, 0x0, 0x04, 4},
824 {7, 0x1, 0x0, 0x0, 0x0, 0x33, 6},
825 {7, 0x1, 0x1, 0x1, 0x1, 0x13, 6},
826 {7, 0x2, 0x0, 0x0, 0x0, 0x23, 6},
827 {7, 0x2, 0x1, 0x2, 0x2, 0x7F, 7},
828 {7, 0x3, 0x0, 0x0, 0x0, 0x03, 6},
829 {7, 0x3, 0x1, 0x1, 0x1, 0x3F, 7},
830 {7, 0x3, 0x1, 0x3, 0x2, 0x6F, 7},
831 {7, 0x4, 0x0, 0x0, 0x0, 0x2D, 6},
832 {7, 0x4, 0x1, 0x4, 0x4, 0x5F, 7},
833 {7, 0x5, 0x0, 0x0, 0x0, 0x16, 5},
834 {7, 0x5, 0x1, 0x1, 0x1, 0x3D, 6},
835 {7, 0x5, 0x1, 0x5, 0x4, 0x1F, 7},
836 {7, 0x6, 0x0, 0x0, 0x0, 0x1D, 6},
837 {7, 0x6, 0x1, 0x0, 0x0, 0x77, 7},
838 {7, 0x7, 0x0, 0x0, 0x0, 0x06, 5},
839 {7, 0x7, 0x1, 0x7, 0x4, 0x2F, 7},
840 {7, 0x7, 0x1, 0x4, 0x4, 0x4F, 7},
841 {7, 0x7, 0x1, 0x7, 0x3, 0x0F, 7},
842 {7, 0x7, 0x1, 0x7, 0x1, 0x0D, 6},
843 {7, 0x7, 0x1, 0x7, 0x2, 0x57, 7},
844 {7, 0x8, 0x0, 0x0, 0x0, 0x35, 6},
845 {7, 0x8, 0x1, 0x8, 0x8, 0x37, 7},
846 {7, 0x9, 0x0, 0x0, 0x0, 0x15, 6},
847 {7, 0x9, 0x1, 0x0, 0x0, 0x27, 7},
848 {7, 0xA, 0x0, 0x0, 0x0, 0x25, 6},
849 {7, 0xA, 0x1, 0x0, 0x0, 0x29, 6},
850 {7, 0xB, 0x0, 0x0, 0x0, 0x1A, 5},
851 {7, 0xB, 0x1, 0xB, 0x1, 0x17, 7},
852 {7, 0xB, 0x1, 0x1, 0x1, 0x67, 7},
853 {7, 0xB, 0x1, 0x3, 0x2, 0x05, 6},
854 {7, 0xB, 0x1, 0xB, 0x8, 0x7B, 7},
855 {7, 0xC, 0x0, 0x0, 0x0, 0x39, 6},
856 {7, 0xC, 0x1, 0x0, 0x0, 0x19, 6},
857 {7, 0xD, 0x0, 0x0, 0x0, 0x0C, 5},
858 {7, 0xD, 0x1, 0xD, 0x1, 0x47, 7},
859 {7, 0xD, 0x1, 0x1, 0x1, 0x07, 7},
860 {7, 0xD, 0x1, 0x5, 0x4, 0x09, 6},
861 {7, 0xD, 0x1, 0xD, 0x8, 0x1B, 7},
862 {7, 0xE, 0x0, 0x0, 0x0, 0x31, 6},
863 {7, 0xE, 0x1, 0xE, 0x2, 0x3B, 7},
864 {7, 0xE, 0x1, 0x2, 0x2, 0x5B, 7},
865 {7, 0xE, 0x1, 0xA, 0x8, 0x3E, 6},
866 {7, 0xE, 0x1, 0xE, 0x4, 0x0B, 7},
867 {7, 0xF, 0x0, 0x0, 0x0, 0x00, 3},
868 {7, 0xF, 0x1, 0xF, 0xF, 0x6B, 7},
869 {7, 0xF, 0x1, 0xF, 0x7, 0x2B, 7},
870 {7, 0xF, 0x1, 0xF, 0xB, 0x4B, 7},
871 {7, 0xF, 0x1, 0xF, 0x3, 0x11, 6},
872 {7, 0xF, 0x1, 0x7, 0x6, 0x21, 6},
873 {7, 0xF, 0x1, 0xF, 0xA, 0x01, 6},
874 {7, 0xF, 0x1, 0xF, 0x2, 0x0A, 5},
875 {7, 0xF, 0x1, 0xB, 0x9, 0x1E, 6},
876 {7, 0xF, 0x1, 0xF, 0xC, 0x0E, 6},
877 {7, 0xF, 0x1, 0xF, 0x8, 0x12, 5},
878 {7, 0xF, 0x1, 0xF, 0x5, 0x2E, 6},
879 {7, 0xF, 0x1, 0xF, 0x1, 0x02, 5},
880 {7, 0xF, 0x1, 0xF, 0x4, 0x1C, 5}
883 //************************************************************************/
884 /** @defgroup vlc_decoding_tables_grp VLC decoding tables
886 * VLC tables to decode VLC codewords to these fields: (in order) \n
887 * \li \c cwd_len : 3bits -> the codeword length of the VLC codeword;
888 * the VLC cwd is in the LSB of bitstream \n
889 * \li \c u_off : 1bit -> u_offset, which is 1 if u value is not 0 \n
890 * \li \c rho : 4bits -> significant samples within a quad \n
891 * \li \c e_1 : 4bits -> EMB e_1 \n
892 * \li \c e_k : 4bits -> EMB e_k \n
894 * The table index is 10 bits and composed of two parts: \n
895 * The 7 LSBs contain a codeword which might be shorter than 7 bits;
896 * this word is the next decoable bits in the bitstream. \n
897 * The 3 MSB is the context of for the codeword. \n
900 /// @brief vlc_tbl0 contains decoding information for initial row of quads
901 int vlc_tbl0[1024] = { 0 };
902 /// @brief vlc_tbl1 contains decoding information for non-initial row of
904 int vlc_tbl1[1024] = { 0 };
907 //************************************************************************/
908 /** @ingroup vlc_decoding_tables_grp
909 * @brief Initializes vlc_tbl0 and vlc_tbl1 tables, from table0.h and
912 OPJ_BOOL vlc_init_tables()
914 const OPJ_BOOL debug = OPJ_FALSE; //useful for checking
916 // number of entries in the table
917 size_t tbl0_size = sizeof(tbl0) / sizeof(vlc_src_table_t);
919 // number of entries in the table
920 size_t tbl1_size = sizeof(tbl1) / sizeof(vlc_src_table_t);
923 memset(vlc_tbl0, 0, sizeof(vlc_tbl0)); //unnecessary
926 // this is to convert table entries into values for decoder look up
927 // There can be at most 1024 possibilities, not all of them are valid.
929 for (int i = 0; i < 1024; ++i) {
930 int cwd = i & 0x7F; // from i extract codeword
931 int c_q = i >> 7; // from i extract context
932 // See if this case exist in the table, if so then set the entry in
934 for (size_t j = 0; j < tbl0_size; ++j)
935 if (tbl0[j].c_q == c_q) // this is an and operation
936 if (tbl0[j].cwd == (cwd & ((1 << tbl0[j].cwd_len) - 1))) {
938 assert(vlc_tbl0[i] == 0);
940 // Put this entry into the table
941 vlc_tbl0[i] = (tbl0[j].rho << 4) | (tbl0[j].u_off << 3)
942 | (tbl0[j].e_k << 12) | (tbl0[j].e_1 << 8) | tbl0[j].cwd_len;
947 memset(vlc_tbl1, 0, sizeof(vlc_tbl1)); //unnecessary
950 // this the same as above but for non-initial rows
951 for (int i = 0; i < 1024; ++i) {
952 int cwd = i & 0x7F; //7 bits
954 for (size_t j = 0; j < tbl1_size; ++j)
955 if (tbl1[j].c_q == c_q) // this is an and operation
956 if (tbl1[j].cwd == (cwd & ((1 << tbl1[j].cwd_len) - 1))) {
958 assert(vlc_tbl1[i] == 0);
960 vlc_tbl1[i] = (tbl1[j].rho << 4) | (tbl1[j].u_off << 3)
961 | (tbl1[j].e_k << 12) | (tbl1[j].e_1 << 8) | tbl1[j].cwd_len;
968 //************************************************************************/
969 /** @ingroup vlc_decoding_tables_grp
970 * @brief Initializes VLC tables vlc_tbl0 and vlc_tbl1
972 OPJ_BOOL vlc_tables_initialized = OPJ_FALSE;