static int theora_decode_tables(AVCodecContext *avctx, GetBitContext gb)

{

    Vp3DecodeContext *s = avctx->priv_data;

    int i, n, matrices;



    if (s->theora >= 0x030200) {

        n = get_bits(&gb, 3);

        /* loop filter limit values table */

        for (i = 0; i < 64; i++)

            s->filter_limit_values[i] = get_bits(&gb, n);

    }



    if (s->theora >= 0x030200)

        n = get_bits(&gb, 4) + 1;

    else

        n = 16;

    /* quality threshold table */

    for (i = 0; i < 64; i++)

        s->coded_ac_scale_factor[i] = get_bits(&gb, n);



    if (s->theora >= 0x030200)

        n = get_bits(&gb, 4) + 1;

    else

        n = 16;

    /* dc scale factor table */

    for (i = 0; i < 64; i++)

        s->coded_dc_scale_factor[i] = get_bits(&gb, n);



    if (s->theora >= 0x030200)

        matrices = get_bits(&gb, 9) + 1;

    else

        matrices = 3;

    if (matrices != 3) {

        av_log(avctx,AV_LOG_ERROR, "unsupported matrices: %d\n", matrices);

//        return -1;

    }

    /* y coeffs */

    for (i = 0; i < 64; i++)

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



    /* uv coeffs */

    for (i = 0; i < 64; i++)

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



    /* inter coeffs */

    for (i = 0; i < 64; i++)

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



    /* skip unknown matrices */

    n = matrices - 3;

    while(n--)

        for (i = 0; i < 64; i++)

            skip_bits(&gb, 8);



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

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

            int newqr;

            if (i > 0 || n > 0)

                newqr = get_bits(&gb, 1);

            else

                newqr = 1;

            if (!newqr) {

                if (i > 0)

                    get_bits(&gb, 1);

            }

            else {

                int qi = 0;

                skip_bits(&gb, av_log2(matrices-1)+1);

                while (qi < 63) {

                    qi += get_bits(&gb, av_log2(63-qi)+1) + 1;

                    skip_bits(&gb, av_log2(matrices-1)+1);

                }

                if (qi > 63) {

                    av_log(avctx, AV_LOG_ERROR, "invalid qi %d > 63\n", qi);

                    return -1;

                }

            }

        }

    }



    /* Huffman tables */

    for (s->hti = 0; s->hti < 80; s->hti++) {

        s->entries = 0;

        s->huff_code_size = 1;

        if (!get_bits(&gb, 1)) {

            s->hbits = 0;

            read_huffman_tree(avctx, &gb);

            s->hbits = 1;

            read_huffman_tree(avctx, &gb);

        }

    }



    s->theora_tables = 1;



    return 0;

}

static int theora_decode_tables(AVCodecContext *avctx, GetBitContext gb)

