/*
- * 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.
#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')
unsigned char atom_bytes[ATOM_PREAMBLE_SIZE];
uint32_t atom_type = 0;
uint64_t atom_size = 0;
+ uint64_t atom_offset = 0;
uint64_t last_offset;
unsigned char *moov_atom;
unsigned char *ftyp_atom = 0;
atom_size = (uint32_t)BE_32(&atom_bytes[0]);
atom_type = BE_32(&atom_bytes[4]);
- if ((atom_type != FREE_ATOM) &&
- (atom_type != JUNK_ATOM) &&
- (atom_type != MDAT_ATOM) &&
- (atom_type != MOOV_ATOM) &&
- (atom_type != PNOT_ATOM) &&
- (atom_type != SKIP_ATOM) &&
- (atom_type != WIDE_ATOM) &&
- (atom_type != PICT_ATOM) &&
- (atom_type != FTYP_ATOM)) {
- printf ("encountered non-QT top-level atom (is this a Quicktime file?)\n");
- break;
- }
-
/* keep ftyp atom */
if (atom_type == FTYP_ATOM) {
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;
return 1;
}
start_offset = ftello(infile);
- continue;
- }
+ } else {
/* 64-bit special case */
if (atom_size == 1) {
fseeko(infile, atom_size - ATOM_PREAMBLE_SIZE, SEEK_CUR);
}
}
+ printf("%c%c%c%c %10"PRIu64" %"PRIu64"\n",
+ (atom_type >> 24) & 255,
+ (atom_type >> 16) & 255,
+ (atom_type >> 8) & 255,
+ (atom_type >> 0) & 255,
+ atom_offset,
+ atom_size);
+ if ((atom_type != FREE_ATOM) &&
+ (atom_type != JUNK_ATOM) &&
+ (atom_type != MDAT_ATOM) &&
+ (atom_type != MOOV_ATOM) &&
+ (atom_type != PNOT_ATOM) &&
+ (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;
+ }
+ atom_offset += atom_size;
+ }
if (atom_type != MOOV_ATOM) {
printf ("last atom in file was not a moov atom\n");
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;