static inline uint64_t get_val(BitstreamContext *bc, unsigned n)
{
#ifdef BITSTREAM_READER_LE
    uint64_t ret = bc->bits & ((UINT64_C(1) << n) - 1);
    bc->bits >>= n;
#else
    uint64_t ret = bc->bits >> (64 - n);
    bc->bits <<= n;
#endif
    bc->bits_left -= n;
    return ret;
}
['static void decode_filter_coeffs(TAKDecContext *s, int filter_order, int size,\n                                 int filter_quant, int16_t *filter)\n{\n    BitstreamContext *bc = &s->bc;\n    int i, j, a, b;\n    int filter_tmp[MAX_PREDICTORS];\n    int16_t predictors[MAX_PREDICTORS];\n    predictors[0] = bitstream_read_signed(bc, 10);\n    predictors[1] = bitstream_read_signed(bc, 10);\n    predictors[2] = bitstream_read_signed(bc, size) << (10 - size);\n    predictors[3] = bitstream_read_signed(bc, size) << (10 - size);\n    if (filter_order > 4) {\n        int av_uninit(code_size);\n        int code_size_base = size - bitstream_read_bit(bc);\n        for (i = 4; i < filter_order; i++) {\n            if (!(i & 3))\n            code_size     = code_size_base - bitstream_read(bc, 2);\n            predictors[i] = bitstream_read_signed(bc, code_size) << (10 - size);\n        }\n    }\n    filter_tmp[0] = predictors[0] << 6;\n    for (i = 1; i < filter_order; i++) {\n        int *p1 = &filter_tmp[0];\n        int *p2 = &filter_tmp[i - 1];\n        for (j = 0; j < (i + 1) / 2; j++) {\n            int tmp = *p1 + (predictors[i] * *p2 + 256 >> 9);\n            *p2     = *p2 + (predictors[i] * *p1 + 256 >> 9);\n            *p1     = tmp;\n            p1++;\n            p2--;\n        }\n        filter_tmp[i] = predictors[i] << 6;\n    }\n    a = 1 << (32 - (15 - filter_quant));\n    b = 1 << ((15 - filter_quant) - 1);\n    for (i = 0, j = filter_order - 1; i < filter_order / 2; i++, j--) {\n        filter[j] = a - ((filter_tmp[i] + b) >> (15 - filter_quant));\n        filter[i] = a - ((filter_tmp[j] + b) >> (15 - filter_quant));\n    }\n}', 'static inline int32_t bitstream_read_signed(BitstreamContext *bc, unsigned n)\n{\n    return sign_extend(bitstream_read(bc, n), n);\n}', 'static inline uint32_t bitstream_read(BitstreamContext *bc, unsigned n)\n{\n    if (!n)\n        return 0;\n    if (n > bc->bits_left) {\n        refill_32(bc);\n        if (bc->bits_left < 32)\n            bc->bits_left = n;\n    }\n    return get_val(bc, n);\n}', 'static inline unsigned bitstream_read_bit(BitstreamContext *bc)\n{\n    if (!bc->bits_left)\n        refill_64(bc);\n    return get_val(bc, 1);\n}', 'static inline uint64_t get_val(BitstreamContext *bc, unsigned n)\n{\n#ifdef BITSTREAM_READER_LE\n    uint64_t ret = bc->bits & ((UINT64_C(1) << n) - 1);\n    bc->bits >>= n;\n#else\n    uint64_t ret = bc->bits >> (64 - n);\n    bc->bits <<= n;\n#endif\n    bc->bits_left -= n;\n    return ret;\n}']