[FFmpeg-cvslog] lavf: add support for error_recognition, use it in avidec, and bump minor API version

Dustin Brody git at videolan.org
Sat Aug 13 03:18:03 CEST 2011


ffmpeg | branch: master | Dustin Brody <libav at parsoma.net> | Sat Aug  6 04:42:34 2011 +0000| [2f63440c59bf8c4a2e90280e23e8cadb235a42e6] | committer: Anton Khirnov

lavf: add support for error_recognition, use it in avidec, and bump minor API version

Signed-off-by: Anton Khirnov <anton at khirnov.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2f63440c59bf8c4a2e90280e23e8cadb235a42e6
---

 libavformat/avformat.h |    8 ++++++++
 libavformat/avidec.c   |    6 ++++--
 libavformat/options.c  |    3 +++
 libavformat/version.h  |    2 +-
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 2f68aba..957039f 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -854,6 +854,14 @@ typedef struct AVFormatContext {
      * decoding: number of frames used to probe fps
      */
     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;
 
 typedef struct AVPacketList {
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 0ea093c..8c0ef13 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -667,8 +667,9 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
             break;
         case MKTAG('i', 'n', 'd', 'x'):
             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);
             break;
@@ -706,6 +707,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
             if(size > 1000000){
                 av_log(s, AV_LOG_ERROR, "Something went wrong during header parsing, "
                                         "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_end  = avio_size(pb);
                 goto end_of_header;
diff --git a/libavformat/options.c b/libavformat/options.c
index 9611628..3ca8c83 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -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"},
 {"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},
+{"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},
 {NULL},
 };
diff --git a/libavformat/version.h b/libavformat/version.h
index bb12b51..4473717 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -24,7 +24,7 @@
 #include "libavutil/avutil.h"
 
 #define LIBAVFORMAT_VERSION_MAJOR 53
-#define LIBAVFORMAT_VERSION_MINOR  3
+#define LIBAVFORMAT_VERSION_MINOR  4
 #define LIBAVFORMAT_VERSION_MICRO  0
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \



More information about the ffmpeg-cvslog mailing list