diff --git a/libavformat/mov.c b/libavformat/mov.c index 8fea6700c3..1975011741 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2932,7 +2932,7 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom) st->nb_frames= total_sample_count; if (duration) - st->duration= duration; + st->duration= FFMIN(st->duration, duration); sc->track_end = duration; return 0; } @@ -3671,8 +3671,8 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) } } - // Update av stream length - st->duration = edit_list_dts_entry_end - start_dts; + // Update av stream length, if it ends up shorter than the track's media duration + st->duration = FFMIN(st->duration, edit_list_dts_entry_end - start_dts); msc->start_pad = st->skip_samples; // Free the old index and the old CTTS structures diff --git a/tests/ref/fate/adtstoasc_ticket3715 b/tests/ref/fate/adtstoasc_ticket3715 index 96795a2ca3..c5f03e4561 100644 --- a/tests/ref/fate/adtstoasc_ticket3715 +++ b/tests/ref/fate/adtstoasc_ticket3715 @@ -92,4 +92,4 @@ 0, 83968, 83968, 1024, 465, 0xeb3ce0af 0, 84992, 84992, 1024, 326, 0x7be4a667 0, 86016, 86016, 1024, 339, 0x2cf4a71f -0, 87040, 87040, 1028, 258, 0xd4007ad4 +0, 87040, 87040, 1024, 258, 0xd4007ad4