| /* 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_seconds (5, (GSourceFunc) quit_cb, NULL); | |
| gtk_main (); | |
| /* clean up */ | |
| gst_element_set_state (pipeline, GST_STATE_NULL); | |
| gst_object_unref (pipeline); | |
| return 0; | |
| } |