- return ff_init_vlc_sparse(vlc, VLC_BITS, last + 1,
- bits, sizeof(*bits), sizeof(*bits),
- codes, sizeof(*codes), sizeof(*codes),
- syms, sizeof(*syms), sizeof(*syms), 0);
-}
-
-static int build_huff(const uint8_t *src, VLC *vlc, int *fsym)
-{
- int i;
- HuffEntry he[256];
- int last;
- uint32_t codes[256];
- uint8_t bits[256];
- uint8_t syms[256];
- uint32_t code;
-
- *fsym = -1;
- for (i = 0; i < 256; i++) {
- he[i].sym = i;
- he[i].len = *src++;
- }
- qsort(he, 256, sizeof(*he), ff_ut_huff_cmp_len);
-
- if (!he[0].len) {
- *fsym = he[0].sym;
- return 0;
- }
-
- last = 255;
- while (he[last].len == 255 && last)
- last--;
-
- if (he[last].len > 32)
- return -1;
-
- code = 1;
- for (i = last; i >= 0; i--) {
- codes[i] = code >> (32 - he[i].len);
- bits[i] = he[i].len;
- syms[i] = he[i].sym;
- code += 0x80000000u >> (he[i].len - 1);
- }
-
- return ff_init_vlc_sparse(vlc, VLC_BITS, last + 1,
- bits, sizeof(*bits), sizeof(*bits),
- codes, sizeof(*codes), sizeof(*codes),
- syms, sizeof(*syms), sizeof(*syms), 0);
+ return ff_init_vlc_from_lengths(vlc, VLC_BITS, codes_count[0],
+ &he[0].len, sizeof(*he),
+ &he[0].sym, sizeof(*he), 2, 0, 0, c->avctx);