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