[FFmpeg-cvslog] movdec: Don't parse all fragments if ignidx is set

Martin Storsjö git at videolan.org
Thu Feb 23 05:03:02 CET 2012


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Tue Feb 21 12:16:18 2012 +0200| [aa96d433e24cde44bf8009c809c6f41308ff8fd4] | committer: Martin Storsjö

movdec: Don't parse all fragments if ignidx is set

In nonseekable files, we already stop parsing the toplevel atoms
after finding moov and one mdat. In large seekable files (or files
that are seekable, but slowly, e.g. http), reading all the fragments
at the start can take a considerable amount of time. This allows
opting out from this behaviour.

Signed-off-by: Martin Storsjö <martin at martin.st>

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

 libavformat/mov.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index a2b2da0..c2f13b6 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -350,8 +350,9 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
             if (err < 0)
                 return err;
             if (c->found_moov && c->found_mdat &&
-                (!pb->seekable || start_pos + a.size == avio_size(pb))) {
-                if (!pb->seekable)
+                ((!pb->seekable || c->fc->flags & AVFMT_FLAG_IGNIDX) ||
+                 start_pos + a.size == avio_size(pb))) {
+                if (!pb->seekable || c->fc->flags & AVFMT_FLAG_IGNIDX)
                     c->next_root_atom = start_pos + a.size;
                 return 0;
             }



More information about the ffmpeg-cvslog mailing list