Hi! Attached patch allows to fast-start mov files with free atoms after the moov atom. Tested with the sample from ticket #7277.
Please comment, Carl Eugen
From 8decd60aaae4209f4991c926f058f9370701336e Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos <ceffm...@gmail.com> Date: Thu, 12 Jul 2018 01:24:39 +0200 Subject: [PATCH] tools/qt-faststart: Allow free atoms after moov atom. --- tools/qt-faststart.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/qt-faststart.c b/tools/qt-faststart.c index 5e88c38..46950a5 100644 --- a/tools/qt-faststart.c +++ b/tools/qt-faststart.c @@ -443,6 +443,8 @@ int main(int argc, char *argv[]) int64_t start_offset = 0; unsigned char *copy_buffer = NULL; int bytes_to_copy; + uint64_t free_size = 0; + uint64_t moov_size = 0; if (argc != 3) { printf("Usage: qt-faststart <infile.mov> <outfile.mov>\n" @@ -535,6 +537,15 @@ int main(int argc, char *argv[]) * able to continue scanning sensibly after this atom, so break. */ if (atom_size < 8) break; + + if (atom_type == MOOV_ATOM) + moov_size = atom_size; + + if (moov_size && atom_type == FREE_ATOM) { + free_size += atom_size; + atom_type = MOOV_ATOM; + atom_size = moov_size; + } } if (atom_type != MOOV_ATOM) { @@ -551,7 +562,7 @@ int main(int argc, char *argv[]) /* moov atom was, in fact, the last atom in the chunk; load the whole * moov atom */ - if (fseeko(infile, -atom_size, SEEK_END)) { + if (fseeko(infile, -(atom_size + free_size), SEEK_END)) { perror(argv[1]); goto error_out; } -- 1.7.10.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel