summaryrefslogtreecommitdiff
path: root/libavcodec/h263dec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-08-25 12:50:15 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-08-25 12:50:15 +0000
commit9b6a5b87a699f469c85ab0bc058988956f4bc012 (patch)
treeb9065d2a39af4a99df61b26a2d420c8eed7dac0c /libavcodec/h263dec.c
parent802f454e5bf2657c3b95c364b474625539a29cd4 (diff)
xvid edge bug (if i understand the mpeg4 spec correctly) autodetection
improved edge & padding bug detection for old files tested with *.avi *.mp4 on my HD Originally committed as revision 2163 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263dec.c')
-rw-r--r--libavcodec/h263dec.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 0bd2ab3395..fcbfe576d3 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -301,9 +301,9 @@ static int decode_slice(MpegEncContext *s){
return 0;
}
- fprintf(stderr, "slice end not reached but screenspace end (%d left %06X)\n",
+ fprintf(stderr, "slice end not reached but screenspace end (%d left %06X, score= %d)\n",
s->gb.size_in_bits - get_bits_count(&s->gb),
- show_bits(&s->gb, 24));
+ show_bits(&s->gb, 24), s->padding_bug_score);
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)&part_mask);
@@ -480,28 +480,30 @@ retry:
}
avctx->has_b_frames= !s->low_delay;
+
+ if(s->xvid_build==0 && s->divx_version==0 && s->lavc_build==0){
+ if(s->avctx->codec_tag == ff_get_fourcc("XVID") || s->avctx->codec_tag == ff_get_fourcc("XVIX"))
+ s->xvid_build= -1;
+
+ if(s->avctx->codec_tag == ff_get_fourcc("DIVX") && s->vo_type==0 && s->vol_control_parameters==0)
+ s->divx_version= 400; //divx 4
+ }
if(s->workaround_bugs&FF_BUG_AUTODETECT){
- if(s->padding_bug_score > -2 && !s->data_partitioning && !s->resync_marker)
+ 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;
- else
- s->workaround_bugs &= ~FF_BUG_NO_PADDING;
if(s->avctx->codec_tag == ff_get_fourcc("XVIX"))
s->workaround_bugs|= FF_BUG_XVID_ILACE;
-#if 0
- if(s->avctx->codec_tag == ff_get_fourcc("MP4S"))
- s->workaround_bugs|= FF_BUG_AC_VLC;
-
- if(s->avctx->codec_tag == ff_get_fourcc("M4S2"))
- s->workaround_bugs|= FF_BUG_AC_VLC;
-#endif
+
if(s->avctx->codec_tag == ff_get_fourcc("UMP4")){
s->workaround_bugs|= FF_BUG_UMP4;
s->workaround_bugs|= FF_BUG_AC_VLC;
}
- if(s->divx_version){
+ if(s->divx_version>=500){
s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
}
@@ -509,18 +511,15 @@ retry:
s->workaround_bugs|= FF_BUG_QPEL_CHROMA2;
}
- if(s->avctx->codec_tag == ff_get_fourcc("XVID") && s->xvid_build==0)
- s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
-
- if(s->avctx->codec_tag == ff_get_fourcc("XVID") && s->xvid_build==0)
- s->padding_bug_score= 256*256*256*64;
-
if(s->xvid_build && s->xvid_build<=3)
s->padding_bug_score= 256*256*256*64;
if(s->xvid_build && s->xvid_build<=1)
s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
+ if(s->xvid_build && s->xvid_build<=12)
+ s->workaround_bugs|= FF_BUG_EDGE;
+
#define SET_QPEL_FUNC(postfix1, postfix2) \
s->dsp.put_ ## postfix1 = ff_put_ ## postfix2;\
s->dsp.put_no_rnd_ ## postfix1 = ff_put_no_rnd_ ## postfix2;\
@@ -546,9 +545,6 @@ retry:
s->workaround_bugs|= FF_BUG_EDGE;
}
- if(s->avctx->codec_tag == ff_get_fourcc("DIVX") && s->divx_version==0 && s->lavc_build==0 && s->xvid_build==0 && s->vo_type==0 && s->vol_control_parameters==0 && s->low_delay)
- s->workaround_bugs|= FF_BUG_EDGE;
-
#if 0
if(s->divx_version==500)
s->padding_bug_score= 256*256*256*64;