summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-11-28 12:22:49 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-11-28 12:22:49 +0200
commitf48fef2f77a67e13bbddd0e789b1d642565473d2 (patch)
tree3d024251f6b351ccb6a20b0cbf7f409bf2025f74
parent37f991f06e9af9c312246783e684c444894c648e (diff)
multipartdemux: Post an error message on the bus if we got EOS without having added any pads
-rw-r--r--gst/multipart/multipartdemux.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index afbc42ad2..23e67c2e0 100644
--- a/gst/multipart/multipartdemux.c
+++ b/gst/multipart/multipartdemux.c
@@ -106,6 +106,8 @@ static const GstNamesMap gstnames[] = {
static GstFlowReturn gst_multipart_demux_chain (GstPad * pad,
GstObject * parent, GstBuffer * buf);
+static gboolean gst_multipart_demux_event (GstPad * pad,
+ GstObject * parent, GstEvent * event);
static GstStateChangeReturn gst_multipart_demux_change_state (GstElement *
element, GstStateChange transition);
@@ -179,6 +181,8 @@ gst_multipart_demux_init (GstMultipartDemux * multipart)
gst_element_add_pad (GST_ELEMENT_CAST (multipart), multipart->sinkpad);
gst_pad_set_chain_function (multipart->sinkpad,
GST_DEBUG_FUNCPTR (gst_multipart_demux_chain));
+ gst_pad_set_event_function (multipart->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_multipart_demux_event));
multipart->adapter = gst_adapter_new ();
multipart->boundary = DEFAULT_BOUNDARY;
@@ -571,6 +575,30 @@ multipart_find_boundary (GstMultipartDemux * multipart, gint * datalen)
return MULTIPART_NEED_MORE_DATA;
}
+static gboolean
+gst_multipart_demux_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstMultipartDemux *multipart;
+
+ multipart = GST_MULTIPART_DEMUX (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ if (!multipart->srcpads) {
+ GST_ELEMENT_ERROR (multipart, STREAM, WRONG_TYPE,
+ ("This stream contains no valid streams."),
+ ("Got EOS before adding any pads"));
+ gst_event_unref (event);
+ return FALSE;
+ } else {
+ return gst_pad_event_default (pad, parent, event);
+ }
+ break;
+ default:
+ return gst_pad_event_default (pad, parent, event);
+ }
+}
+
static GstFlowReturn
gst_multipart_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{