diff mov.c @ 3170:3c56f53f437b libavformat

support fragments when non streamable
author bcoudurier
date Fri, 21 Mar 2008 13:43:19 +0000
parents 8ae50c221ae6
children cb3eb255f80d
line wrap: on
line diff
--- a/mov.c	Fri Mar 21 13:40:23 2008 +0000
+++ b/mov.c	Fri Mar 21 13:43:19 2008 +0000
@@ -1727,7 +1727,7 @@
     AVIndexEntry *sample = 0;
     int64_t best_dts = INT64_MAX;
     int i;
-
+ retry:
     for (i = 0; i < s->nb_streams; i++) {
         AVStream *st = s->streams[i];
         MOVStreamContext *msc = st->priv_data;
@@ -1747,8 +1747,15 @@
             }
         }
     }
-    if (!sample)
-        return -1;
+    if (!sample) {
+        mov->found_mdat = 0;
+        if (!url_is_streamed(s->pb) ||
+            mov_read_default(mov, s->pb, (MOV_atom_t){ 0, 0, INT64_MAX }) < 0 ||
+            url_feof(s->pb))
+            return -1;
+        dprintf(s, "read fragments, offset 0x%llx\n", url_ftell(s->pb));
+        goto retry;
+    }
     /* must be done just before reading, to avoid infinite loop on sample */
     sc->current_sample++;
     if (url_fseek(sc->pb, sample->pos, SEEK_SET) != sample->pos) {