gst/: Post an error message when we get an EOS event and were not able to find out...
authorTim-Philipp Müller <tim@centricular.net>
Tue, 2 May 2006 15:40:15 +0000 (15:40 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Tue, 2 May 2006 15:40:15 +0000 (15:40 +0000)
Original commit message from CVS:
* 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.

ChangeLog
gst/apetag/gsttagdemux.c
gst/id3demux/gstid3demux.c
tests/check/elements/id3v2mux.c

index 45557f2..fac128d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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:
index 53ca188..6e56b14 100644 (file)
@@ -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;
index 56dae51..2fea654 100644 (file)
@@ -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)
index 1b6ecfe..f802435 100644 (file)
@@ -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);