diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gst/avi/gstavidemux.c | 17 | ||||
-rw-r--r-- | gst/avi/gstavidemux.h | 2 |
3 files changed, 21 insertions, 6 deletions
@@ -1,3 +1,11 @@ +2006-07-10 Edward Hervey <edward@fluendo.com> + + * gst/avi/gstavidemux.c: (gst_avi_demux_reset), + (gst_avi_demux_stream_header), (push_tag_lists): + * gst/avi/gstavidemux.h: + Don't push tag events found by gst_riff_parse_info() before outputting + GST_EVENT_NEWSEGMENT. + 2006-07-10 Wim Taymans <wim@fluendo.com> * gst/rtsp/Makefile.am: diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 886a6b20..37800daf 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -232,6 +232,10 @@ gst_avi_demux_reset (GstAviDemux * avi) gst_event_unref (avi->seek_event); avi->seek_event = NULL; + if (avi->globaltags) + gst_tag_list_free (avi->globaltags); + avi->globaltags = NULL; + avi->got_tags = FALSE; gst_segment_init (&avi->segment, GST_FORMAT_TIME); @@ -2219,13 +2223,8 @@ gst_avi_demux_stream_header (GstAviDemux * avi) &avi->offset, &tag, &buf)) != GST_FLOW_OK) return res; else { - GstTagList *t; - sub = gst_buffer_create_sub (buf, 4, GST_BUFFER_SIZE (buf) - 4); - gst_riff_parse_info (GST_ELEMENT (avi), sub, &t); - if (t) { - gst_element_found_tags (GST_ELEMENT (avi), t); - } + gst_riff_parse_info (GST_ELEMENT (avi), sub, &avi->globaltags); if (sub) { gst_buffer_unref (sub); sub = NULL; @@ -2603,12 +2602,18 @@ push_tag_lists (GstAviDemux * avi) if (!avi->got_tags) return; + GST_DEBUG_OBJECT (avi, "Pushing pending tag lists"); + for (i = 0; i < avi->num_streams; i++) if (avi->stream[i].pad && avi->stream[i].taglist) { gst_element_found_tags_for_pad (GST_ELEMENT (avi), avi->stream[i].pad, avi->stream[i].taglist); avi->stream[i].taglist = NULL; } + if (avi->globaltags) { + gst_element_found_tags (GST_ELEMENT (avi), avi->globaltags); + avi->globaltags = NULL; + } avi->got_tags = FALSE; } diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h index 0ea5123f..6006189d 100644 --- a/gst/avi/gstavidemux.h +++ b/gst/avi/gstavidemux.h @@ -129,6 +129,8 @@ typedef struct _GstAviDemux { GstSegment segment; GstEvent *seek_event; + GstTagList *globaltags; + gboolean got_tags; } GstAviDemux; |