summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-10-23 13:02:02 +0200
committerRobin Gareus <robin@gareus.org>2014-10-23 16:53:14 +0200
commitd991bb10cacc83792ae7fdc9fe3ce24cbffb42f1 (patch)
tree3cbe46bd8c2e49e4613f13172db57d5890e42ace
parentf3ff1b9669a2e56f73867ab7ebe3128833c4ab93 (diff)
add 'available' interface to the AudioBackendInfo
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.
-rw-r--r--libs/ardour/ardour/audio_backend.h8
-rw-r--r--libs/backends/alsa/alsa_audiobackend.cc8
-rw-r--r--libs/backends/dummy/dummy_audiobackend.cc8
-rw-r--r--libs/backends/jack/jack_api.cc8
-rw-r--r--libs/backends/wavesaudio/waves_audiobackend.cc8
-rw-r--r--libs/backends/wavesaudio/waves_audiobackend.h1
6 files changed, 41 insertions, 0 deletions
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h
index a61e5757de..ed29bd3c28 100644
--- a/libs/ardour/ardour/audio_backend.h
+++ b/libs/ardour/ardour/audio_backend.h
@@ -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 {
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc
index a33d8d5378..0f7a89eaf2 100644
--- a/libs/backends/alsa/alsa_audiobackend.cc
+++ b/libs/backends/alsa/alsa_audiobackend.cc
@@ -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;
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc
index 567b7485e3..fa512d96bf 100644
--- a/libs/backends/dummy/dummy_audiobackend.cc
+++ b/libs/backends/dummy/dummy_audiobackend.cc
@@ -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;
diff --git a/libs/backends/jack/jack_api.cc b/libs/backends/jack/jack_api.cc
index abf733d0f5..ce1109c7f0 100644
--- a/libs/backends/jack/jack_api.cc
+++ b/libs/backends/jack/jack_api.cc
@@ -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; }
diff --git a/libs/backends/wavesaudio/waves_audiobackend.cc b/libs/backends/wavesaudio/waves_audiobackend.cc
index 8dbd4fb68c..ff5b89b1c7 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.cc
+++ b/libs/backends/wavesaudio/waves_audiobackend.cc
@@ -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,
};
diff --git a/libs/backends/wavesaudio/waves_audiobackend.h b/libs/backends/wavesaudio/waves_audiobackend.h
index 57f15afc6b..3872b23336 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.h
+++ b/libs/backends/wavesaudio/waves_audiobackend.h
@@ -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 ();