mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
gst/wavparse/gstwavparse.c: Add EOS logic for the push-based mode too. Fixes #476514.
Original commit message from CVS: * gst/wavparse/gstwavparse.c: (gst_wavparse_perform_eos), (gst_wavparse_loop), (gst_wavparse_chain): Add EOS logic for the push-based mode too. Fixes #476514.
This commit is contained in:
parent
8a6f9aa51a
commit
d78b9e274b
2 changed files with 48 additions and 32 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-09-13 Sebastian Dröge <slomo@circular-chaos.org>
|
||||
|
||||
* gst/wavparse/gstwavparse.c: (gst_wavparse_perform_eos),
|
||||
(gst_wavparse_loop), (gst_wavparse_chain):
|
||||
Add EOS logic for the push-based mode too. Fixes #476514.
|
||||
|
||||
2007-09-12 Wim Taymans <wim.taymans@gmail.com>
|
||||
|
||||
* gst/law/alaw-encode.c: (gst_alawenc_init), (gst_alawenc_chain):
|
||||
|
|
|
@ -1702,6 +1702,43 @@ 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)
|
||||
{
|
||||
|
@ -1746,37 +1783,7 @@ pause:
|
|||
wav->segment_running = FALSE;
|
||||
gst_pad_pause_task (pad);
|
||||
|
||||
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 ());
|
||||
}
|
||||
}
|
||||
gst_wavparse_perform_eos (wav, ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1815,11 +1822,14 @@ gst_wavparse_chain (GstPad * pad, GstBuffer * buf)
|
|||
/* fall-through */
|
||||
case GST_WAVPARSE_DATA:
|
||||
if ((ret = gst_wavparse_stream_data (wav)) != GST_FLOW_OK)
|
||||
goto done;
|
||||
goto eos;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
eos:
|
||||
gst_wavparse_perform_eos (wav, ret);
|
||||
/* fallthrough */
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue