gstreamer C API
R C
cjvijf at gmail.com
Fri May 31 23:11:25 UTC 2019
ever had that situation where you have been looking for an answer and
right after you ask, you find it?
so, thanks.. but never mind.
Ron
On 5/31/19 5:02 PM, R C wrote:
>
> Hello,
>
>
> I have been playing with the "basic tutorial" C API a bit, and can
> create a stream in c code. However, when the strea is running, how can
> I quit/terminate that stream?
>
>
> For example, basic tutorial 3:
>
>
> After creating a pipeline, one can start it. Then there's a loop that
> listens for msgs from the 'bus', in a loop. Whenever there is a msg,
> the loop runs through a switch, and and listens for a new msg again.
>
> I want to create "some sort of event" that terminates that loop (for
> example existence (or not) of a lock file.).
>
> (or can I create a handler, set an option, that will make
> gst_element_get_bus(..) return, even if there isn't a msg, with an
> empty msg or so? (I am fairly sure, gst_element_get_bus, is not
> returning and only will if there is a msg waiting.)
>
>
> Here's a/the code snippet from the basic tutorial 3 example:
>
> /* Start playing */
> ret = gst_element_set_state (data.pipeline, GST_STATE_PLAYING);
> if (ret == GST_STATE_CHANGE_FAILURE) {
> g_printerr ("Unable to set the pipeline to the playing state.\n");
> gst_object_unref (data.pipeline);
> return -1;
> }
>
> /* Listen to the bus */
> bus = gst_element_get_bus (data.pipeline);
> do {
> msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
> GST_MESSAGE_STATE_CHANGED | GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
>
> /* Parse message */
> if (msg != NULL) {
> GError *err;
> gchar *debug_info;
>
> switch (GST_MESSAGE_TYPE (msg)) {
> case GST_MESSAGE_ERROR:
> gst_message_parse_error (msg, &err, &debug_info);
> g_printerr ("Error received from element %s: %s\n",
> GST_OBJECT_NAME (msg->src), err->message);
> g_printerr ("Debugging information: %s\n", debug_info ?
> debug_info : "none");
> g_clear_error (&err);
> g_free (debug_info);
> terminate = TRUE;
> break;
> case GST_MESSAGE_EOS:
> g_print ("End-Of-Stream reached.\n");
> terminate = TRUE;
> break;
> case GST_MESSAGE_STATE_CHANGED:
> /* We are only interested in state-changed messages from the
> pipeline */
> if (GST_MESSAGE_SRC (msg) == GST_OBJECT (data.pipeline)) {
> GstState old_state, new_state, pending_state;
> gst_message_parse_state_changed (msg, &old_state,
> &new_state, &pending_state);
> g_print ("Pipeline state changed from %s to %s:\n",
> gst_element_state_get_name (old_state),
> gst_element_state_get_name (new_state));
> }
> break;
> default:
> /* We should not reach here */
> g_printerr ("Unexpected message received.\n");
> break;
> }
> gst_message_unref (msg);
> }
> } while (!terminate);
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20190531/2e65de18/attachment.html>
More information about the gstreamer-devel
mailing list