From 461cd5bfb5c38e48a81b4a9a5912dfd65da1ba3d Mon Sep 17 00:00:00 2001 From: Ivan Kalvachev Date: Tue, 2 Mar 2004 18:39:25 +0000 Subject: [PATCH] add vlc for cbp=0 that is valid in 422,444 Originally committed as revision 2838 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/mpeg12.c | 9 ++++----- libavcodec/mpeg12data.h | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 7af3c6f424..60241ec155 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -596,7 +596,7 @@ void mpeg1_encode_mb(MpegEncContext *s, s->mv_bits+= get_bits_diff(s); } if(cbp) - put_bits(&s->pb, mbPatTable[cbp - 1][1], mbPatTable[cbp - 1][0]); + put_bits(&s->pb, mbPatTable[cbp][1], mbPatTable[cbp][0]); s->f_count++; } else{ static const int mb_type_len[4]={0,3,4,2}; //bak,for,bi @@ -675,7 +675,7 @@ void mpeg1_encode_mb(MpegEncContext *s, } s->mv_bits += get_bits_diff(s); if(cbp) - put_bits(&s->pb, mbPatTable[cbp - 1][1], mbPatTable[cbp - 1][0]); + put_bits(&s->pb, mbPatTable[cbp][1], mbPatTable[cbp][0]); } for(i=0;i<6;i++) { if (cbp & (1 << (5 - i))) { @@ -967,7 +967,7 @@ static void init_vlcs() 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, + init_vlc(&mb_pat_vlc, MB_PAT_VLC_BITS, 64, &mbPatTable[0][1], 2, 1, &mbPatTable[0][0], 2, 1); @@ -1306,11 +1306,10 @@ static int mpeg_decode_mb(MpegEncContext *s, if (HAS_CBP(mb_type)) { cbp = get_vlc2(&s->gb, mb_pat_vlc.table, MB_PAT_VLC_BITS, 1); - if (cbp < 0){ + if (cbp < 0 || (cbp == 0) && (s->chroma_format < 2) ){ av_log(s->avctx, AV_LOG_ERROR, "invalid cbp at %d %d\n", s->mb_x, s->mb_y); return -1; } - cbp++; if(s->chroma_format == 2){//CHROMA422 cbp|= ( get_bits(&s->gb,2) ) << 6; }else diff --git a/libavcodec/mpeg12data.h b/libavcodec/mpeg12data.h index b5ae2bcb19..4ee460ccc8 100644 --- a/libavcodec/mpeg12data.h +++ b/libavcodec/mpeg12data.h @@ -217,7 +217,8 @@ static const uint8_t mbAddrIncrTable[36][2] = { {0x0, 8}, /* end (and 15 more 0 bits should follow) */ }; -static const uint8_t mbPatTable[63][2] = { +static const uint8_t mbPatTable[64][2] = { + {0x1, 9}, {0xb, 5}, {0x9, 5}, {0xd, 6}, -- GitLab