static inline void refill_32(BitstreamContext *bc)
{
    if (bc->ptr >= bc->buffer_end)
        return;
#ifdef BITSTREAM_READER_LE
    bc->bits       = (uint64_t)AV_RL32(bc->ptr) << bc->bits_left | bc->bits;
#else
    bc->bits       = bc->bits | (uint64_t)AV_RB32(bc->ptr) << (32 - bc->bits_left);
#endif
    bc->ptr       += 4;
    bc->bits_left += 32;
}
['static int smacker_decode_bigtree(BitstreamContext *bc, HuffContext *hc,\n                                  DBCtx *ctx, int length)\n{\n    if (length > SMKTREE_DECODE_BIG_MAX_RECURSION) {\n        av_log(NULL, AV_LOG_ERROR, "Maximum bigtree recursion level exceeded.\\n");\n        return AVERROR_INVALIDDATA;\n    }\n    if (hc->current + 1 >= hc->length) {\n        av_log(NULL, AV_LOG_ERROR, "Tree size exceeded!\\n");\n        return AVERROR_INVALIDDATA;\n    }\n    if (!bitstream_read_bit(bc)) {\n        int val, i1, i2;\n        i1 = ctx->v1->table ? bitstream_read_vlc(bc, ctx->v1->table, SMKTREE_BITS, 3) : 0;\n        i2 = ctx->v2->table ? bitstream_read_vlc(bc, ctx->v2->table, SMKTREE_BITS, 3) : 0;\n        if (i1 < 0 || i2 < 0)\n            return AVERROR_INVALIDDATA;\n        val = ctx->recode1[i1] | (ctx->recode2[i2] << 8);\n        if(val == ctx->escapes[0]) {\n            ctx->last[0] = hc->current;\n            val = 0;\n        } else if(val == ctx->escapes[1]) {\n            ctx->last[1] = hc->current;\n            val = 0;\n        } else if(val == ctx->escapes[2]) {\n            ctx->last[2] = hc->current;\n            val = 0;\n        }\n        hc->values[hc->current++] = val;\n        return 1;\n    } else {\n        int r = 0, r_new, t;\n        t = hc->current++;\n        r = smacker_decode_bigtree(bc, hc, ctx, length + 1);\n        if(r < 0)\n            return r;\n        hc->values[t] = SMK_NODE | r;\n        r++;\n        r_new = smacker_decode_bigtree(bc, hc, ctx, length + 1);\n        if (r_new < 0)\n            return r_new;\n        return r + r_new;\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}', 'static inline int bitstream_read_vlc(BitstreamContext *bc, VLC_TYPE (*table)[2],\n                                     int bits, int max_depth)\n{\n    int nb_bits;\n    unsigned idx = bitstream_peek(bc, bits);\n    int code = table[idx][0];\n    int n    = table[idx][1];\n    if (max_depth > 1 && n < 0) {\n        skip_remaining(bc, bits);\n        code = set_idx(bc, code, &n, &nb_bits, table);\n        if (max_depth > 2 && n < 0) {\n            skip_remaining(bc, nb_bits);\n            code = set_idx(bc, code, &n, &nb_bits, table);\n        }\n    }\n    skip_remaining(bc, n);\n    return code;\n}', 'static inline unsigned bitstream_peek(BitstreamContext *bc, unsigned n)\n{\n    if (n > bc->bits_left)\n        refill_32(bc);\n    return show_val(bc, n);\n}', 'static inline void refill_32(BitstreamContext *bc)\n{\n    if (bc->ptr >= bc->buffer_end)\n        return;\n#ifdef BITSTREAM_READER_LE\n    bc->bits       = (uint64_t)AV_RL32(bc->ptr) << bc->bits_left | bc->bits;\n#else\n    bc->bits       = bc->bits | (uint64_t)AV_RB32(bc->ptr) << (32 - bc->bits_left);\n#endif\n    bc->ptr       += 4;\n    bc->bits_left += 32;\n}']