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.
---
Updated to use AVFMT_FLAG_IGNIDX (-fflags ignidx) instead of
custom private option for enabling this behaviour.

This perhaps doesn't match the exact description of the
option, but still has the same effect ("don't index the full
file on startup").

 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;
             }
-- 
1.7.3.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to