fix crash when copy'ing latent plugins
[ardour.git] / libs / backends / jack / jack_api.cc
index e02ccde2f1a662ee96f5520746ca1a0633f4751d..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,22 +78,14 @@ deinstantiate ()
 static bool
 already_configured ()
 {
-       return JackConnection::server_running ();
+       return !JackConnection::in_control ();
 }
 
-extern "C" {
-       
-       
-       /* functions looked up using dlopen-and-cousins, and so naming scope
-        * must be non-mangled.
-        */
-
-       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; }
+