diff options
author | Mathieu Duponchelle <mathieu.duponchelle@opencreed.com> | 2016-06-04 18:19:38 +0200 |
---|---|---|
committer | Mathieu Duponchelle <mathieu.duponchelle@opencreed.com> | 2016-06-04 19:14:22 +0200 |
commit | e256a611066caee85ffd6a9a79d89aa863888ed5 (patch) | |
tree | fccc9ae856b4d256e89ee4bd1802e0ecbd0b7d97 /examples | |
parent | 2b89969d950155de97284f0788a26c5c7967a3ae (diff) |
Add a simple example of inclusion
0.7.9.3 is needed, but it's pushed on pip so it shouldn't
be too complicated.
Need the C extension as well, README updated to reflect
that.
This allowed noticing and fixing two errors in the
link_to_multiplexer snippet, as clang complained,
check the differences between the previous version
and the new one :)
Diffstat (limited to 'examples')
-rw-r--r-- | examples/bus_example.c | 82 | ||||
-rw-r--r-- | examples/snippets.c | 38 |
2 files changed, 120 insertions, 0 deletions
diff --git a/examples/bus_example.c b/examples/bus_example.c new file mode 100644 index 0000000..8208124 --- /dev/null +++ b/examples/bus_example.c @@ -0,0 +1,82 @@ +#include <gst/gst.h> + +static GMainLoop *loop; + +static gboolean +my_bus_callback (GstBus *bus, + GstMessage *message, + gpointer data) +{ + g_print ("Got %s message\n", GST_MESSAGE_TYPE_NAME (message)); + + switch (GST_MESSAGE_TYPE (message)) { + case GST_MESSAGE_ERROR: { + GError *err; + gchar *debug; + + gst_message_parse_error (message, &err, &debug); + g_print ("Error: %s\n", err->message); + g_error_free (err); + g_free (debug); + + g_main_loop_quit (loop); + break; + } + case GST_MESSAGE_EOS: + /* end-of-stream */ + g_main_loop_quit (loop); + break; + default: + /* unhandled message */ + break; + } + + /* we want to be notified again the next time there is a message + * on the bus, so returning TRUE (FALSE means we want to stop watching + * for messages on the bus and our callback should not be called again) + */ + return TRUE; +} + +gint +main (gint argc, + gchar *argv[]) +{ + GstElement *pipeline; + GstBus *bus; + guint bus_watch_id; + + /* init */ + gst_init (&argc, &argv); + + /* create pipeline, add handler */ + pipeline = gst_pipeline_new ("my_pipeline"); + + /* adds a watch for new message on our pipeline's message bus to + * the default GLib main context, which is the main context that our + * GLib main loop is attached to below + */ + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + bus_watch_id = gst_bus_add_watch (bus, my_bus_callback, NULL); + gst_object_unref (bus); + + /* [...] */ + + /* create a mainloop that runs/iterates the default GLib main context + * (context NULL), in other words: makes the context check if anything + * it watches for has happened. When a message has been posted on the + * bus, the default main context will automatically call our + * my_bus_callback() function to notify us of that message. + * The main loop will be run until someone calls g_main_loop_quit() + */ + loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (loop); + + /* clean up */ + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); + g_source_remove (bus_watch_id); + g_main_loop_unref (loop); + + return 0; +} diff --git a/examples/snippets.c b/examples/snippets.c new file mode 100644 index 0000000..dd12cb4 --- /dev/null +++ b/examples/snippets.c @@ -0,0 +1,38 @@ +#include <gst/gst.h> + +static void +link_to_multiplexer (GstPad *tolink_pad, + GstElement *mux) +{ + GstPad *pad; + gchar *srcname, *sinkname; + + srcname = gst_pad_get_name (tolink_pad); + pad = gst_element_get_compatible_pad (mux, tolink_pad, NULL); + gst_pad_link (tolink_pad, pad); + sinkname = gst_pad_get_name (pad); + gst_object_unref (GST_OBJECT (pad)); + + g_print ("A new pad %s was created and linked to %s\n", sinkname, srcname); + g_free (sinkname); + g_free (srcname); +} + +static void +some_function (GstElement *tee) +{ + GstPad * pad; + gchar *name; + + pad = gst_element_get_request_pad (tee, "src%d"); + name = gst_pad_get_name (pad); + g_print ("A new pad %s was created\n", name); + g_free (name); + + /* here, you would link the pad */ + + /* [..] */ + + /* and, after doing that, free our reference */ + gst_object_unref (GST_OBJECT (pad)); +} |