---
 libavcodec/mss1.c  | 15 +++++-----
 libavcodec/mss12.h |  4 +--
 libavcodec/mss2.c  | 79 ++++++++++++++++++++++++++-------------------------
 libavcodec/mss4.c  | 83 +++++++++++++++++++++++++++---------------------------
 4 files changed, 93 insertions(+), 88 deletions(-)

diff --git a/libavcodec/mss1.c b/libavcodec/mss1.c
index a31af06..9f4d6bc 100644
--- a/libavcodec/mss1.c
+++ b/libavcodec/mss1.c
@@ -25,6 +25,7 @@
  */
 
 #include "avcodec.h"
+#include "bitstream.h"
 #include "internal.h"
 #include "mss12.h"
 
@@ -56,7 +57,7 @@ static void arith_normalise(ArithCoder *c)
         c->low   <<= 1;
         c->high  <<= 1;
         c->high   |= 1;
-        c->value  |= get_bits1(c->gbc.gb);
+        c->value  |= bitstream_read_bit(c->gbc.bc);
     }
 }
 
@@ -107,12 +108,12 @@ static int arith_get_prob(ArithCoder *c, int16_t *probs)
 
 ARITH_GET_MODEL_SYM()
 
-static void arith_init(ArithCoder *c, GetBitContext *gb)
+static void arith_init(ArithCoder *c, BitstreamContext *bc)
 {
     c->low           = 0;
     c->high          = 0xFFFF;
-    c->value         = get_bits(gb, 16);
-    c->gbc.gb        = gb;
+    c->value         = bitstream_read(bc, 16);
+    c->gbc.bc        = bc;
     c->get_model_sym = arith_get_model_sym;
     c->get_number    = arith_get_number;
 }
@@ -143,13 +144,13 @@ static int mss1_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
     int buf_size = avpkt->size;
     MSS1Context *ctx = avctx->priv_data;
     MSS12Context *c = &ctx->ctx;
-    GetBitContext gb;
+    BitstreamContext bc;
     ArithCoder acoder;
     int pal_changed = 0;
     int ret;
 
