Mercurial > libavcodec.hg
comparison h263dec.c @ 2350:b25bf309cbc4 libavcodec
automatic workaround for another padding bug
author | michael |
---|---|
date | Sat, 13 Nov 2004 01:05:12 +0000 |
parents | eb0c851db536 |
children | 0427eb3579b6 |
comparison
equal
deleted
inserted
replaced
2349:f7f4f06a55c9 | 2350:b25bf309cbc4 |
---|---|
253 const int bits_count= get_bits_count(&s->gb); | 253 const int bits_count= get_bits_count(&s->gb); |
254 const int bits_left = s->gb.size_in_bits - bits_count; | 254 const int bits_left = s->gb.size_in_bits - bits_count; |
255 | 255 |
256 if(bits_left==0){ | 256 if(bits_left==0){ |
257 s->padding_bug_score+=16; | 257 s->padding_bug_score+=16; |
258 }else if(bits_left>8){ | |
259 s->padding_bug_score++; | |
260 } else if(bits_left != 1){ | 258 } else if(bits_left != 1){ |
261 int v= show_bits(&s->gb, 8); | 259 int v= show_bits(&s->gb, 8); |
262 v|= 0x7F >> (7-(bits_count&7)); | 260 v|= 0x7F >> (7-(bits_count&7)); |
263 | 261 |
264 if(v==0x7F) | 262 if(v==0x7F && bits_left<=8) |
265 s->padding_bug_score--; | 263 s->padding_bug_score--; |
264 else if(v==0x7F && ((get_bits_count(&s->gb)+8)&8) && bits_left<=16) | |
265 s->padding_bug_score+= 4; | |
266 else | 266 else |
267 s->padding_bug_score++; | 267 s->padding_bug_score++; |
268 } | 268 } |
269 } | |
270 | |
271 if(s->workaround_bugs&FF_BUG_AUTODETECT){ | |
272 if(s->padding_bug_score > -2 && !s->data_partitioning && (s->divx_version || !s->resync_marker)) | |
273 s->workaround_bugs |= FF_BUG_NO_PADDING; | |
274 else | |
275 s->workaround_bugs &= ~FF_BUG_NO_PADDING; | |
269 } | 276 } |
270 | 277 |
271 // handle formats which dont have unique end markers | 278 // handle formats which dont have unique end markers |
272 if(s->msmpeg4_version || (s->workaround_bugs&FF_BUG_NO_PADDING)){ //FIXME perhaps solve this more cleanly | 279 if(s->msmpeg4_version || (s->workaround_bugs&FF_BUG_NO_PADDING)){ //FIXME perhaps solve this more cleanly |
273 int left= s->gb.size_in_bits - get_bits_count(&s->gb); | 280 int left= s->gb.size_in_bits - get_bits_count(&s->gb); |
521 s->divx_version= | 528 s->divx_version= |
522 s->divx_build= 0; | 529 s->divx_build= 0; |
523 } | 530 } |
524 | 531 |
525 if(s->workaround_bugs&FF_BUG_AUTODETECT){ | 532 if(s->workaround_bugs&FF_BUG_AUTODETECT){ |
526 s->workaround_bugs &= ~FF_BUG_NO_PADDING; | |
527 | |
528 if(s->padding_bug_score > -2 && !s->data_partitioning && (s->divx_version || !s->resync_marker)) | |
529 s->workaround_bugs |= FF_BUG_NO_PADDING; | |
530 | |
531 if(s->avctx->codec_tag == ff_get_fourcc("XVIX")) | 533 if(s->avctx->codec_tag == ff_get_fourcc("XVIX")) |
532 s->workaround_bugs|= FF_BUG_XVID_ILACE; | 534 s->workaround_bugs|= FF_BUG_XVID_ILACE; |
533 | 535 |
534 if(s->avctx->codec_tag == ff_get_fourcc("UMP4")){ | 536 if(s->avctx->codec_tag == ff_get_fourcc("UMP4")){ |
535 s->workaround_bugs|= FF_BUG_UMP4; | 537 s->workaround_bugs|= FF_BUG_UMP4; |