mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/mov: don't read duration from mvhd atom
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>
This commit is contained in:
parent
31581ae7ee
commit
836b8001c9
|
@ -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 */
|
||||
|
|
|
@ -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|
|
||||
|
||||
|
|
Loading…
Reference in New Issue