# HG changeset patch # User michael # Date 1100307912 0 # Node ID b25bf309cbc46a4653578609e69e4d05f60b9b90 # Parent f7f4f06a55c9b3c746d7788e69951111279babcc automatic workaround for another padding bug diff -r f7f4f06a55c9 -r b25bf309cbc4 h263dec.c --- a/h263dec.c Fri Nov 12 23:38:43 2004 +0000 +++ b/h263dec.c Sat Nov 13 01:05:12 2004 +0000 @@ -255,18 +255,25 @@ 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 @@ } 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;