{

    Vp3DecodeContext *s = avctx->priv_data;

    int i, n, matrices;



    if (s->theora >= 0x030200) {

        n = get_bits(&gb, 3);

        

        for (i = 0; i < 64; i++)

            s->filter_limit_values[i] = get_bits(&gb, n);

    }



    if (s->theora >= 0x030200)

        n = get_bits(&gb, 4) + 1;

    else

        n = 16;

    

    for (i = 0; i < 64; i++)

        s->coded_ac_scale_factor[i] = get_bits(&gb, n);



    if (s->theora >= 0x030200)

        n = get_bits(&gb, 4) + 1;

    else

        n = 16;

    

    for (i = 0; i < 64; i++)

        s->coded_dc_scale_factor[i] = get_bits(&gb, n);



    if (s->theora >= 0x030200)

        matrices = get_bits(&gb, 9) + 1;

    else

        matrices = 3;

    if (matrices != 3) {

        av_log(avctx,AV_LOG_ERROR, "unsupported matrices: %d\n", matrices);



    }

    

    for (i = 0; i < 64; i++)

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



    

    for (i = 0; i < 64; i++)

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



    

    for (i = 0; i < 64; i++)

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



    

    n = matrices - 3;

    while(n--)

        for (i = 0; i < 64; i++)

            skip_bits(&gb, 8);



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

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

            int newqr;

            if (i > 0 || n > 0)

                newqr = get_bits(&gb, 1);

            else

                newqr = 1;

            if (!newqr) {

                if (i > 0)

                    get_bits(&gb, 1);

            }

            else {

                int qi = 0;

                skip_bits(&gb, av_log2(matrices-1)+1);

                while (qi < 63) {

                    qi += get_bits(&gb, av_log2(63-qi)+1) + 1;

                    skip_bits(&gb, av_log2(matrices-1)+1);

                }

                if (qi > 63) {

                    av_log(avctx, AV_LOG_ERROR, "invalid qi %d > 63\n", qi);

                    return -1;

                }

            }

        }

    }



    

    for (s->hti = 0; s->hti < 80; s->hti++) {

        s->entries = 0;

        s->huff_code_size = 1;

        if (!get_bits(&gb, 1)) {

            s->hbits = 0;

            read_huffman_tree(avctx, &gb);

            s->hbits = 1;

            read_huffman_tree(avctx, &gb);

        }

    }



    s->theora_tables = 1;



    return 0;

}

static int FUNC_0(AVCodecContext *VAR_0, GetBitContext VAR_1)

{

    Vp3DecodeContext *s = VAR_0->priv_data;

    int VAR_2, VAR_3, VAR_4;



    if (s->theora >= 0x030200) {

        VAR_3 = get_bits(&VAR_1, 3);

        

        for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

            s->filter_limit_values[VAR_2] = get_bits(&VAR_1, VAR_3);

    }



    if (s->theora >= 0x030200)

        VAR_3 = get_bits(&VAR_1, 4) + 1;

    else

        VAR_3 = 16;

    

    for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

        s->coded_ac_scale_factor[VAR_2] = get_bits(&VAR_1, VAR_3);



    if (s->theora >= 0x030200)

        VAR_3 = get_bits(&VAR_1, 4) + 1;

    else

        VAR_3 = 16;

    

    for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

        s->coded_dc_scale_factor[VAR_2] = get_bits(&VAR_1, VAR_3);



    if (s->theora >= 0x030200)

        VAR_4 = get_bits(&VAR_1, 9) + 1;

    else

        VAR_4 = 3;

    if (VAR_4 != 3) {

        av_log(VAR_0,AV_LOG_ERROR, "unsupported VAR_4: %d\VAR_3", VAR_4);



    }

    

    for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

        s->coded_intra_y_dequant[VAR_2] = get_bits(&VAR_1, 8);



    

    for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

        s->coded_intra_c_dequant[VAR_2] = get_bits(&VAR_1, 8);



    

    for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

        s->coded_inter_dequant[VAR_2] = get_bits(&VAR_1, 8);



    

    VAR_3 = VAR_4 - 3;

    while(VAR_3--)

        for (VAR_2 = 0; VAR_2 < 64; VAR_2++)

            skip_bits(&VAR_1, 8);



    for (VAR_2 = 0; VAR_2 <= 1; VAR_2++) {

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

            int VAR_5;

            if (VAR_2 > 0 || VAR_3 > 0)

                VAR_5 = get_bits(&VAR_1, 1);

            else

                VAR_5 = 1;

            if (!VAR_5) {

                if (VAR_2 > 0)

                    get_bits(&VAR_1, 1);

            }

            else {

                int VAR_6 = 0;

                skip_bits(&VAR_1, av_log2(VAR_4-1)+1);

                while (VAR_6 < 63) {

                    VAR_6 += get_bits(&VAR_1, av_log2(63-VAR_6)+1) + 1;

                    skip_bits(&VAR_1, av_log2(VAR_4-1)+1);

                }

                if (VAR_6 > 63) {

                    av_log(VAR_0, AV_LOG_ERROR, "invalid VAR_6 %d > 63\VAR_3", VAR_6);

                    return -1;

                }

            }

        }

    }



    

    for (s->hti = 0; s->hti < 80; s->hti++) {

        s->entries = 0;

        s->huff_code_size = 1;

        if (!get_bits(&VAR_1, 1)) {

            s->hbits = 0;

            read_huffman_tree(VAR_0, &VAR_1);

            s->hbits = 1;

            read_huffman_tree(VAR_0, &VAR_1);

        }

    }



    s->theora_tables = 1;



    return 0;

}

