PR #23208 opened by Zhao Zhili (quink) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23208 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23208.patch
When a tmcd or similar metadata track references multiple source tracks, the per-iteration assignment overwrote track->track_duration on each loop step, leaving it set to whatever the last source happened to be. >From 1e337d84580247f00eea4aa29d0e22b84fce9075 Mon Sep 17 00:00:00 2001 From: Zhao Zhili <[email protected]> Date: Mon, 18 May 2026 17:58:49 +0800 Subject: [PATCH] avformat/movenc: don't overwrite track_duration on every src_track When a tmcd or similar metadata track references multiple source tracks, the per-iteration assignment overwrote track->track_duration on each loop step, leaving it set to whatever the last source happened to be. --- libavformat/movenc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 10ea818dd3..f645296372 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -5353,7 +5353,12 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov, int ret = mov_add_tref_id(mov, tag, track->track_id); if (ret < 0) return ret; - //src_trk may have a different timescale than the tmcd track + } + if (track->nb_src_track) { + /* Derive the duration from the first source track, matching + * the convention used by get_pts_range() and the rtp/lvc1 + * branches above. The source may use a different timescale. */ + int src_trk = track->src_track[0]; track->track_duration = av_rescale(mov->tracks[src_trk].track_duration, track->timescale, mov->tracks[src_trk].timescale); -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
