summaryrefslogtreecommitdiffstats
path: root/gst/wavparse
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2007-09-14 09:40:49 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2007-09-14 09:40:49 +0000
commit233644df3332bd4a2048abe1fb81a38f0fa1e355 (patch)
tree54e1ed82962ebb025c5d19fccb2a5c2b253ff33e /gst/wavparse
parent80dc806b65ddecdea47ebd1032f35f48f9490b44 (diff)
gst/wavparse/gstwavparse.c: Don't push EOS from the chain function, the element driving the pipeline is responsible f...
Original commit message from CVS: * gst/wavparse/gstwavparse.c: (gst_wavparse_loop), (gst_wavparse_chain): Don't push EOS from the chain function, the element driving the pipeline is responsible for this. The bug this was meant to fix seems to be queue not forwarding EOS in all cases (see #476514).
Diffstat (limited to 'gst/wavparse')
-rw-r--r--gst/wavparse/gstwavparse.c74
1 files changed, 32 insertions, 42 deletions
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 2f698c98..43f11609 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -1703,43 +1703,6 @@ push_error:
}
static void
-gst_wavparse_perform_eos (GstWavParse * wav, GstFlowReturn ret)
-{
- if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) {
- if (ret == GST_FLOW_UNEXPECTED) {
- /* add pad before we perform EOS */
- if (G_UNLIKELY (wav->first)) {
- wav->first = FALSE;
- gst_wavparse_add_src_pad (wav, NULL);
- }
- /* perform EOS logic */
- if (wav->segment.flags & GST_SEEK_FLAG_SEGMENT) {
- GstClockTime stop;
-
- if ((stop = wav->segment.stop) == -1)
- stop = wav->segment.duration;
-
- gst_element_post_message (GST_ELEMENT_CAST (wav),
- gst_message_new_segment_done (GST_OBJECT_CAST (wav),
- wav->segment.format, stop));
- } else {
- if (wav->srcpad != NULL)
- gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
- }
- } else {
- /* for fatal errors we post an error message, post the error
- * first so the app knows about the error first. */
- GST_ELEMENT_ERROR (wav, STREAM, FAILED,
- (_("Internal data flow error.")),
- ("streaming task paused, reason %s (%d)", gst_flow_get_name (ret),
- ret));
- if (wav->srcpad != NULL)
- gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
- }
- }
-}
-
-static void
gst_wavparse_loop (GstPad * pad)
{
GstFlowReturn ret;
@@ -1783,7 +1746,37 @@ pause:
wav->segment_running = FALSE;
gst_pad_pause_task (pad);
- gst_wavparse_perform_eos (wav, ret);
+ if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) {
+ if (ret == GST_FLOW_UNEXPECTED) {
+ /* add pad before we perform EOS */
+ if (G_UNLIKELY (wav->first)) {
+ wav->first = FALSE;
+ gst_wavparse_add_src_pad (wav, NULL);
+ }
+ /* perform EOS logic */
+ if (wav->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+ GstClockTime stop;
+
+ if ((stop = wav->segment.stop) == -1)
+ stop = wav->segment.duration;
+
+ gst_element_post_message (GST_ELEMENT_CAST (wav),
+ gst_message_new_segment_done (GST_OBJECT_CAST (wav),
+ wav->segment.format, stop));
+ } else {
+ if (wav->srcpad != NULL)
+ gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
+ }
+ } else {
+ /* for fatal errors we post an error message, post the error
+ * first so the app knows about the error first. */
+ GST_ELEMENT_ERROR (wav, STREAM, FAILED,
+ (_("Internal data flow error.")),
+ ("streaming task paused, reason %s (%d)", reason, ret));
+ if (wav->srcpad != NULL)
+ gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
+ }
+ }
return;
}
}
@@ -1822,14 +1815,11 @@ gst_wavparse_chain (GstPad * pad, GstBuffer * buf)
/* fall-through */
case GST_WAVPARSE_DATA:
if ((ret = gst_wavparse_stream_data (wav)) != GST_FLOW_OK)
- goto eos;
+ goto done;
break;
default:
g_assert_not_reached ();
}
-eos:
- gst_wavparse_perform_eos (wav, ret);
- /* fallthrough */
done:
return ret;
}