From: "Martin Storsjö via ffmpeg-devel" <ffmpeg-devel@ffmpeg.org> To: ffmpeg-devel@ffmpeg.org Cc: "Martin Storsjö" <code@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH] movenc: Make the hybrid_fragmented mode more robust (PR #20652) Date: Mon, 06 Oct 2025 13:20:02 -0000 Message-ID: <175975680294.65.16011731550909421534@bf249f23a2c8> (raw) PR #20652 opened by Martin Storsjö (mstorsjo) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20652 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20652.patch Write the moov tag at the end first, before overwriting the mdat size at the start of the file. In case writing the final moov box fails (e.g. due to being out of disk, or other reasons), we haven't broken the initial moov box yet. Thus if writing stops between these steps, we could end up with a file with two moov boxes - which arguably is more feasible to recover from, than from a file with no moov boxes at all. From 2b81caccddb488b94d13072c2329b34abce4ebb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> Date: Fri, 27 Jun 2025 15:11:13 +0300 Subject: [PATCH] movenc: Make the hybrid_fragmented mode more robust Write the moov tag at the end first, before overwriting the mdat size at the start of the file. In case writing the final moov box fails (e.g. due to being out of disk, or other reasons), we haven't broken the initial moov box yet. Thus if writing stops between these steps, we could end up with a file with two moov boxes - which arguably is more feasible to recover from, than from a file with no moov boxes at all. --- libavformat/movenc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 067d38b14b..8c5bccd8c9 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -8605,6 +8605,11 @@ static int mov_write_trailer(AVFormatContext *s) // Clear the empty_moov flag, as we do want the moov to include // all the samples at this point. mov->flags &= ~FF_MOV_FLAG_EMPTY_MOOV; + + // Write the moov tag first, to make sure we have all the info + // written, before overwriting the size of the mdat tag. + if ((res = mov_write_moov_tag(pb, mov, s)) < 0) + return res; } moov_pos = avio_tell(pb); @@ -8647,7 +8652,7 @@ static int mov_write_trailer(AVFormatContext *s) ffio_wfourcc(pb, "free"); ffio_fill(pb, 0, size - 8); avio_seek(pb, moov_pos, SEEK_SET); - } else { + } else if (!(mov->flags & FF_MOV_FLAG_HYBRID_FRAGMENTED)) { if ((res = mov_write_moov_tag(pb, mov, s)) < 0) return res; } -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org
reply other threads:[~2025-10-06 13:20 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=175975680294.65.16011731550909421534@bf249f23a2c8 \ --to=ffmpeg-devel@ffmpeg.org \ --cc=code@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror http://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ http://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git