diff --git a/configure.ac b/configure.ac index 5a393844b7..3afe7dc91f 100644 --- a/configure.ac +++ b/configure.ac @@ -49,11 +49,9 @@ GST_CHECK_FEATURE(EXPERIMENTAL, [enable building of experimental plugins],, [HAVE_EXPERIMENTAL=yes],disabled, [ AC_MSG_WARN(building experimental plugins) - USE_RTP="yes" USE_TARKIN="yes" ],[ AC_MSG_NOTICE(not building experimental plugins) - USE_RTP="no" USE_TARKIN="no" ]) diff --git a/ext/jack/gstjack.c b/ext/jack/gstjack.c index 87ce638c8b..1258e23351 100644 --- a/ext/jack/gstjack.c +++ b/ext/jack/gstjack.c @@ -1,3 +1,4 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ /* Copyright (C) 2002 Andy Wingo diff --git a/ext/jack/gstjack.h b/ext/jack/gstjack.h index 38763cd6e3..9d07f86949 100644 --- a/ext/jack/gstjack.h +++ b/ext/jack/gstjack.h @@ -1,3 +1,4 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ /* Copyright (C) 2002 Andy Wingo @@ -109,6 +110,10 @@ struct _GstJackBin { guint rate; nframes_t nframes; + + /* the scheduler needs to be setup from within the jack client thread; this + variable is to keep track of whether or not we have been set up yet */ + gboolean sched_setup; }; struct _GstJackBinClass { diff --git a/ext/jack/gstjackbin.c b/ext/jack/gstjackbin.c index 8a4cc7634a..dbaac6650f 100644 --- a/ext/jack/gstjackbin.c +++ b/ext/jack/gstjackbin.c @@ -1,3 +1,4 @@ +/* -*- Mode: C; c-basic-offset: 4 -*- */ /* Copyright (C) 2002 Andy Wingo @@ -37,23 +38,23 @@ static void shutdown (void *arg); GType gst_jack_bin_get_type (void) { - static GType jack_bin_type = 0; + static GType jack_bin_type = 0; - if (!jack_bin_type) { - static const GTypeInfo jack_bin_info = { - sizeof(GstJackBinClass), - NULL, - NULL, - (GClassInitFunc)gst_jack_bin_class_init, - NULL, - NULL, - sizeof(GstJackBin), - 0, - (GInstanceInitFunc)gst_jack_bin_init, - }; - jack_bin_type = g_type_register_static (GST_TYPE_BIN, "GstJackBin", &jack_bin_info, 0); - } - return jack_bin_type; + if (!jack_bin_type) { + static const GTypeInfo jack_bin_info = { + sizeof(GstJackBinClass), + NULL, + NULL, + (GClassInitFunc)gst_jack_bin_class_init, + NULL, + NULL, + sizeof(GstJackBin), + 0, + (GInstanceInitFunc)gst_jack_bin_init, + }; + jack_bin_type = g_type_register_static (GST_TYPE_BIN, "GstJackBin", &jack_bin_info, 0); + } + return jack_bin_type; } static void @@ -73,6 +74,14 @@ gst_jack_bin_class_init(GstJackClass *klass) static void gst_jack_bin_init(GstJack *this) { + GST_DEBUG (GST_CAT_THREAD, "initializing jack bin"); + + /* jack bins are managing bins and iterate themselves */ + GST_FLAG_SET (this, GST_BIN_FLAG_MANAGER); + GST_FLAG_SET (this, GST_BIN_SELF_SCHEDULABLE); + + /* make a new scheduler and associate it with the bin */ + gst_scheduler_factory_make (NULL, GST_ELEMENT (this)); } static GstElementStateReturn @@ -237,6 +246,12 @@ sample_rate (nframes_t nframes, void *arg) GstJackBin *bin = (GstJackBin*) arg; printf ("the sample rate is now %lu/sec\n", nframes); bin->rate = nframes; + + if (!bin->sched_setup) { + gst_scheduler_setup (GST_ELEMENT_SCHED (bin)); + bin->sched_setup = TRUE; + } + return 0; }