qtmux: Clear edit lists every time we recalculate them

We recalculate them, so any old information has to be forgotten.
Otherwise we write invalid edit lists when writing headers multiple
times.

https://bugzilla.gnome.org/show_bug.cgi?id=778330
This commit is contained in:
Sebastian Dröge 2017-02-08 17:24:26 +02:00
parent 2849ec2963
commit 1426a55a83
3 changed files with 12 additions and 1 deletions

View file

@ -3716,6 +3716,15 @@ atom_edts_add_entry (AtomEDTS * edts, gint index, EditListEntry * entry)
*e = *entry; *e = *entry;
} }
void
atom_trak_edts_clear (AtomTRAK * trak)
{
if (trak->edts) {
atom_edts_clear (trak->edts);
trak->edts = NULL;
}
}
/* /*
* Update an entry in this trak edits list, creating it if needed. * Update an entry in this trak edits list, creating it if needed.
* index is the index of the entry to update, or create if it's past the end. * index is the index of the entry to update, or create if it's past the end.

View file

@ -918,6 +918,7 @@ void atom_trak_add_samples (AtomTRAK * trak, guint32 nsamples, guint
gint64 pts_offset); gint64 pts_offset);
void atom_trak_set_elst_entry (AtomTRAK * trak, gint index, guint32 duration, void atom_trak_set_elst_entry (AtomTRAK * trak, gint index, guint32 duration,
guint32 media_time, guint32 rate); guint32 media_time, guint32 rate);
void atom_trak_edts_clear (AtomTRAK * trak);
guint32 atom_trak_get_timescale (AtomTRAK *trak); guint32 atom_trak_get_timescale (AtomTRAK *trak);
guint32 atom_trak_get_id (AtomTRAK * trak); guint32 atom_trak_get_id (AtomTRAK * trak);
void atom_stbl_add_samples (AtomSTBL * stbl, guint32 nsamples, void atom_stbl_add_samples (AtomSTBL * stbl, guint32 nsamples,

View file

@ -2511,6 +2511,8 @@ gst_qt_mux_update_edit_lists (GstQTMux * qtmux)
GstCollectData *cdata = (GstCollectData *) walk->data; GstCollectData *cdata = (GstCollectData *) walk->data;
GstQTPad *qtpad = (GstQTPad *) cdata; GstQTPad *qtpad = (GstQTPad *) cdata;
atom_trak_edts_clear (qtpad->trak);
if (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) { if (GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) {
guint32 lateness = 0; guint32 lateness = 0;
guint32 duration = qtpad->trak->tkhd.duration; guint32 duration = qtpad->trak->tkhd.duration;
@ -2556,7 +2558,6 @@ gst_qt_mux_update_edit_lists (GstQTMux * qtmux)
/* need to add the empty time to the trak duration */ /* need to add the empty time to the trak duration */
duration += lateness; duration += lateness;
qtpad->trak->tkhd.duration = duration; qtpad->trak->tkhd.duration = duration;
if (qtpad->tc_trak) { if (qtpad->tc_trak) {
qtpad->tc_trak->tkhd.duration = duration; qtpad->tc_trak->tkhd.duration = duration;