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