X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudioengine.cc;h=df015cf693f773b6e66ad50a267fc7cbad37cee9;hb=842c33fba81ee7d360bb347a9a011582f6aac95f;hp=a3ecd04b47ae2be3d2244cbde8793bf1f812b0de;hpb=e3607a4c8bbe68714600cb3849abee0c20d0047c;p=ardour.git diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index a3ecd04b47..df015cf693 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -53,9 +53,10 @@ #include "ardour/mtdm.h" #include "ardour/port.h" #include "ardour/process_thread.h" +#include "ardour/rc_configuration.h" #include "ardour/session.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -412,7 +413,7 @@ AudioEngine::process_callback (pframes_t nframes) #else if (_session->silent()) { - PortManager::silence (nframes); + PortManager::silence (nframes, _session); } #endif @@ -775,12 +776,24 @@ AudioEngine::backend_discover (const string& path) return info; } +static bool running_from_source_tree () +{ + // dup ARDOUR_UI_UTILS::running_from_source_tree () + gchar const *x = g_getenv ("ARDOUR_THEMES_PATH"); + return x && (string (x).find ("gtk2_ardour") != string::npos); +} + vector AudioEngine::available_backends() const { vector r; for (BackendMap::const_iterator i = _backends.begin(); i != _backends.end(); ++i) { +#ifdef NDEBUG + if (i->first == "None (Dummy)" && !running_from_source_tree () && Config->get_hide_dummy_backend ()) { + continue; + } +#endif r.push_back (i->second); } @@ -864,8 +877,7 @@ AudioEngine::start (bool for_latency) int error_code = _backend->start (for_latency); if (error_code != 0) { - _last_backend_error_string = - AudioBackend::get_error_string((AudioBackend::ErrorCode)error_code); + _last_backend_error_string = AudioBackend::get_error_string((AudioBackend::ErrorCode) error_code); return -1; } @@ -880,6 +892,10 @@ AudioEngine::start (bool for_latency) } + /* XXX MIDI ports may not actually be available here yet .. */ + + PortManager::fill_midi_port_info (); + if (!for_latency) { Running(); /* EMIT SIGNAL */ } @@ -906,7 +922,9 @@ AudioEngine::stop (bool for_latency) stop_engine = false; } else { if (_backend->stop ()) { - pl.release (); + if (pl.locked ()) { + pl.release (); + } return -1; } } @@ -1467,3 +1485,18 @@ AudioEngine::set_latency_input_port (const string& name) { _latency_input_name = name; } + +void +AudioEngine::add_pending_port_deletion (Port* p) +{ + if (_session) { + DEBUG_TRACE (DEBUG::Ports, string_compose ("adding %1 to pending port deletion list\n", p->name())); + if (_port_deletions_pending.write (&p, 1) != 1) { + error << string_compose (_("programming error: port %1 could not be placed on the pending deletion queue\n"), p->name()) << endmsg; + } + _session->auto_connect_thread_wakeup (); + } else { + DEBUG_TRACE (DEBUG::Ports, string_compose ("Directly delete port %1\n", p->name())); + delete p; + } +}