mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-18 15:25:05 +02:00
xvid qpel bug autodetect
Originally committed as revision 1064 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
03e93d35b0
commit
7da71a5c68
@ -4328,6 +4328,8 @@ static int decode_user_data(MpegEncContext *s, GetBitContext *gb){
|
|||||||
skip_bits(gb, 8);
|
skip_bits(gb, 8);
|
||||||
}
|
}
|
||||||
buf[255]=0;
|
buf[255]=0;
|
||||||
|
|
||||||
|
/* divx detection */
|
||||||
e=sscanf(buf, "DivX%dBuild%d", &ver, &build);
|
e=sscanf(buf, "DivX%dBuild%d", &ver, &build);
|
||||||
if(e!=2)
|
if(e!=2)
|
||||||
e=sscanf(buf, "DivX%db%d", &ver, &build);
|
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;
|
s->divx_build= build;
|
||||||
if(s->picture_number==0){
|
if(s->picture_number==0){
|
||||||
printf("This file was encoded with DivX%d Build%d\n", ver, build);
|
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);
|
e=sscanf(buf, "FFmpeg%d.%d.%db%d", &ver, &ver2, &ver3, &build);
|
||||||
if(e!=4)
|
if(e!=4)
|
||||||
e=sscanf(buf, "FFmpeg v%d.%d.%d / libavcodec build: %d", &ver, &ver2, &ver3, &build);
|
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)
|
if(s->picture_number==0)
|
||||||
printf("This file was encoded with libavcodec build %d\n", build);
|
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);
|
//printf("User Data: %s\n", buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -376,6 +376,13 @@ uint64_t time= rdtsc();
|
|||||||
if(s->divx_version){
|
if(s->divx_version){
|
||||||
s->workaround_bugs|= FF_BUG_QPEL_CHROMA;
|
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);
|
//printf("padding_bug_score: %d\n", s->padding_bug_score);
|
||||||
#if 0
|
#if 0
|
||||||
if(s->divx_version==500)
|
if(s->divx_version==500)
|
||||||
|
@ -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
|
UINT8 *bitstream_buffer; //Divx 5.01 puts several frames in a single one, this is used to reorder them
|
||||||
int bitstream_buffer_size;
|
int bitstream_buffer_size;
|
||||||
|
|
||||||
|
int xvid_build;
|
||||||
|
|
||||||
/* lavc specific stuff, used to workaround bugs in libavcodec */
|
/* lavc specific stuff, used to workaround bugs in libavcodec */
|
||||||
int ffmpeg_version;
|
int ffmpeg_version;
|
||||||
int lavc_build;
|
int lavc_build;
|
||||||
|
Loading…
Reference in New Issue
Block a user