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;