Skip to content

Commit

Permalink
avformat/mov: don't read duration from mvhd atom
Browse files Browse the repository at this point in the history
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.

Reviewed-by: zhilizhao(赵志立) <quinkblack@foxmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
  • Loading branch information
jamrial committed Sep 8, 2022
1 parent 31581ae commit 836b800
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 5 deletions.
4 changes: 0 additions & 4 deletions libavformat/mov.c
Original file line number Diff line number Diff line change
Expand Up @@ -1520,10 +1520,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 */
Expand Down
2 changes: 1 addition & 1 deletion tests/ref/fate/gaplessenc-itunes-to-ipod-aac
Original file line number Diff line number Diff line change
Expand Up @@ -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|

Expand Down

0 comments on commit 836b800

Please sign in to comment.