Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
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