diff options
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | gst/apetag/gsttagdemux.c | 28 | ||||
-rw-r--r-- | gst/id3demux/gstid3demux.c | 30 | ||||
-rw-r--r-- | tests/check/elements/id3v2mux.c | 4 |
4 files changed, 74 insertions, 3 deletions
@@ -1,3 +1,18 @@ +2006-05-02 Tim-Philipp Müller <tim at centricular dot net> + + * gst/apetag/gsttagdemux.c: (gst_tag_demux_init), + (gst_tag_demux_sink_event): + * gst/id3demux/gstid3demux.c: (gst_id3demux_init), + (gst_id3demux_sink_event): + Post an error message when we get an EOS event and were not + able to find out the type of stream. + + * tests/check/elements/id3v2mux.c: (fill_mp3_buffer), (got_buffer), + (test_taglib_id3mux_with_tags): + Decrease num-buffers to 16 per iteration again, otherwise the + many memcpy()s and reallocations in the test will hammer slow + CPUs completely and make the test timeout. + 2006-05-02 Thomas Vander Stichele <thomas at apestaart dot org> * configure.ac: diff --git a/gst/apetag/gsttagdemux.c b/gst/apetag/gsttagdemux.c index 53ca1881..6e56b14a 100644 --- a/gst/apetag/gsttagdemux.c +++ b/gst/apetag/gsttagdemux.c @@ -129,6 +129,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", static void gst_tag_demux_dispose (GObject * object); static GstFlowReturn gst_tag_demux_chain (GstPad * pad, GstBuffer * buf); +static gboolean gst_tag_demux_sink_event (GstPad * pad, GstEvent * event); static gboolean gst_tag_demux_src_activate_pull (GstPad * pad, gboolean active); static GstFlowReturn gst_tag_demux_read_range (GstTagDemux * tagdemux, @@ -260,6 +261,8 @@ gst_tag_demux_init (GstTagDemux * demux, GstTagDemuxClass * gclass) gst_pad_set_activate_function (demux->priv->sinkpad, GST_DEBUG_FUNCPTR (gst_tag_demux_sink_activate)); + gst_pad_set_event_function (demux->priv->sinkpad, + GST_DEBUG_FUNCPTR (gst_tag_demux_sink_event)); gst_pad_set_chain_function (demux->priv->sinkpad, GST_DEBUG_FUNCPTR (gst_tag_demux_chain)); gst_element_add_pad (GST_ELEMENT (demux), demux->priv->sinkpad); @@ -635,6 +638,31 @@ error: } static gboolean +gst_tag_demux_sink_event (GstPad * pad, GstEvent * event) +{ + GstTagDemux *demux; + gboolean ret; + + demux = GST_TAG_DEMUX (gst_pad_get_parent (pad)); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_EOS: + if (demux->priv->srcpad == NULL) { + GST_WARNING_OBJECT (demux, "EOS before we found a type"); + GST_ELEMENT_ERROR (demux, STREAM, TYPE_NOT_FOUND, (NULL), (NULL)); + } + ret = gst_pad_event_default (pad, event); + break; + default: + ret = gst_pad_event_default (pad, event); + break; + } + + gst_object_unref (demux); + return ret; +} + +static gboolean gst_tag_demux_get_upstream_size (GstTagDemux * tagdemux) { GstPad *peer = NULL; diff --git a/gst/id3demux/gstid3demux.c b/gst/id3demux/gstid3demux.c index 56dae513..2fea654f 100644 --- a/gst/id3demux/gstid3demux.c +++ b/gst/id3demux/gstid3demux.c @@ -95,7 +95,7 @@ static void gst_id3demux_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static GstFlowReturn gst_id3demux_chain (GstPad * pad, GstBuffer * buf); - +static gboolean gst_id3demux_sink_event (GstPad * pad, GstEvent * event); static gboolean gst_id3demux_src_activate_pull (GstPad * pad, gboolean active); static GstFlowReturn gst_id3demux_read_range (GstID3Demux * id3demux, guint64 offset, guint length, GstBuffer ** buffer); @@ -217,6 +217,8 @@ gst_id3demux_init (GstID3Demux * id3demux) "sink"), "sink"); gst_pad_set_activate_function (id3demux->sinkpad, GST_DEBUG_FUNCPTR (gst_id3demux_sink_activate)); + gst_pad_set_event_function (id3demux->sinkpad, + GST_DEBUG_FUNCPTR (gst_id3demux_sink_event)); gst_pad_set_chain_function (id3demux->sinkpad, GST_DEBUG_FUNCPTR (gst_id3demux_chain)); gst_element_add_pad (GST_ELEMENT (id3demux), id3demux->sinkpad); @@ -532,6 +534,32 @@ error: return GST_FLOW_ERROR; } +static gboolean +gst_id3demux_sink_event (GstPad * pad, GstEvent * event) +{ + GstID3Demux *demux; + gboolean ret; + + demux = GST_ID3DEMUX (gst_pad_get_parent (pad)); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_EOS: + if (demux->srcpad == NULL) { + GST_WARNING_OBJECT (demux, "EOS before we found a type"); + GST_ELEMENT_ERROR (demux, STREAM, TYPE_NOT_FOUND, (NULL), (NULL)); + } + ret = gst_pad_event_default (pad, event); + break; + default: + ret = gst_pad_event_default (pad, event); + break; + } + + gst_object_unref (demux); + return ret; +} + + static void gst_id3demux_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) diff --git a/tests/check/elements/id3v2mux.c b/tests/check/elements/id3v2mux.c index 1b6ecfe6..f8024350 100644 --- a/tests/check/elements/id3v2mux.c +++ b/tests/check/elements/id3v2mux.c @@ -171,7 +171,7 @@ fill_mp3_buffer (GstElement * fakesrc, GstBuffer * buf, GstPad * pad, { GstCaps *caps; - g_assert (GST_BUFFER_SIZE (buf) == MP3_FRAME_SIZE); + fail_unless (GST_BUFFER_SIZE (buf) == MP3_FRAME_SIZE); GST_LOG ("filling buffer with fake mp3 data, offset = %" G_GUINT64_FORMAT, *p_offset); @@ -294,7 +294,7 @@ test_taglib_id3mux_with_tags (GstTagList * tags, guint32 mask) /* set up source */ g_object_set (fakesrc, "signal-handoffs", TRUE, "can-activate-pull", FALSE, "filltype", 2, "sizetype", 2, "sizemax", MP3_FRAME_SIZE, - "num-buffers", 256, NULL); + "num-buffers", 16, NULL); offset = 0; g_signal_connect (fakesrc, "handoff", G_CALLBACK (fill_mp3_buffer), &offset); |