# HG changeset patch # User michaelni # Date 1050095717 0 # Node ID 4c2339f3863a4921530c85664f6d7d96178ab3ea # Parent ea015319b9e8cd0d3ab90630add1ec5a619be3ee 100l (mpeg2 decoding fixed) diff -r ea015319b9e8 -r 4c2339f3863a mpeg12.c --- a/mpeg12.c Fri Apr 11 09:20:45 2003 +0000 +++ b/mpeg12.c Fri Apr 11 21:15:17 2003 +0000 @@ -821,7 +821,7 @@ init_vlc(&mv_vlc, MV_VLC_BITS, 17, &mbMotionVectorTable[0][1], 2, 1, &mbMotionVectorTable[0][0], 2, 1); - init_vlc(&mbincr_vlc, MBINCR_VLC_BITS, 35, + init_vlc(&mbincr_vlc, MBINCR_VLC_BITS, 36, &mbAddrIncrTable[0][1], 2, 1, &mbAddrIncrTable[0][0], 2, 1); init_vlc(&mb_pat_vlc, MB_PAT_VLC_BITS, 63, @@ -1959,16 +1959,18 @@ for(;;) { int code = get_vlc2(&s->gb, mbincr_vlc.table, MBINCR_VLC_BITS, 2); if (code < 0){ - align_get_bits(&s->gb); - if(s->mb_skip_run != 0 || show_bits(&s->gb, 24) != 1){ - fprintf(stderr, "slice end missmatch\n"); - return -1; - } - goto eos; /* error = end of slice */ + fprintf(stderr, "mb incr damaged\n"); + return -1; } if (code >= 33) { if (code == 33) { s->mb_skip_run += 33; + }else if(code == 35){ + if(s->mb_skip_run != 0 || show_bits(&s->gb, 15) != 0){ + fprintf(stderr, "slice missmatch\n"); + return -1; + } + goto eos; /* end of slice */ } /* otherwise, stuffing, nothing to do */ } else { diff -r ea015319b9e8 -r 4c2339f3863a mpeg12data.h --- a/mpeg12data.h Fri Apr 11 09:20:45 2003 +0000 +++ b/mpeg12data.h Fri Apr 11 21:15:17 2003 +0000 @@ -185,7 +185,7 @@ mpeg1_level, }; -static const uint8_t mbAddrIncrTable[35][2] = { +static const uint8_t mbAddrIncrTable[36][2] = { {0x1, 1}, {0x3, 3}, {0x2, 3}, @@ -221,6 +221,7 @@ {0x18, 11}, {0x8, 11}, /* escape */ {0xf, 11}, /* stuffing */ + {0x0, 8}, /* end (and 15 more 0 bits should follow) */ }; static const uint8_t mbPatTable[63][2] = {