summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-08-04 13:36:36 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-08-10 14:41:27 +0200
commit6d26594eef5f2a6b711920a8475b8a9aaa0cca86 (patch)
tree984914b1b7c37c66f05a1016ebe728209f5288fe /gst/avi/gstavidemux.c
parentb0a0c061559f5d447be2dabb9e39a308089dc1f2 (diff)
avidemux: post error message if no pads to push EOS event on
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 6720f068..8eee9513 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -76,6 +76,7 @@ static const GstEventMask *gst_avi_demux_get_event_mask (GstPad * pad);
static gboolean gst_avi_demux_handle_src_event (GstPad * pad, GstEvent * event);
static gboolean gst_avi_demux_handle_sink_event (GstPad * pad,
GstEvent * event);
+static gboolean gst_avi_demux_push_event (GstAviDemux * avi, GstEvent * event);
#if 0
static const GstFormat *gst_avi_demux_get_src_formats (GstPad * pad);
@@ -713,6 +714,18 @@ gst_avi_demux_handle_sink_event (GstPad * pad, GstEvent * event)
/* Drop NEWSEGMENT events, new ones are generated later */
gst_event_unref (event);
break;
+ case GST_EVENT_EOS:
+ {
+ if (avi->state != GST_AVI_DEMUX_MOVI) {
+ gst_event_unref (event);
+ GST_ELEMENT_ERROR (avi, STREAM, DEMUX,
+ (NULL), ("got eos and didn't receive a complete header object"));
+ } else if (!gst_avi_demux_push_event (avi, event)) {
+ GST_ELEMENT_ERROR (avi, STREAM, DEMUX,
+ (NULL), ("got eos but no streams (yet)"));
+ }
+ break;
+ }
default:
res = gst_pad_event_default (pad, event);
break;
@@ -2897,6 +2910,8 @@ gst_avi_demux_calculate_durations_from_index (GstAviDemux * avi)
gst_segment_set_duration (&avi->segment, GST_FORMAT_TIME, total);
}
+/* returns FALSE if there are no pads to deliver event to,
+ * otherwise TRUE (whatever the outcome of event sending) */
static gboolean
gst_avi_demux_push_event (GstAviDemux * avi, GstEvent * event)
{
@@ -2911,8 +2926,8 @@ gst_avi_demux_push_event (GstAviDemux * avi, GstEvent * event)
avi_stream_context *stream = &avi->stream[i];
if (stream->pad) {
- if (gst_pad_push_event (stream->pad, gst_event_ref (event)))
- result = TRUE;
+ result = TRUE;
+ gst_pad_push_event (stream->pad, gst_event_ref (event));
}
}
}
@@ -4415,7 +4430,11 @@ pause:
}
if (push_eos) {
GST_INFO_OBJECT (avi, "sending eos");
- gst_avi_demux_push_event (avi, gst_event_new_eos ());
+ if (!gst_avi_demux_push_event (avi, gst_event_new_eos ()) &&
+ (res == GST_FLOW_UNEXPECTED)) {
+ GST_ELEMENT_ERROR (avi, STREAM, DEMUX,
+ (NULL), ("got eos but no streams (yet)"));
+ }
}
}
}