static int FUNC_0(AVCodecContext *VAR_0, GetBitContext VAR_1)
{ Vp3DecodeContext *s = VAR_0->priv_data; int VAR_2, VAR_3, VAR_4; if (s->theora >= 0x030200) { VAR_3 = get_bits(&VAR_1, 3); for (VAR_2 = 0; VAR_2 < 64; VAR_2++) s->filter_limit_values[VAR_2] = get_bits(&VAR_1, VAR_3); } if (s->theora >= 0x030200)
VAR_3 = get_bits(&VAR_1, 4) + 1; else
VAR_3 = 16; for (VAR_2 = 0; VAR_2 < 64; VAR_2++) s->coded_ac_scale_factor[VAR_2] = get_bits(&VAR_1, VAR_3); if (s->theora >= 0x030200)
VAR_3 = get_bits(&VAR_1, 4) + 1; else
VAR_3 = 16; for (VAR_2 = 0; VAR_2 < 64; VAR_2++) s->coded_dc_scale_factor[VAR_2] = get_bits(&VAR_1, VAR_3); if (s->theora >= 0x030200)
VAR_4 = get_bits(&VAR_1, 9) + 1; else
VAR_4 = 3; if (VAR_4 != 3) { av_log(VAR_0,AV_LOG_ERROR, "unsupported VAR_4: %d\VAR_3", VAR_4); } for (VAR_2 = 0; VAR_2 < 64; VAR_2++) s->coded_intra_y_dequant[VAR_2] = get_bits(&VAR_1, 8); for (VAR_2 = 0; VAR_2 < 64; VAR_2++) s->coded_intra_c_dequant[VAR_2] = get_bits(&VAR_1, 8); for (VAR_2 = 0; VAR_2 < 64; VAR_2++) s->coded_inter_dequant[VAR_2] = get_bits(&VAR_1, 8); VAR_3 = VAR_4 - 3; while(VAR_3--)
for (VAR_2 = 0; VAR_2 < 64; VAR_2++) skip_bits(&VAR_1, 8); for (VAR_2 = 0; VAR_2 <= 1; VAR_2++) { for (VAR_3 = 0; VAR_3 <= 2; VAR_3++) { int VAR_5; if (VAR_2 > 0 || VAR_3 > 0)
VAR_5 = get_bits(&VAR_1, 1); else
VAR_5 = 1; if (!VAR_5) { if (VAR_2 > 0)
get_bits(&VAR_1, 1); } else { int VAR_6 = 0; skip_bits(&VAR_1, av_log2(VAR_4-1)+1); while (VAR_6 < 63) { VAR_6 += get_bits(&VAR_1, av_log2(63-VAR_6)+1) + 1; skip_bits(&VAR_1, av_log2(VAR_4-1)+1); } if (VAR_6 > 63) { av_log(VAR_0, AV_LOG_ERROR, "invalid VAR_6 %d > 63\VAR_3", VAR_6); return -1; } } } } for (s->hti = 0; s->hti < 80; s->hti++) { s->entries = 0; s->huff_code_size = 1; if (!get_bits(&VAR_1, 1)) { s->hbits = 0; read_huffman_tree(VAR_0, &VAR_1); s->hbits = 1; read_huffman_tree(VAR_0, &VAR_1); } } s->theora_tables = 1; return 0; }