Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mov: Properly abide by the track's media duration
The track's media duration from the mdhd atom takes precedence
over both the stts and elst atom for calculating and setting
the track's total duraion.

Technically, we shouldn't be using the stts atom at all for
calculating stream durations.

This fixes incorrect stream and final packet durations on files
with edit lists that are longer than the media duration.

The FATE changes are expected, and output is more correct (the
AAC frame is not 1028 samples).

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
  • Loading branch information
dwbuiten committed Apr 26, 2018
1 parent 3914a76 commit 28503c5
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
6 changes: 3 additions & 3 deletions libavformat/mov.c
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion tests/ref/fate/adtstoasc_ticket3715
Expand Up @@ -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

0 comments on commit 28503c5

Please sign in to comment.