119 const bool debug =
false;
128 struct vlc_src_table {
int c_q, rho, u_off, e_k, e_1, cwd, cwd_len; };
130 vlc_src_table tbl0[] = {
134 size_t tbl0_size =
sizeof(tbl0) /
sizeof(vlc_src_table);
137 vlc_src_table tbl1[] = {
141 size_t tbl1_size =
sizeof(tbl1) /
sizeof(vlc_src_table);
148 for (
int i = 0; i < 1024; ++i)
154 for (
size_t j = 0; j < tbl0_size; ++j)
155 if (tbl0[j].c_q == c_q)
156 if (tbl0[j].cwd == (cwd & ((1 << tbl0[j].cwd_len) - 1)))
158 if (debug) assert(
vlc_tbl0[i] == 0);
160 vlc_tbl0[i] = (
ui16)((tbl0[j].rho << 4) | (tbl0[j].u_off << 3)
161 | (tbl0[j].e_k << 12) | (tbl0[j].e_1 << 8) | tbl0[j].cwd_len);
168 for (
int i = 0; i < 1024; ++i)
172 for (
size_t j = 0; j < tbl1_size; ++j)
173 if (tbl1[j].c_q == c_q)
174 if (tbl1[j].cwd == (cwd & ((1 << tbl1[j].cwd_len) - 1)))
176 if (debug) assert(
vlc_tbl1[i] == 0);
177 vlc_tbl1[i] = (
ui16)((tbl1[j].rho << 4) | (tbl1[j].u_off << 3)
178 | (tbl1[j].e_k << 12) | (tbl1[j].e_1 << 8) | tbl1[j].cwd_len);
197 static const ui8 dec[8] = {
198 3 | (5 << 2) | (5 << 5),
199 1 | (0 << 2) | (1 << 5),
200 2 | (0 << 2) | (2 << 5),
201 1 | (0 << 2) | (1 << 5),
202 3 | (1 << 2) | (3 << 5),
203 1 | (0 << 2) | (1 << 5),
204 2 | (0 << 2) | (2 << 5),
205 1 | (0 << 2) | (1 << 5)
208 for (
ui32 i = 0; i < 256 + 64; ++i)
219 ui32 d = dec[vlc & 0x7];
221 ui32 total_prefix = d & 0x3;
222 ui32 total_suffix = (d >> 2) & 0x7;
223 ui32 u0_suffix_len = (mode == 1) ? total_suffix : 0;
224 ui32 u0 = (mode == 1) ? (d >> 5) : 0;
225 ui32 u1 = (mode == 1) ? 0 : (d >> 5);
228 (total_suffix << 3) |
229 (u0_suffix_len << 7) |
236 ui32 d0 = dec[vlc & 0x7];
238 ui32 d1 = dec[vlc & 0x7];
240 ui32 total_prefix, u0_suffix_len, total_suffix, u0, u1;
243 total_prefix = (d0 & 0x3) + 1;
244 u0_suffix_len = (d0 >> 2) & 0x7;
245 total_suffix = u0_suffix_len;
252 total_prefix = (d0 & 0x3) + (d1 & 0x3);
253 u0_suffix_len = (d0 >> 2) & 0x7;
254 total_suffix = u0_suffix_len + ((d1 >> 2) & 0x7);
261 (total_suffix << 3) |
262 (u0_suffix_len << 7) |
268 ui32 d0 = dec[vlc & 0x7];
270 ui32 d1 = dec[vlc & 0x7];
272 ui32 total_prefix = (d0 & 0x3) + (d1 & 0x3);
273 ui32 u0_suffix_len = (d0 >> 2) & 0x7;
274 ui32 total_suffix = u0_suffix_len + ((d1 >> 2) & 0x7);
275 ui32 u0 = (d0 >> 5) + 2;
276 ui32 u1 = (d1 >> 5) + 2;
279 (total_suffix << 3) |
280 (u0_suffix_len << 7) |
287 for (
ui32 i = 0; i < 256; ++i)
296 ui32 d = dec[vlc & 0x7];
298 ui32 total_prefix = d & 0x3;
299 ui32 total_suffix = (d >> 2) & 0x7;
300 ui32 u0_suffix_len = (mode == 1) ? total_suffix : 0;
301 ui32 u0 = (mode == 1) ? (d >> 5) : 0;
302 ui32 u1 = (mode == 1) ? 0 : (d >> 5);
305 (total_suffix << 3) |
306 (u0_suffix_len << 7) |
312 ui32 d0 = dec[vlc & 0x7];
314 ui32 d1 = dec[vlc & 0x7];
316 ui32 total_prefix = (d0 & 0x3) + (d1 & 0x3);
317 ui32 u0_suffix_len = (d0 >> 2) & 0x7;
318 ui32 total_suffix = u0_suffix_len + ((d1 >> 2) & 0x7);
323 (total_suffix << 3) |
324 (u0_suffix_len << 7) |