mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
automatic workaround for another padding bug
Originally committed as revision 3678 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
311c700878
commit
4940ed6ae1
@ -255,18 +255,25 @@ static int decode_slice(MpegEncContext *s){
|
|||||||
|
|
||||||
if(bits_left==0){
|
if(bits_left==0){
|
||||||
s->padding_bug_score+=16;
|
s->padding_bug_score+=16;
|
||||||
}else if(bits_left>8){
|
|
||||||
s->padding_bug_score++;
|
|
||||||
} else if(bits_left != 1){
|
} else if(bits_left != 1){
|
||||||
int v= show_bits(&s->gb, 8);
|
int v= show_bits(&s->gb, 8);
|
||||||
v|= 0x7F >> (7-(bits_count&7));
|
v|= 0x7F >> (7-(bits_count&7));
|
||||||
|
|
||||||
if(v==0x7F)
|
if(v==0x7F && bits_left<=8)
|
||||||
s->padding_bug_score--;
|
s->padding_bug_score--;
|
||||||
|
else if(v==0x7F && ((get_bits_count(&s->gb)+8)&8) && bits_left<=16)
|
||||||
|
s->padding_bug_score+= 4;
|
||||||
else
|
else
|
||||||
s->padding_bug_score++;
|
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
|
// 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
|
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){
|
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"))
|
if(s->avctx->codec_tag == ff_get_fourcc("XVIX"))
|
||||||
s->workaround_bugs|= FF_BUG_XVID_ILACE;
|
s->workaround_bugs|= FF_BUG_XVID_ILACE;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user