Do not fail if 'uuid' atom is encountered before 'moov'.
[ffmpeg.git] / tools / qt-faststart.c
index 2cbf12b1d97be755b2a44df8144c86c205ded4d1..ff86e56e20463d0bb8b28c5dc3ba2ec0ac7f0e82 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * qt-faststart.c, v0.1
+ * qt-faststart.c, v0.2
  * by Mike Melanson (melanson@pcisys.net)
  * This file is placed in the public domain. Use the program however you
  * see fit.
@@ -7,8 +7,12 @@
  * This utility rearranges a Quicktime file such that the moov atom
  * is in front of the data, thus facilitating network streaming.
  *
- * Compile this program using:
- *  make qt-faststart
+ * To compile this program, start from the base directory from which you
+ * are building FFmpeg and type:
+ *  make tools/qt-faststart
+ * The qt-faststart program will be built in the tools/ directory. If you
+ * do not build the program in this manner, correct results are not
+ * guaranteed, particularly on 64-bit platforms.
  * Invoke the program with:
  *  qt-faststart <infile.mov> <outfile.mov>
  *
@@ -60,6 +64,7 @@
 #define WIDE_ATOM QT_ATOM('w', 'i', 'd', 'e')
 #define PICT_ATOM QT_ATOM('P', 'I', 'C', 'T')
 #define FTYP_ATOM QT_ATOM('f', 't', 'y', 'p')
+#define UUID_ATOM QT_ATOM('u', 'u', 'i', 'd')
 
 #define CMOV_ATOM QT_ATOM('c', 'm', 'o', 'v')
 #define STCO_ATOM QT_ATOM('s', 't', 'c', 'o')
@@ -115,6 +120,7 @@ int main(int argc, char *argv[])
             (atom_type != SKIP_ATOM) &&
             (atom_type != WIDE_ATOM) &&
             (atom_type != PICT_ATOM) &&
+            (atom_type != UUID_ATOM) &&
             (atom_type != FTYP_ATOM)) {
             printf ("encountered non-QT top-level atom (is this a Quicktime file?)\n");
             break;
@@ -125,7 +131,7 @@ int main(int argc, char *argv[])
             ftyp_atom_size = atom_size;
             ftyp_atom = malloc(ftyp_atom_size);
             if (!ftyp_atom) {
-                printf ("could not allocate 0x%llX byte for ftyp atom\n",
+                printf ("could not allocate %"PRIu64" byte for ftyp atom\n",
                         atom_size);
                 fclose(infile);
                 return 1;
@@ -166,7 +172,7 @@ int main(int argc, char *argv[])
     moov_atom_size = atom_size;
     moov_atom = malloc(moov_atom_size);
     if (!moov_atom) {
-        printf ("could not allocate 0x%llX byte for moov atom\n",
+        printf ("could not allocate %"PRIu64" byte for moov atom\n",
             atom_size);
         fclose(infile);
         return 1;