summaryrefslogtreecommitdiff
path: root/libavcodec/h263dec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-11-13 01:05:12 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-11-13 01:05:12 +0000
commit4940ed6ae12e47a6cab496c3f32326fc39ab4b7b (patch)
tree73f38d2f8eb5467276e2da454ea69f2aef2c1347 /libavcodec/h263dec.c
parent311c700878d67615998c68b273e8966bffc7690c (diff)
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.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index b17251555a..a95f751611 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;