gstreamer C API
R C
cjvijf at gmail.com
Fri May 31 23:02:42 UTC 2019
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/a236940c/attachment.html>
More information about the gstreamer-devel
mailing list