summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-02-21 12:16:18 +0200
committerMartin Storsjö <martin@martin.st>2012-02-22 10:39:15 +0200
commitaa96d433e24cde44bf8009c809c6f41308ff8fd4 (patch)
treeea670bd866c81515ae42112ea3aafd6e31c486ae /libavformat
parent383a3b64cb617f77df0d1f13e431c455ebcecafb (diff)
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@martin.st>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index a2b2da0a22..c2f13b6316 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;
}