* [FFmpeg-devel] [PATCH] movenc: Make the hybrid_fragmented mode more robust (PR #20652)
@ 2025-10-06 13:20 Martin Storsjö via ffmpeg-devel
0 siblings, 0 replies; only message in thread
From: Martin Storsjö via ffmpeg-devel @ 2025-10-06 13:20 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Martin Storsjö
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-10-06 13:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-10-06 13:20 [FFmpeg-devel] [PATCH] movenc: Make the hybrid_fragmented mode more robust (PR #20652) Martin Storsjö via ffmpeg-devel
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