summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu.duponchelle@opencreed.com>2016-06-04 18:19:38 +0200
committerMathieu Duponchelle <mathieu.duponchelle@opencreed.com>2016-06-04 19:14:22 +0200
commite256a611066caee85ffd6a9a79d89aa863888ed5 (patch)
treefccc9ae856b4d256e89ee4bd1802e0ecbd0b7d97 /examples
parent2b89969d950155de97284f0788a26c5c7967a3ae (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.c82
-rw-r--r--examples/snippets.c38
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));
+}