diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-11-13 01:05:12 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-11-13 01:05:12 +0000 |
commit | 4940ed6ae12e47a6cab496c3f32326fc39ab4b7b (patch) | |
tree | 73f38d2f8eb5467276e2da454ea69f2aef2c1347 /libavcodec/h263dec.c | |
parent | 311c700878d67615998c68b273e8966bffc7690c (diff) | |
download | ffmpeg-streaming-4940ed6ae12e47a6cab496c3f32326fc39ab4b7b.zip ffmpeg-streaming-4940ed6ae12e47a6cab496c3f32326fc39ab4b7b.tar.gz |
automatic workaround for another padding bug
Originally committed as revision 3678 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263dec.c')
-rw-r--r-- | libavcodec/h263dec.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index b172515..a95f751 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -255,18 +255,25 @@ static int decode_slice(MpegEncContext *s){ if(bits_left==0){ s->padding_bug_score+=16; - }else if(bits_left>8){ - s->padding_bug_score++; } else if(bits_left != 1){ int v= show_bits(&s->gb, 8); v|= 0x7F >> (7-(bits_count&7)); - if(v==0x7F) + if(v==0x7F && bits_left<=8) s->padding_bug_score--; + else if(v==0x7F && ((get_bits_count(&s->gb)+8)&8) && bits_left<=16) + s->padding_bug_score+= 4; else s->padding_bug_score++; } } + + if(s->workaround_bugs&FF_BUG_AUTODETECT){ + if(s->padding_bug_score > -2 && !s->data_partitioning && (s->divx_version || !s->resync_marker)) + s->workaround_bugs |= FF_BUG_NO_PADDING; + else + s->workaround_bugs &= ~FF_BUG_NO_PADDING; + } // handle formats which dont have unique end markers if(s->msmpeg4_version || (s->workaround_bugs&FF_BUG_NO_PADDING)){ //FIXME perhaps solve this more cleanly @@ -523,11 +530,6 @@ retry: } if(s->workaround_bugs&FF_BUG_AUTODETECT){ - s->workaround_bugs &= ~FF_BUG_NO_PADDING; - - if(s->padding_bug_score > -2 && !s->data_partitioning && (s->divx_version || !s->resync_marker)) - s->workaround_bugs |= FF_BUG_NO_PADDING; - if(s->avctx->codec_tag == ff_get_fourcc("XVIX")) s->workaround_bugs|= FF_BUG_XVID_ILACE; |