[FFmpeg-devel] [PATCH] avformat/mov: don't read duration from mvhd atom

James Almer jamrial at gmail.com
Tue Aug 16 02:14:42 EEST 2022


This duration is equal to the longest duration in all track's tkhd atoms, which
may be comprised of the sum of all edit lists in each track. Empty edit lists
in tracks represent start_time, and the actual media duration is stored in the
mdhd atom.
This change lets the generic demux code derive the longest track duration taken
from mdhd atoms, so the correct duration and start_time combination will be
reported.

Should fix ticket #9775.

Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavformat/mov.c                            | 4 ----
 tests/ref/fate/gaplessenc-itunes-to-ipod-aac | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 6ee6ed0950..fee9c39f39 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1516,10 +1516,6 @@ static int mov_read_mvhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     av_log(c->fc, AV_LOG_TRACE, "time scale = %i\n", c->time_scale);
 
     c->duration = (version == 1) ? avio_rb64(pb) : avio_rb32(pb); /* duration */
-    // set the AVFormatContext duration because the duration of individual tracks
-    // may be inaccurate
-    if (!c->trex_data)
-        c->fc->duration = av_rescale(c->duration, AV_TIME_BASE, c->time_scale);
     avio_rb32(pb); /* preferred scale */
 
     avio_rb16(pb); /* preferred volume */
diff --git a/tests/ref/fate/gaplessenc-itunes-to-ipod-aac b/tests/ref/fate/gaplessenc-itunes-to-ipod-aac
index f967ac05bc..1f89e9af85 100644
--- a/tests/ref/fate/gaplessenc-itunes-to-ipod-aac
+++ b/tests/ref/fate/gaplessenc-itunes-to-ipod-aac
@@ -5,7 +5,7 @@ duration_ts=103326
 [/STREAM]
 [FORMAT]
 start_time=0.000000
-duration=2.344000
+duration=2.342993
 [/FORMAT]
 packet|pts=-1024|dts=-1024|duration=1024|flags=KD|side_data|
 
-- 
2.37.1



More information about the ffmpeg-devel mailing list