fix crash when copy'ing latent plugins
[ardour.git] / libs / backends / jack / jack_api.cc
index 836acfda11a54b1b818f6d2d17b8b2bc6ffdbc3b..b63b1c1f69f8d0580623b351c395374b71ad2f4c 100644 (file)
@@ -25,6 +25,21 @@ using namespace ARDOUR;
 static boost::shared_ptr<JACKAudioBackend> backend;
 static boost::shared_ptr<JackConnection> jack_connection;
 
+static boost::shared_ptr<AudioBackend> backend_factory (AudioEngine& ae);
+static int  instantiate (const std::string& arg1, const std::string& arg2);
+static int  deinstantiate ();
+static bool already_configured ();
+static bool available ();
+
+static ARDOUR::AudioBackendInfo _descriptor = {
+       "JACK",
+       instantiate,
+       deinstantiate,
+       backend_factory,
+       already_configured,
+       available
+};
+
 static boost::shared_ptr<AudioBackend>
 backend_factory (AudioEngine& ae)
 {
@@ -33,7 +48,7 @@ backend_factory (AudioEngine& ae)
        }
 
        if (!backend) {
-               backend.reset (new JACKAudioBackend (ae, jack_connection));
+               backend.reset (new JACKAudioBackend (ae, _descriptor, jack_connection));
        }
 
        return backend;
@@ -51,7 +66,7 @@ instantiate (const std::string& arg1, const std::string& arg2)
        return 0;
 }
 
-static int 
+static int
 deinstantiate ()
 {
        backend.reset ();
@@ -63,16 +78,14 @@ deinstantiate ()
 static bool
 already_configured ()
 {
-       return JackConnection::server_running ();
+       return !JackConnection::in_control ();
 }
 
-static ARDOUR::AudioBackendInfo _descriptor = {
-       "JACK",
-       instantiate,
-       deinstantiate,
-       backend_factory,
-       already_configured,
-};
+static bool
+available ()
+{
+       return have_libjack() ? false : true;
+}
 
 extern "C" ARDOURBACKEND_API ARDOUR::AudioBackendInfo* descriptor() { return &_descriptor; }