Signed-off-by: Anton Khirnov <anton@khirnov.net>tags/n0.9
@@ -854,6 +854,14 @@ typedef struct AVFormatContext { | |||||
* decoding: number of frames used to probe fps | * decoding: number of frames used to probe fps | ||||
*/ | */ | ||||
int fps_probe_size; | int fps_probe_size; | ||||
/** | |||||
* Error recognition; higher values will detect more errors but may | |||||
* misdetect some more or less valid parts as errors. | |||||
* - encoding: unused | |||||
* - decoding: Set by user. | |||||
*/ | |||||
int error_recognition; | |||||
} AVFormatContext; | } AVFormatContext; | ||||
typedef struct AVPacketList { | typedef struct AVPacketList { | ||||
@@ -667,8 +667,9 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
break; | break; | ||||
case MKTAG('i', 'n', 'd', 'x'): | case MKTAG('i', 'n', 'd', 'x'): | ||||
i= avio_tell(pb); | i= avio_tell(pb); | ||||
if(pb->seekable && !(s->flags & AVFMT_FLAG_IGNIDX)){ | |||||
read_braindead_odml_indx(s, 0); | |||||
if(pb->seekable && !(s->flags & AVFMT_FLAG_IGNIDX) && | |||||
read_braindead_odml_indx(s, 0) < 0 && s->error_recognition >= FF_ER_EXPLODE){ | |||||
goto fail; | |||||
} | } | ||||
avio_seek(pb, i+size, SEEK_SET); | avio_seek(pb, i+size, SEEK_SET); | ||||
break; | break; | ||||
@@ -706,6 +707,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
if(size > 1000000){ | if(size > 1000000){ | ||||
av_log(s, AV_LOG_ERROR, "Something went wrong during header parsing, " | av_log(s, AV_LOG_ERROR, "Something went wrong during header parsing, " | ||||
"I will ignore it and try to continue anyway.\n"); | "I will ignore it and try to continue anyway.\n"); | ||||
if (s->error_recognition >= FF_ER_EXPLODE) goto fail; | |||||
avi->movi_list = avio_tell(pb) - 4; | avi->movi_list = avio_tell(pb) - 4; | ||||
avi->movi_end = avio_size(pb); | avi->movi_end = avio_size(pb); | ||||
goto end_of_header; | goto end_of_header; | ||||
@@ -87,6 +87,9 @@ static const AVOption options[]={ | |||||
{"fdebug", "print specific debug info", OFFSET(debug), FF_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, E|D, "fdebug"}, | {"fdebug", "print specific debug info", OFFSET(debug), FF_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, E|D, "fdebug"}, | ||||
{"ts", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_FDEBUG_TS }, INT_MIN, INT_MAX, E|D, "fdebug"}, | {"ts", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_FDEBUG_TS }, INT_MIN, INT_MAX, E|D, "fdebug"}, | ||||
{"max_delay", "maximum muxing or demuxing delay in microseconds", OFFSET(max_delay), FF_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, E|D}, | {"max_delay", "maximum muxing or demuxing delay in microseconds", OFFSET(max_delay), FF_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, E|D}, | ||||
{"fer", "set error detection aggressivity", OFFSET(error_recognition), FF_OPT_TYPE_INT, {.dbl = FF_ER_CAREFUL }, INT_MIN, INT_MAX, D, "fer"}, | |||||
{"careful", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_ER_CAREFUL }, INT_MIN, INT_MAX, D, "fer"}, | |||||
{"explode", "abort decoding on error recognition", 0, FF_OPT_TYPE_CONST, {.dbl = FF_ER_EXPLODE }, INT_MIN, INT_MAX, D, "fer"}, | |||||
{"fpsprobesize", "number of frames used to probe fps", OFFSET(fps_probe_size), FF_OPT_TYPE_INT, {.dbl = -1}, -1, INT_MAX-1, D}, | {"fpsprobesize", "number of frames used to probe fps", OFFSET(fps_probe_size), FF_OPT_TYPE_INT, {.dbl = -1}, -1, INT_MAX-1, D}, | ||||
{NULL}, | {NULL}, | ||||
}; | }; | ||||
@@ -24,7 +24,7 @@ | |||||
#include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||
#define LIBAVFORMAT_VERSION_MAJOR 53 | #define LIBAVFORMAT_VERSION_MAJOR 53 | ||||
#define LIBAVFORMAT_VERSION_MINOR 3 | |||||
#define LIBAVFORMAT_VERSION_MINOR 4 | |||||
#define LIBAVFORMAT_VERSION_MICRO 0 | #define LIBAVFORMAT_VERSION_MICRO 0 | ||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||