summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-10-22 19:48:52 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-10-22 19:48:52 +0000
commit7da71a5c687a3ceff7826a9e60a59aed3b1feffa (patch)
tree695784576d95b88f13941d7ef0cbc1b5b191821d /libavcodec
parent03e93d35b0167a7f163a0e480567e97260920d08 (diff)
xvid qpel bug autodetect
Originally committed as revision 1064 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h263.c16
-rw-r--r--libavcodec/h263dec.c7
-rw-r--r--libavcodec/mpegvideo.h2
3 files changed, 22 insertions, 3 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index 35963eb5a2..dfcc0b5baf 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -4328,6 +4328,8 @@ static int decode_user_data(MpegEncContext *s, GetBitContext *gb){
skip_bits(gb, 8);
}
buf[255]=0;
+
+ /* divx detection */
e=sscanf(buf, "DivX%dBuild%d", &ver, &build);
if(e!=2)
e=sscanf(buf, "DivX%db%d", &ver, &build);
@@ -4336,11 +4338,10 @@ static int decode_user_data(MpegEncContext *s, GetBitContext *gb){
s->divx_build= build;
if(s->picture_number==0){
printf("This file was encoded with DivX%d Build%d\n", ver, build);
- if(ver==500 && build==413){
- printf("WARNING: this version of DivX is not MPEG4 compatible, trying to workaround these bugs...\n");
- }
}
}
+
+ /* ffmpeg detection */
e=sscanf(buf, "FFmpeg%d.%d.%db%d", &ver, &ver2, &ver3, &build);
if(e!=4)
e=sscanf(buf, "FFmpeg v%d.%d.%d / libavcodec build: %d", &ver, &ver2, &ver3, &build);
@@ -4356,6 +4357,15 @@ static int decode_user_data(MpegEncContext *s, GetBitContext *gb){
if(s->picture_number==0)
printf("This file was encoded with libavcodec build %d\n", build);
}
+
+ /* xvid detection */
+ e=sscanf(buf, "XviD%d", &build);
+ if(e==1){
+ s->xvid_build= build;
+ if(s->picture_number==0)
+ printf("This file was encoded with XviD build %d\n", build);
+ }
+
//printf("User Data: %s\n", buf);
return 0;
}
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 653a2a8708..1e4345e623 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -376,6 +376,13 @@ uint64_t time= rdtsc();
if(s->divx_version){
s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
}
+
+ if(s->avctx->fourcc == ff_get_fourcc("XVID") && s->xvid_build==0)
+ s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
+
+ if(s->xvid_build && s->xvid_build<=1)
+ s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
+
//printf("padding_bug_score: %d\n", s->padding_bug_score);
#if 0
if(s->divx_version==500)
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 35df0915f6..254e85dac7 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -413,6 +413,8 @@ typedef struct MpegEncContext {
UINT8 *bitstream_buffer; //Divx 5.01 puts several frames in a single one, this is used to reorder them
int bitstream_buffer_size;
+ int xvid_build;
+
/* lavc specific stuff, used to workaround bugs in libavcodec */
int ffmpeg_version;
int lavc_build;