From 7c8f0009ccff653f2c08dd1b284d5889c29094ca Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Mon, 10 Jul 2006 20:11:34 +0000 Subject: gst/avi/gstavidemux.*: Don't push tag events found by gst_riff_parse_info() before outputting Original commit message from CVS: * 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. --- ChangeLog | 8 ++++++++ gst/avi/gstavidemux.c | 17 +++++++++++------ gst/avi/gstavidemux.h | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7676ffb6..089c0d07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-07-10 Edward Hervey + + * 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 * 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; -- cgit