add 'available' interface to the AudioBackendInfo
authorRobin Gareus <robin@gareus.org>
Thu, 23 Oct 2014 11:02:02 +0000 (13:02 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 23 Oct 2014 14:53:14 +0000 (16:53 +0200)
If a backend can be loaded, it does not mean that it can be used;
e.g. weak-linked jack-backend if libjack is not available.

libs/ardour/ardour/audio_backend.h
libs/backends/alsa/alsa_audiobackend.cc
libs/backends/dummy/dummy_audiobackend.cc
libs/backends/jack/jack_api.cc
libs/backends/wavesaudio/waves_audiobackend.cc
libs/backends/wavesaudio/waves_audiobackend.h

index a61e5757de2319f6eec5b74ff61f3487e53f2ebd..ed29bd3c28a1263fd82498351195fd02856e875e 100644 (file)
@@ -70,6 +70,14 @@ struct LIBARDOUR_API AudioBackendInfo {
      * not currently required, is still possible.
      */
     bool (*already_configured)();
+
+    /** Return true if the underlying mechanism/API can be
+     * used on the given system.
+     *
+     * If this function returns false, the backend is not
+     * listed in the engine dialog.
+     */
+    bool (*available)();
 };
 
 class LIBARDOUR_API AudioBackend : public PortEngine {
index a33d8d5378db5f11b38e0c534dfeeb95b1f8db71..0f7a89eaf246aee4a08741cd6a3c783bf7b13353 100644 (file)
@@ -1567,6 +1567,7 @@ static boost::shared_ptr<AudioBackend> backend_factory (AudioEngine& e);
 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 = {
        "ALSA",
@@ -1574,6 +1575,7 @@ static ARDOUR::AudioBackendInfo _descriptor = {
        deinstantiate,
        backend_factory,
        already_configured,
+       available
 };
 
 static boost::shared_ptr<AudioBackend>
@@ -1605,6 +1607,12 @@ already_configured ()
        return false;
 }
 
+static bool
+available ()
+{
+       return true;
+}
+
 extern "C" ARDOURBACKEND_API ARDOUR::AudioBackendInfo* descriptor ()
 {
        return &_descriptor;
index 567b7485e358856271e7ce67e74fd1f045a74b66..fa512d96bf65822be86eaae52cb39e9326e4130f 100644 (file)
@@ -1207,6 +1207,7 @@ static boost::shared_ptr<AudioBackend> backend_factory (AudioEngine& e);
 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 = {
        "Dummy",
@@ -1214,6 +1215,7 @@ static ARDOUR::AudioBackendInfo _descriptor = {
        deinstantiate,
        backend_factory,
        already_configured,
+       available
 };
 
 static boost::shared_ptr<AudioBackend>
@@ -1245,6 +1247,12 @@ already_configured ()
        return false;
 }
 
+static bool
+available ()
+{
+       return true;
+}
+
 extern "C" ARDOURBACKEND_API ARDOUR::AudioBackendInfo* descriptor ()
 {
        return &_descriptor;
index abf733d0f556332234118de419b9dc87bcfa357e..ce1109c7f06f154f98610b27cf6524067e29c7ee 100644 (file)
@@ -29,6 +29,7 @@ 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",
@@ -36,6 +37,7 @@ static ARDOUR::AudioBackendInfo _descriptor = {
        deinstantiate,
        backend_factory,
        already_configured,
+       available
 };
 
 static boost::shared_ptr<AudioBackend>
@@ -79,5 +81,11 @@ already_configured ()
        return !JackConnection::in_control ();
 }
 
+static bool
+available ()
+{
+       return have_libjack() ? false : true;
+}
+
 extern "C" ARDOURBACKEND_API ARDOUR::AudioBackendInfo* descriptor() { return &_descriptor; }
 
index 8dbd4fb68c48b48307e618cbeafd0d1817a5d7b1..ff5b89b1c75bf7fa4caea5bf373fbf676f24a8e4 100644 (file)
@@ -1254,6 +1254,13 @@ WavesAudioBackend::__already_configured ()
     return false;
 }
 
+bool
+WavesAudioBackend::__available ()
+{
+    // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::__available ():" << std::endl;
+    return true;
+}
+
 
 void*
 WavesAudioBackend::private_handle () const
@@ -1298,6 +1305,7 @@ AudioBackendInfo WavesAudioBackend::__backend_info = {
     WavesAudioBackend::__deinstantiate,
     WavesAudioBackend::__waves_backend_factory,
     WavesAudioBackend::__already_configured,
+    WavesAudioBackend::__available,
 };
 
 
index 57f15afc6bd51e929a5854bc1ca954fda6a594ea..3872b23336ad4f54267b58355a397f0c6614064c 100644 (file)
@@ -335,6 +335,7 @@ class WavesMidiPort;
     static int __instantiate (const std::string& arg1, const std::string& arg2);
     static int __deinstantiate ();
     static bool __already_configured ();
+    static bool __available ();
 
     static void* __start_process_thread (void*);
     static uint64_t __get_time_nanos ();