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;

}
