diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-11-28 12:22:49 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-11-28 12:22:49 +0200 |
commit | f48fef2f77a67e13bbddd0e789b1d642565473d2 (patch) | |
tree | 3d024251f6b351ccb6a20b0cbf7f409bf2025f74 | |
parent | 37f991f06e9af9c312246783e684c444894c648e (diff) |
multipartdemux: Post an error message on the bus if we got EOS without having added any pads
-rw-r--r-- | gst/multipart/multipartdemux.c | 28 |
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) { |