- mode = bytestream_get_byte(bs);
- if (mode>buf_end-*bs) {
- av_log(s->avctx, AV_LOG_ERROR, "truncated macroblock\n");
- return;
- }
-
- if (mode>12) {
- GetBitContext gb;
- init_get_bits(&gb, *bs, mode*8);
- for(i=0; i<6; i++)
- tgq_decode_block(s, s->block[i], &gb);
- tgq_idct_put_mb(s, s->block, mb_x, mb_y);
- }else{
- if (mode==3) {
- memset(dc, (*bs)[0], 4);
- dc[4] = (*bs)[1];
- dc[5] = (*bs)[2];
- }else if (mode==6) {
- memcpy(dc, *bs, 6);
- }else if (mode==12) {
- for(i=0; i<6; i++)
- dc[i] = (*bs)[i*2];
- }else{
+ mode = bytestream2_get_byte(&s->gb);
+ if (mode > 12) {
+ BitstreamContext bc;
+ bitstream_init8(&bc, s->gb.buffer, FFMIN(s->gb.buffer_end - s->gb.buffer, mode));
+ for (i = 0; i < 6; i++)
+ tgq_decode_block(s, s->block[i], &bc);
+ tgq_idct_put_mb(s, s->block, frame, mb_x, mb_y);
+ bytestream2_skip(&s->gb, mode);
+ } else {
+ if (mode == 3) {
+ memset(dc, bytestream2_get_byte(&s->gb), 4);
+ dc[4] = bytestream2_get_byte(&s->gb);
+ dc[5] = bytestream2_get_byte(&s->gb);
+ } else if (mode == 6) {
+ bytestream2_get_buffer(&s->gb, dc, 6);
+ } else if (mode == 12) {
+ for (i = 0; i < 6; i++) {
+ dc[i] = bytestream2_get_byte(&s->gb);
+ bytestream2_skip(&s->gb, 1);
+ }
+ } else {