mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +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>
|
2007-09-12 Wim Taymans <wim.taymans@gmail.com>
|
||||||
|
|
||||||
* gst/law/alaw-encode.c: (gst_alawenc_init), (gst_alawenc_chain):
|
* 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
|
static void
|
||||||
gst_wavparse_loop (GstPad * pad)
|
gst_wavparse_loop (GstPad * pad)
|
||||||
{
|
{
|
||||||
|
@ -1746,37 +1783,7 @@ pause:
|
||||||
wav->segment_running = FALSE;
|
wav->segment_running = FALSE;
|
||||||
gst_pad_pause_task (pad);
|
gst_pad_pause_task (pad);
|
||||||
|
|
||||||
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) {
|
gst_wavparse_perform_eos (wav, ret);
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1815,11 +1822,14 @@ gst_wavparse_chain (GstPad * pad, GstBuffer * buf)
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
case GST_WAVPARSE_DATA:
|
case GST_WAVPARSE_DATA:
|
||||||
if ((ret = gst_wavparse_stream_data (wav)) != GST_FLOW_OK)
|
if ((ret = gst_wavparse_stream_data (wav)) != GST_FLOW_OK)
|
||||||
goto done;
|
goto eos;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
|
eos:
|
||||||
|
gst_wavparse_perform_eos (wav, ret);
|
||||||
|
/* fallthrough */
|
||||||
done:
|
done:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue