static int mjpeg_decode_dht(MJpegDecodeContext *s)

{

    int len, index, i, class, n, v, code_max;

    uint8_t bits_table[17];

    uint8_t val_table[256];

    

    len = get_bits(&s->gb, 16) - 2;



    while (len > 0) {

        if (len < 17)

            return -1;

        class = get_bits(&s->gb, 4);

        if (class >= 2)

            return -1;

        index = get_bits(&s->gb, 4);

        if (index >= 4)

            return -1;

        n = 0;

        for(i=1;i<=16;i++) {

            bits_table[i] = get_bits(&s->gb, 8);

            n += bits_table[i];

        }

        len -= 17;

        if (len < n || n > 256)

            return -1;



        code_max = 0;

        for(i=0;i<n;i++) {

            v = get_bits(&s->gb, 8);

            if (v > code_max)

                code_max = v;

            val_table[i] = v;

        }

        len -= n;



        /* build VLC and flush previous vlc if present */

        free_vlc(&s->vlcs[class][index]);

        dprintf("class=%d index=%d nb_codes=%d\n",

               class, index, code_max + 1);

        build_vlc(&s->vlcs[class][index], bits_table, val_table, code_max + 1);

    }

    return 0;

}

static int mjpeg_decode_dht(MJpegDecodeContext *s)

{

    int len, index, i, class, n, v, code_max;

    uint8_t bits_table[17];

    uint8_t val_table[256];

    

    len = get_bits(&s->gb, 16) - 2;



    while (len > 0) {

        if (len < 17)

            return -1;

        class = get_bits(&s->gb, 4);

        if (class >= 2)

            return -1;

        index = get_bits(&s->gb, 4);

        if (index >= 4)

            return -1;

        n = 0;

        for(i=1;i<=16;i++) {

            bits_table[i] = get_bits(&s->gb, 8);

            n += bits_table[i];

        }

        len -= 17;

        if (len < n || n > 256)

            return -1;



        code_max = 0;

        for(i=0;i<n;i++) {

            v = get_bits(&s->gb, 8);

            if (v > code_max)

                code_max = v;

            val_table[i] = v;

        }

        len -= n;



        

        free_vlc(&s->vlcs[class][index]);

        dprintf("class=%d index=%d nb_codes=%d\n",

               class, index, code_max + 1);

        build_vlc(&s->vlcs[class][index], bits_table, val_table, code_max + 1);

    }

    return 0;

}

static int FUNC_0(MJpegDecodeContext *VAR_0)

{

    int VAR_1, VAR_2, VAR_3, VAR_4, VAR_5, VAR_6, VAR_7;

    uint8_t bits_table[17];

    uint8_t val_table[256];

    

    VAR_1 = get_bits(&VAR_0->gb, 16) - 2;



    while (VAR_1 > 0) {

        if (VAR_1 < 17)

            return -1;

        VAR_4 = get_bits(&VAR_0->gb, 4);

        if (VAR_4 >= 2)

            return -1;

        VAR_2 = get_bits(&VAR_0->gb, 4);

        if (VAR_2 >= 4)

            return -1;

        VAR_5 = 0;

        for(VAR_3=1;VAR_3<=16;VAR_3++) {

            bits_table[VAR_3] = get_bits(&VAR_0->gb, 8);

            VAR_5 += bits_table[VAR_3];

        }

        VAR_1 -= 17;

        if (VAR_1 < VAR_5 || VAR_5 > 256)

            return -1;



        VAR_7 = 0;

        for(VAR_3=0;VAR_3<VAR_5;VAR_3++) {

            VAR_6 = get_bits(&VAR_0->gb, 8);

            if (VAR_6 > VAR_7)

                VAR_7 = VAR_6;

            val_table[VAR_3] = VAR_6;

        }

        VAR_1 -= VAR_5;



        

        free_vlc(&VAR_0->vlcs[VAR_4][VAR_2]);

        dprintf("VAR_4=%d VAR_2=%d nb_codes=%d\VAR_5",

               VAR_4, VAR_2, VAR_7 + 1);

        build_vlc(&VAR_0->vlcs[VAR_4][VAR_2], bits_table, val_table, VAR_7 + 1);

    }

    return 0;

}

static int FUNC_0(MJpegDecodeContext *VAR_0)
{ int VAR_1, VAR_2, VAR_3, VAR_4, VAR_5, VAR_6, VAR_7; uint8_t bits_table[17]; uint8_t val_table[256]; VAR_1 = get_bits(&VAR_0->gb, 16) - 2; while (VAR_1 > 0) { if (VAR_1 < 17)
return -1; VAR_4 = get_bits(&VAR_0->gb, 4); if (VAR_4 >= 2)
return -1; VAR_2 = get_bits(&VAR_0->gb, 4); if (VAR_2 >= 4)
return -1; VAR_5 = 0; for(VAR_3=1;VAR_3<=16;VAR_3++) { bits_table[VAR_3] = get_bits(&VAR_0->gb, 8); VAR_5 += bits_table[VAR_3]; } VAR_1 -= 17; if (VAR_1 < VAR_5 || VAR_5 > 256)
return -1; VAR_7 = 0; for(VAR_3=0;VAR_3<VAR_5;VAR_3++) { VAR_6 = get_bits(&VAR_0->gb, 8); if (VAR_6 > VAR_7)
VAR_7 = VAR_6; val_table[VAR_3] = VAR_6; } VAR_1 -= VAR_5; free_vlc(&VAR_0->vlcs[VAR_4][VAR_2]); dprintf("VAR_4=%d VAR_2=%d nb_codes=%d\VAR_5",
VAR_4, VAR_2, VAR_7 + 1); build_vlc(&VAR_0->vlcs[VAR_4][VAR_2], bits_table, val_table, VAR_7 + 1); } return 0; }