summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Matthews <le.businessman@gmail.com>2010-09-06 17:17:54 -0400
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2011-01-02 14:30:08 +0000
commit13957deeed8348f10e8e8ec79f43105395dd26d5 (patch)
tree413bde18a075606e796c7e60dd0e8b2b85622590
parentc070cfa7c832757a2e9b8a8f8114c661138761dd (diff)
examples: add test to demonstrate jack_client_t usage
-rw-r--r--tests/examples/jack/Makefile.am6
-rw-r--r--tests/examples/jack/jack_client.c79
2 files changed, 85 insertions, 0 deletions
diff --git a/tests/examples/jack/Makefile.am b/tests/examples/jack/Makefile.am
new file mode 100644
index 000000000..4adfd1314
--- /dev/null
+++ b/tests/examples/jack/Makefile.am
@@ -0,0 +1,6 @@
+noinst_PROGRAMS = jack_client
+
+jack_client_SOURCES = jack_client.c
+jack_client_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) $(JACK_CFLAGS)
+jack_client_LDFLAGS = $(GST_LIBS) $(GTK_LIBS) $(JACK_LIBS)
+
diff --git a/tests/examples/jack/jack_client.c b/tests/examples/jack/jack_client.c
new file mode 100644
index 000000000..99599ab5c
--- /dev/null
+++ b/tests/examples/jack/jack_client.c
@@ -0,0 +1,79 @@
+/* This app demonstrates the creation and use of a jack client in conjunction
+ * with the jack plugins. This way, an application can control the jack client
+ * directly.
+ */
+
+#include <gst/gst.h>
+#include <gtk/gtk.h>
+#include <jack/jack.h>
+
+static gboolean
+quit_cb (gpointer data)
+{
+ gtk_main_quit ();
+ return FALSE;
+}
+
+int
+main (int argc, char **argv)
+{
+ jack_client_t *src_client, *sink_client;
+ jack_status_t status;
+ GstElement *pipeline, *src, *sink;
+ GstStateChangeReturn ret;
+
+ gst_init (&argc, &argv);
+
+ /* create jack clients */
+ src_client = jack_client_open ("src_client", JackNoStartServer, &status);
+ if (src_client == NULL) {
+ if (status & JackServerFailed)
+ g_print ("JACK server not running\n");
+ else
+ g_print ("jack_client_open() failed, status = 0x%2.0x\n", status);
+ return 1;
+ }
+
+ sink_client = jack_client_open ("sink_client", JackNoStartServer, &status);
+ if (sink_client == NULL) {
+ if (status & JackServerFailed)
+ g_print ("JACK server not running\n");
+ else
+ g_print ("jack_client_open() failed, status = 0x%2.0x\n", status);
+ return 1;
+ }
+
+ /* create gst elements */
+ pipeline = gst_pipeline_new ("my_pipeline");
+
+ src = gst_element_factory_make ("jackaudiosrc", NULL);
+ sink = gst_element_factory_make ("jackaudiosink", NULL);
+
+ g_object_set (src, "client", src_client, NULL);
+ g_object_set (sink, "client", sink_client, NULL);
+
+ gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+
+ /* link everything together */
+ if (!gst_element_link (src, sink)) {
+ g_print ("Failed to link elements!\n");
+ return 1;
+ }
+
+ /* run */
+ ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+ if (ret == GST_STATE_CHANGE_FAILURE) {
+ g_print ("Failed to start up pipeline!\n");
+ return 1;
+ }
+
+ /* quit after 5 seconds */
+ g_timeout_add (5000, (GSourceFunc) quit_cb, NULL);
+ gtk_main ();
+
+ /* clean up */
+ gst_element_set_state (pipeline, GST_STATE_NULL);
+ gst_object_unref (pipeline);
+
+ return 0;
+}