-    init_get_bits(&gb, buf, buf_size * 8);
-    arith_init(&acoder, &gb);
+    bitstream_init8(&bc, buf, buf_size);
+    arith_init(&acoder, &bc);
 
     if ((ret = ff_reget_buffer(avctx, ctx->pic)) < 0) {
         av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
diff --git a/libavcodec/mss12.h b/libavcodec/mss12.h
index 5b1fee8..6936951 100644
--- a/libavcodec/mss12.h
+++ b/libavcodec/mss12.h
@@ -28,7 +28,7 @@
 
 #include "libavutil/intreadwrite.h"
 #include "avcodec.h"
-#include "get_bits.h"
+#include "bitstream.h"
 #include "bytestream.h"
 
 #define MODEL_MIN_SYMS    2
@@ -48,7 +48,7 @@ typedef struct Model {
 typedef struct ArithCoder {
     int low, high, value;
     union {
-        GetBitContext *gb;
+        BitstreamContext *bc;
         GetByteContext *gB;
     } gbc;
     int (*get_model_sym)(struct ArithCoder *c, Model *m);
diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c
index 2c993f6..50eec86 100644
--- a/libavcodec/mss2.c
+++ b/libavcodec/mss2.c
@@ -24,6 +24,8 @@
  */
 
 #include "libavutil/avassert.h"
+
+#include "bitstream.h"
 #include "error_resilience.h"
 #include "internal.h"
 #include "mpeg_er.h"
@@ -33,6 +35,7 @@
 #include "wmv2data.h"
 #include "mss12.h"
 #include "mss2dsp.h"
+#include "vlc.h"
 
 typedef struct MSS2Context {
     VC1Context     v;
@@ -232,7 +235,7 @@ static int decode_555(GetByteContext *gB, uint16_t *dst, 
int stride,
     return 0;
 }
 
-static int decode_rle(GetBitContext *gb, uint8_t *pal_dst, int pal_stride,
+static int decode_rle(BitstreamContext *bc, uint8_t *pal_dst, int pal_stride,
                       uint8_t *rgb_dst, int rgb_stride, uint32_t *pal,
                       int keyframe, int kf_slipt, int slice, int w, int h)
 {
@@ -250,10 +253,10 @@ static int decode_rle(GetBitContext *gb, uint8_t 
*pal_dst, int pal_stride,
     if (!keyframe) {
         int x, y, clipw, cliph;
 
-        x     = get_bits(gb, 12);
-        y     = get_bits(gb, 12);
-        clipw = get_bits(gb, 12) + 1;
-        cliph = get_bits(gb, 12) + 1;
+        x     = bitstream_read(bc, 12);
+        y     = bitstream_read(bc, 12);
+        clipw = bitstream_read(bc, 12) + 1;
+        cliph = bitstream_read(bc, 12) + 1;
 
         if (x + clipw > w || y + cliph > h)
             return AVERROR_INVALIDDATA;
@@ -276,11 +279,11 @@ static int decode_rle(GetBitContext *gb, uint8_t 
*pal_dst, int pal_stride,
     /* read explicit codes */
     do {
         while (current_codes--) {
-            int symbol = get_bits(gb, 8);
+            int symbol = bitstream_read(bc, 8);
             if (symbol >= 204 - keyframe)
                 symbol += 14 - keyframe;
             else if (symbol > 189)
-                symbol = get_bits1(gb) + (symbol << 1) - 190;
+                symbol = bitstream_read_bit(bc) + (symbol << 1) - 190;
             if (bits[symbol])
                 return AVERROR_INVALIDDATA;
             bits[symbol]  = current_length;
@@ -290,7 +293,7 @@ static int decode_rle(GetBitContext *gb, uint8_t *pal_dst, 
int pal_stride,
         current_length++;
         next_code     <<= 1;
         remaining_codes = (1 << current_length) - next_code;
-        current_codes   = get_bits(gb, av_ceil_log2(remaining_codes + 1));
+        current_codes   = bitstream_read(bc, av_ceil_log2(remaining_codes + 
1));
         if (current_length > 22 || current_codes > remaining_codes)
             return AVERROR_INVALIDDATA;
     } while (current_codes != remaining_codes);
@@ -327,18 +330,18 @@ static int decode_rle(GetBitContext *gb, uint8_t 
*pal_dst, int pal_stride,
         uint8_t *rp = rgb_dst;
         do {
             if (repeat-- < 1) {
-                int b = get_vlc2(gb, vlc.table, 9, 3);
+                int b = bitstream_read_vlc(bc, vlc.table, 9, 3);
                 if (b < 256)
                     last_symbol = b;
                 else if (b < 268) {
                     b -= 256;
                     if (b == 11)
-                        b = get_bits(gb, 4) + 10;
+                        b = bitstream_read(bc, 4) + 10;
 
                     if (!b)
                         repeat = 0;
                     else
-                        repeat = get_bits(gb, b);
+                        repeat = bitstream_read(bc, b);
 
                     repeat += (1 << b) - 1;
 
@@ -381,11 +384,11 @@ static int decode_wmv9(AVCodecContext *avctx, const 
uint8_t *buf, int buf_size,
 
     ff_mpeg_flush(avctx);
 
-    init_get_bits(&s->gb, buf, buf_size * 8);
+    bitstream_init8(&s->bc, buf, buf_size);
 
     s->loop_filter = avctx->skip_loop_filter < AVDISCARD_ALL;
 
-    if (ff_vc1_parse_frame_header(v, &s->gb) < 0) {
+    if (ff_vc1_parse_frame_header(v, &s->bc) < 0) {
         av_log(v->s.avctx, AV_LOG_ERROR, "header error\n");
         return AVERROR_INVALIDDATA;
     }
@@ -467,7 +470,7 @@ static int mss2_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
     MSS2Context *ctx = avctx->priv_data;
     MSS12Context *c  = &ctx->c;
     AVFrame *frame   = data;
-    GetBitContext gb;
+    BitstreamContext bc;
     GetByteContext gB;
     ArithCoder acoder;
 
@@ -477,27 +480,27 @@ static int mss2_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
     int used_rects = 0, i, implicit_rect = 0, av_uninit(wmv9_mask);
 
     av_assert0(AV_INPUT_BUFFER_PADDING_SIZE >=
-               ARITH2_PADDING + (MIN_CACHE_BITS + 7) / 8);
+               ARITH2_PADDING + (25 + 7) / 8);
 
-    init_get_bits(&gb, buf, buf_size * 8);
+    bitstream_init8(&bc, buf, buf_size);
 
-    if (keyframe = get_bits1(&gb))
-        skip_bits(&gb, 7);
-    has_wmv9 = get_bits1(&gb);
-    has_mv   = keyframe ? 0 : get_bits1(&gb);
-    is_rle   = get_bits1(&gb);
-    is_555   = is_rle && get_bits1(&gb);
+    if (keyframe = bitstream_read_bit(&bc))
+        bitstream_skip(&bc, 7);
+    has_wmv9 = bitstream_read_bit(&bc);
+    has_mv   = keyframe ? 0 : bitstream_read_bit(&bc);
+    is_rle   = bitstream_read_bit(&bc);
+    is_555   = is_rle && bitstream_read_bit(&bc);
     if (c->slice_split > 0)
         ctx->split_position = c->slice_split;
     else if (c->slice_split < 0) {
-        if (get_bits1(&gb)) {
-            if (get_bits1(&gb)) {
-                if (get_bits1(&gb))
-                    ctx->split_position = get_bits(&gb, 16);
+        if (bitstream_read_bit(&bc)) {
+            if (bitstream_read_bit(&bc)) {
+                if (bitstream_read_bit(&bc))
+                    ctx->split_position = bitstream_read(&bc, 16);
                 else
-                    ctx->split_position = get_bits(&gb, 12);
+                    ctx->split_position = bitstream_read(&bc, 12);
             } else
-                ctx->split_position = get_bits(&gb, 8) << 4;
+                ctx->split_position = bitstream_read(&bc, 8) << 4;
         } else {
             if (keyframe)
                 ctx->split_position = avctx->height / 2;
@@ -509,9 +512,9 @@ static int mss2_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
                            ctx->split_position > avctx->height - 1))
         return AVERROR_INVALIDDATA;
 
-    align_get_bits(&gb);
-    buf      += get_bits_count(&gb) >> 3;
-    buf_size -= get_bits_count(&gb) >> 3;
+    bitstream_align(&bc);
+    buf      += bitstream_tell(&bc) >> 3;
+    buf_size -= bitstream_tell(&bc) >> 3;
 
     if (buf_size < 1)
         return AVERROR_INVALIDDATA;
@@ -641,24 +644,24 @@ static int mss2_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
                 ff_mss12_slicecontext_reset(&ctx->sc[1]);
         }
         if (is_rle) {
-            init_get_bits(&gb, buf, buf_size * 8);
-            if (ret = decode_rle(&gb, c->pal_pic, c->pal_stride,
+            bitstream_init8(&bc, buf, buf_size);
+            if (ret = decode_rle(&bc, c->pal_pic, c->pal_stride,
                                  c->rgb_pic, c->rgb_stride, c->pal, keyframe,
                                  ctx->split_position, 0,
                                  avctx->width, avctx->height))
                 return ret;
-            align_get_bits(&gb);
+            bitstream_align(&bc);
 
             if (c->slice_split)
-                if (ret = decode_rle(&gb, c->pal_pic, c->pal_stride,
+                if (ret = decode_rle(&bc, c->pal_pic, c->pal_stride,
                                      c->rgb_pic, c->rgb_stride, c->pal, 
keyframe,
                                      ctx->split_position, 1,
                                      avctx->width, avctx->height))
                     return ret;
 
-            align_get_bits(&gb);
-            buf      += get_bits_count(&gb) >> 3;
-            buf_size -= get_bits_count(&gb) >> 3;
+            bitstream_align(&bc);
+            buf      += bitstream_tell(&bc) >> 3;
+            buf_size -= bitstream_tell(&bc) >> 3;
         } else if (!implicit_rect || wmv9_mask != -1) {
             if (c->corrupted)
                 return AVERROR_INVALIDDATA;
diff --git a/libavcodec/mss4.c b/libavcodec/mss4.c
index a953a57..06492ee 100644
--- a/libavcodec/mss4.c
+++ b/libavcodec/mss4.c
@@ -26,11 +26,12 @@
  */
 
 #include "avcodec.h"
+#include "bitstream.h"
 #include "bytestream.h"
-#include "get_bits.h"
 #include "internal.h"
 #include "mss34dsp.h"
 #include "unary.h"
+#include "vlc.h"
 
 #define HEADER_SIZE 8
 
@@ -202,28 +203,28 @@ static av_cold void mss4_free_vlcs(MSS4Context *ctx)
  * nbits = 1 -> -1, 1
  * nbits = 2 -> -3, -2, 2, 3
  */
-static av_always_inline int get_coeff_bits(GetBitContext *gb, int nbits)
+static av_always_inline int get_coeff_bits(BitstreamContext *bc, int nbits)
 {
     int val;
 
     if (!nbits)
         return 0;
 
-    val = get_bits(gb, nbits);
+    val = bitstream_read(bc, nbits);
     if (val < (1 << (nbits - 1)))
         val -= (1 << nbits) - 1;
 
     return val;
 }
 
-static inline int get_coeff(GetBitContext *gb, VLC *vlc)
+static inline int get_coeff(BitstreamContext *bc, VLC *vlc)
 {
-    int val = get_vlc2(gb, vlc->table, vlc->bits, 2);
+    int val = bitstream_read_vlc(bc, vlc->table, vlc->bits, 2);
 
-    return get_coeff_bits(gb, val);
+    return get_coeff_bits(bc, val);
 }
 
-static int mss4_decode_dct(GetBitContext *gb, VLC *dc_vlc, VLC *ac_vlc,
+static int mss4_decode_dct(BitstreamContext *bc, VLC *dc_vlc, VLC *ac_vlc,
                            int *block, int *dc_cache,
                            int bx, int by, uint16_t *quant_mat)
 {
@@ -231,7 +232,7 @@ static int mss4_decode_dct(GetBitContext *gb, VLC *dc_vlc, 
VLC *ac_vlc,
 
     memset(block, 0, sizeof(*block) * 64);
 
-    dc = get_coeff(gb, dc_vlc);
+    dc = get_coeff(bc, dc_vlc);
     // DC prediction is the same as in MSS3
     if (by) {
         if (bx) {
@@ -255,7 +256,7 @@ static int mss4_decode_dct(GetBitContext *gb, VLC *dc_vlc, 
VLC *ac_vlc,
     block[0]       = dc * quant_mat[0];
 
     while (pos < 64) {
-        val = get_vlc2(gb, ac_vlc->table, 9, 2);
+        val = bitstream_read_vlc(bc, ac_vlc->table, 9, 2);
         if (!val)
             return 0;
         if (val == -1)
@@ -265,7 +266,7 @@ static int mss4_decode_dct(GetBitContext *gb, VLC *dc_vlc, 
VLC *ac_vlc,
             continue;
         }
         skip = val >> 4;
-        val  = get_coeff_bits(gb, val & 0xF);
+        val  = get_coeff_bits(bc, val & 0xF);
         pos += skip;
         if (pos >= 64)
             return -1;
@@ -278,7 +279,7 @@ static int mss4_decode_dct(GetBitContext *gb, VLC *dc_vlc, 
VLC *ac_vlc,
     return pos == 64 ? 0 : -1;
 }
 
-static int mss4_decode_dct_block(MSS4Context *c, GetBitContext *gb,
+static int mss4_decode_dct_block(MSS4Context *c, BitstreamContext *bc,
                                  uint8_t *dst[3], int mb_x, int mb_y)
 {
     int i, j, k, ret;
@@ -289,7 +290,7 @@ static int mss4_decode_dct_block(MSS4Context *c, 
GetBitContext *gb,
             int xpos = mb_x * 2 + i;
             c->dc_cache[j][TOP_LEFT] = c->dc_cache[j][TOP];
             c->dc_cache[j][TOP]      = c->prev_dc[0][mb_x * 2 + i];
-            ret = mss4_decode_dct(gb, c->dc_vlc, c->ac_vlc, c->block,
+            ret = mss4_decode_dct(bc, c->dc_vlc, c->ac_vlc, c->block,
                                   c->dc_cache[j],
                                   xpos, mb_y * 2 + j, c->quant_mat[0]);
             if (ret)
@@ -305,7 +306,7 @@ static int mss4_decode_dct_block(MSS4Context *c, 
GetBitContext *gb,
     for (i = 1; i < 3; i++) {
         c->dc_cache[i + 1][TOP_LEFT] = c->dc_cache[i + 1][TOP];
         c->dc_cache[i + 1][TOP]      = c->prev_dc[i][mb_x];
-        ret = mss4_decode_dct(gb, c->dc_vlc + 1, c->ac_vlc + 1,
+        ret = mss4_decode_dct(bc, c->dc_vlc + 1, c->ac_vlc + 1,
                               c->block, c->dc_cache[i + 1], mb_x, mb_y,
                               c->quant_mat[1]);
         if (ret)
@@ -326,7 +327,7 @@ static int mss4_decode_dct_block(MSS4Context *c, 
GetBitContext *gb,
     return 0;
 }
 
-static void read_vec_pos(GetBitContext *gb, int *vec_pos, int *sel_flag,
+static void read_vec_pos(BitstreamContext *bc, int *vec_pos, int *sel_flag,
                          int *sel_len, int *prev)
 {
     int i, y_flag = 0;
@@ -336,10 +337,10 @@ static void read_vec_pos(GetBitContext *gb, int *vec_pos, 
int *sel_flag,
             vec_pos[i] = 0;
             continue;
         }
-        if ((!i && !y_flag) || get_bits1(gb)) {
+        if ((!i && !y_flag) || bitstream_read_bit(bc)) {
             if (sel_len[i] > 0) {
                 int pval = prev[i];
-                vec_pos[i] = get_bits(gb, sel_len[i]);
+                vec_pos[i] = bitstream_read(bc, sel_len[i]);
                 if (vec_pos[i] >= pval)
                     vec_pos[i]++;
             } else {
@@ -352,14 +353,14 @@ static void read_vec_pos(GetBitContext *gb, int *vec_pos, 
int *sel_flag,
     }
 }
 
-static int get_value_cached(GetBitContext *gb, int vec_pos, uint8_t *vec,
+static int get_value_cached(BitstreamContext *bc, int vec_pos, uint8_t *vec,
                             int vec_size, int component, int shift, int *prev)
 {
     if (vec_pos < vec_size)
         return vec[vec_pos];
-    if (!get_bits1(gb))
+    if (!bitstream_read_bit(bc))
         return prev[component];
-    prev[component] = get_bits(gb, 8 - shift) << shift;
+    prev[component] = bitstream_read(bc, 8 - shift) << shift;
     return prev[component];
 }
 
@@ -376,7 +377,7 @@ static int get_value_cached(GetBitContext *gb, int vec_pos, 
uint8_t *vec,
  * positions can be updated or reused from the state of the previous line
  * or previous pixel.
  */
-static int mss4_decode_image_block(MSS4Context *ctx, GetBitContext *gb,
+static int mss4_decode_image_block(MSS4Context *ctx, BitstreamContext *bc,
                                    uint8_t *picdst[3], int mb_x, int mb_y)
 {
     uint8_t vec[3][4];
@@ -395,9 +396,9 @@ static int mss4_decode_image_block(MSS4Context *ctx, 
GetBitContext *gb,
         dst[i] = ctx->imgbuf[i];
 
     for (i = 0; i < 3; i++) {
-        vec_len[i] = vec_len_syms[!!i][get_unary(gb, 0, 3)];
+        vec_len[i] = vec_len_syms[!!i][get_unary(bc, 0, 3)];
         for (j = 0; j < vec_len[i]; j++) {
-            vec[i][j]  = get_coeff(gb, &ctx->vec_entry_vlc[!!i]);
+            vec[i][j]  = get_coeff(bc, &ctx->vec_entry_vlc[!!i]);
             vec[i][j] += ctx->prev_vec[i][j];
             ctx->prev_vec[i][j] = vec[i][j];
         }
@@ -406,16 +407,16 @@ static int mss4_decode_image_block(MSS4Context *ctx, 
GetBitContext *gb,
     }
 
     for (j = 0; j < 16; j++) {
-        if (get_bits1(gb)) {
+        if (bitstream_read_bit(bc)) {
             split = 0;
-            if (get_bits1(gb)) {
+            if (bitstream_read_bit(bc)) {
                 prev_mode[0] = 0;
                 vals[0] = vals[1] = vals[2] = 0;
                 mode = 2;
             } else {
-                mode = get_bits1(gb);
+                mode = bitstream_read_bit(bc);
                 if (mode)
-                    split = get_bits(gb, 4);
+                    split = bitstream_read(bc, 4);
             }
             for (i = 0; i < 16; i++) {
                 if (mode <= 1) {
@@ -423,21 +424,21 @@ static int mss4_decode_image_block(MSS4Context *ctx, 
GetBitContext *gb,
                     vals[1] = (prev_mode[i] >> 3) & 7;
                     vals[2] =  prev_mode[i] >> 6;
                     if (mode == 1 && i == split) {
-                        read_vec_pos(gb, vals, sel_flag, sel_len, vals);
+                        read_vec_pos(bc, vals, sel_flag, sel_len, vals);
                     }
                 } else if (mode == 2) {
-                    if (get_bits1(gb))
-                        read_vec_pos(gb, vals, sel_flag, sel_len, vals);
+                    if (bitstream_read_bit(bc))
+                        read_vec_pos(bc, vals, sel_flag, sel_len, vals);
                 }
                 for (k = 0; k < 3; k++)
-                    *dst[k]++ = get_value_cached(gb, vals[k], vec[k],
+                    *dst[k]++ = get_value_cached(bc, vals[k], vec[k],
                                                  vec_len[k], k,
                                                  val_shift, prev_pix);
                 prev_mode[i] = MKVAL(vals);
             }
         } else {
-            if (get_bits1(gb)) {
-                split = get_bits(gb, 4);
+            if (bitstream_read_bit(bc)) {
+                split = bitstream_read(bc, 4);
                 if (split >= prev_split)
                     split++;
                 prev_split = split;
@@ -450,7 +451,7 @@ static int mss4_decode_image_block(MSS4Context *ctx, 
GetBitContext *gb,
                 vals[2] =  prev_mode[0] >> 6;
                 for (i = 0; i < 3; i++) {
                     for (k = 0; k < split; k++) {
-                        *dst[i]++ = get_value_cached(gb, vals[i], vec[i],
+                        *dst[i]++ = get_value_cached(bc, vals[i], vec[i],
                                                      vec_len[i], i, val_shift,
                                                      prev_pix);
                         prev_mode[k] = MKVAL(vals);
@@ -462,13 +463,13 @@ static int mss4_decode_image_block(MSS4Context *ctx, 
GetBitContext *gb,
                 vals[0] =  prev_vec1       & 7;
                 vals[1] = (prev_vec1 >> 3) & 7;
                 vals[2] =  prev_vec1 >> 6;
-                if (get_bits1(gb)) {
-                    read_vec_pos(gb, vals, sel_flag, sel_len, vals);
+                if (bitstream_read_bit(bc)) {
+                    read_vec_pos(bc, vals, sel_flag, sel_len, vals);
                     prev_vec1 = MKVAL(vals);
                 }
                 for (i = 0; i < 3; i++) {
                     for (k = 0; k < 16 - split; k++) {
-                        *dst[i]++ = get_value_cached(gb, vals[i], vec[i],
+                        *dst[i]++ = get_value_cached(bc, vals[i], vec[i],
                                                      vec_len[i], i, val_shift,
                                                      prev_pix);
                         prev_mode[split + k] = MKVAL(vals);
@@ -511,7 +512,7 @@ static int mss4_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
     const uint8_t *buf = avpkt->data;
     int buf_size = avpkt->size;
     MSS4Context *c = avctx->priv_data;
-    GetBitContext gb;
+    BitstreamContext bb;
     GetByteContext bc;
     uint8_t *dst[3];
     int width, height, quality, frame_type;
@@ -574,7 +575,7 @@ static int mss4_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
             ff_mss34_gen_quant_mat(c->quant_mat[i], quality, !i);
     }
 
-    init_get_bits(&gb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE) * 8);
+    bitstream_init8(&bb, buf + HEADER_SIZE, (buf_size - HEADER_SIZE));
 
     mb_width  = FFALIGN(width,  16) >> 4;
     mb_height = FFALIGN(height, 16) >> 4;
@@ -586,10 +587,10 @@ static int mss4_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
     for (y = 0; y < mb_height; y++) {
         memset(c->dc_cache, 0, sizeof(c->dc_cache));
         for (x = 0; x < mb_width; x++) {
-            blk_type = decode012(&gb);
+            blk_type = bitstream_decode012(&bb);
             switch (blk_type) {
             case DCT_BLOCK:
-                if (mss4_decode_dct_block(c, &gb, dst, x, y) < 0) {
+                if (mss4_decode_dct_block(c, &bb, dst, x, y) < 0) {
                     av_log(avctx, AV_LOG_ERROR,
                            "Error decoding DCT block %d,%d\n",
                            x, y);
@@ -597,7 +598,7 @@ static int mss4_decode_frame(AVCodecContext *avctx, void 
*data, int *got_frame,
                 }
                 break;
             case IMAGE_BLOCK:
-                if (mss4_decode_image_block(c, &gb, dst, x, y) < 0) {
+                if (mss4_decode_image_block(c, &bb, dst, x, y) < 0) {
                     av_log(avctx, AV_LOG_ERROR,
                            "Error decoding VQ block %d,%d\n",
                            x, y);
-- 
2.1.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to