examples: add test to demonstrate jack_client_t usage

This commit is contained in:
Tristan Matthews 2010-09-06 17:17:54 -04:00 committed by Stefan Kost
parent 716fffb098
commit 62634b48ed
4 changed files with 92 additions and 1 deletions

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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;
}