mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
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:
parent
2849ec2963
commit
1426a55a83
3 changed files with 12 additions and 1 deletions
|
@ -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.
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue