From 62634b48ed7bd37880b5ff02dcfc016708ef55ed Mon Sep 17 00:00:00 2001 From: Tristan Matthews Date: Mon, 6 Sep 2010 17:17:54 -0400 Subject: [PATCH] examples: add test to demonstrate jack_client_t usage --- configure.ac | 1 + tests/examples/Makefile.am | 7 +++- tests/examples/jack/Makefile.am | 6 +++ tests/examples/jack/jack_client.c | 79 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tests/examples/jack/Makefile.am create mode 100644 tests/examples/jack/jack_client.c diff --git a/configure.ac b/configure.ac index 363c8ee..044a828 100644 --- a/configure.ac +++ b/configure.ac @@ -1770,6 +1770,7 @@ tests/examples/directfb/Makefile tests/examples/mxf/Makefile tests/examples/scaletempo/Makefile tests/examples/switch/Makefile +tests/examples/jack/Makefile tests/icles/Makefile ext/alsaspdif/Makefile ext/amrwbenc/Makefile diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am index 562b361..0a97397 100644 --- a/tests/examples/Makefile.am +++ b/tests/examples/Makefile.am @@ -1,4 +1,9 @@ if HAVE_GTK +if USE_JACK +JACK_EXAMPLES=jack +else +JACK_EXAMPLES= +endif GTK_EXAMPLES=camerabin mxf scaletempo else GTK_EXAMPLES= @@ -10,5 +15,5 @@ else DIRECTFB_DIR= endif -SUBDIRS= $(DIRECTFB_DIR) $(GTK_EXAMPLES) switch +SUBDIRS= $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(JACK_EXAMPLES) switch DIST_SUBDIRS= camerabin directfb mxf scaletempo switch diff --git a/tests/examples/jack/Makefile.am b/tests/examples/jack/Makefile.am new file mode 100644 index 0000000..4adfd13 --- /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 0000000..99599ab --- /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 +#include +#include + +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; +} -- 2.7.4