From d991bb10cacc83792ae7fdc9fe3ce24cbffb42f1 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 23 Oct 2014 13:02:02 +0200 Subject: 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. --- libs/ardour/ardour/audio_backend.h | 8 ++++++++ libs/backends/alsa/alsa_audiobackend.cc | 8 ++++++++ libs/backends/dummy/dummy_audiobackend.cc | 8 ++++++++ libs/backends/jack/jack_api.cc | 8 ++++++++ libs/backends/wavesaudio/waves_audiobackend.cc | 8 ++++++++ libs/backends/wavesaudio/waves_audiobackend.h | 1 + 6 files changed, 41 insertions(+) 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 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 @@ -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 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 @@ -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 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 @@ -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 (); -- cgit v1.2.3