X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fglobals.cc;h=00d448985f555fadb6cb1ee25930f9bc7a738b4c;hb=fb430a7738d4d6d38de8ac3fba491c3572bed386;hp=b2ad67d0538ccce16a2c25464274cae3e7df7057;hpb=2f5c4c29c6d60b172676a0f79c542d0ff085a9f6;p=ardour.git diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index b2ad67d053..00d448985f 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -80,11 +80,12 @@ #include "pbd/fpu.h" #include "pbd/file_utils.h" #include "pbd/enumwriter.h" -#include "pbd/basename.h" #include "midi++/port.h" #include "midi++/mmc.h" +#include "LuaBridge/LuaBridge.h" + #include "ardour/analyser.h" #include "ardour/audio_library.h" #include "ardour/audio_backend.h" @@ -97,11 +98,13 @@ #include "ardour/event_type_map.h" #include "ardour/filesystem_paths.h" #include "ardour/midi_region.h" +#include "ardour/midi_ui.h" #include "ardour/midiport_manager.h" #include "ardour/mix.h" #include "ardour/operations.h" #include "ardour/panner_manager.h" #include "ardour/plugin_manager.h" +#include "ardour/presentation_info.h" #include "ardour/process_thread.h" #include "ardour/profile.h" #include "ardour/rc_configuration.h" @@ -110,15 +113,16 @@ #include "ardour/runtime_functions.h" #include "ardour/session_event.h" #include "ardour/source_factory.h" +#ifdef LV2_SUPPORT #include "ardour/uri_map.h" - +#endif #include "audiographer/routines.h" #if defined (__APPLE__) - #include // For Gestalt +#include #endif -#include "i18n.h" +#include "pbd/i18n.h" ARDOUR::RCConfiguration* ARDOUR::Config = 0; ARDOUR::RuntimeProfile* ARDOUR::Profile = 0; @@ -143,7 +147,7 @@ PBD::Signal1 ARDOUR::PluginScanTimeout; PBD::Signal0 ARDOUR::GUIIdle; PBD::Signal3 ARDOUR::CopyConfigurationFiles; -std::vector ARDOUR::reserved_io_names; +std::map ARDOUR::reserved_io_names; static bool have_old_configuration_files = false; @@ -205,12 +209,8 @@ setup_hardware_optimization (bool try_optimization) } #elif defined (__APPLE__) && defined (BUILD_VECLIB_OPTIMIZATIONS) - SInt32 sysVersion = 0; - - if (noErr != Gestalt(gestaltSystemVersion, &sysVersion)) - sysVersion = 0; - if (sysVersion >= 0x00001040) { // Tiger at least + if (floor (kCFCoreFoundationVersionNumber) > kCFCoreFoundationVersionNumber10_4) { /* at least Tiger */ compute_peak = veclib_compute_peak; find_peaks = veclib_find_peaks; apply_gain_to_buffer = veclib_apply_gain_to_buffer; @@ -287,7 +287,7 @@ lotsa_files_please () if (newmax > 0) { info << string_compose (_("Your system is configured to limit %1 to only %2 open files"), PROGRAM_NAME, newmax) << endmsg; } else { - error << string_compose (_("Could not set system open files limit. Current limit is %1 open files"), _getmaxstdio) << endmsg; + error << string_compose (_("Could not set system open files limit. Current limit is %1 open files"), _getmaxstdio()) << endmsg; } #endif } @@ -304,7 +304,7 @@ copy_configuration_files (string const & old_dir, string const & new_dir, int ol return -1; } - if (old_version == 3) { + if (old_version >= 3) { old_name = Glib::build_filename (old_dir, X_("recent")); new_name = Glib::build_filename (new_dir, X_("recent")); @@ -425,6 +425,12 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir return true; } +#ifndef NDEBUG + if (getenv("LUA_METATABLES")) { + luabridge::Security::setHideMetatables (false); + } +#endif + if (!PBD::init()) return false; #ifdef ENABLE_NLS @@ -442,6 +448,7 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir RouteGroup::make_property_quarks (); Playlist::make_property_quarks (); AudioPlaylist::make_property_quarks (); + PresentationInfo::make_property_quarks (); /* this is a useful ready to use PropertyChange that many things need to check. This avoids having to compose @@ -513,6 +520,22 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir #endif (void) EventTypeMap::instance(); + ControlProtocolManager::instance().discover_control_protocols (); + + /* for each control protocol, check for a request buffer factory method + and if it exists, store it in the EventLoop list of such + methods. This allows the relevant threads to register themselves + with EventLoops so that signal emission can be RT-safe. + */ + + ControlProtocolManager::instance().register_request_buffer_factories (); + /* it would be nice if this could auto-register itself in the + constructor, since MidiControlUI is a singleton, but it can't be + created until after the engine is running. Therefore we have to + explicitly register it here. + */ + EventLoop::register_request_buffer_factory (X_("midiUI"), MidiControlUI::request_factory); + ProcessThread::init (); /* the + 4 is a bit of a handwave. i don't actually know how many more per-thread buffer sets we need above @@ -530,20 +553,24 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir support may not even be active. Without adding an API to control surface support that would list their port names, we do have to list them here. + + We also need to know if the given I/O is an actual route. + For routes (e.g. "master"), bus creation needs to be allowed the first time, + while for pure I/O (e.g. "Click") track/bus creation must always fail. */ - char const * const reserved[] = { - _("Monitor"), - _("Master"), - _("Control"), - _("Click"), - _("Mackie"), - 0 - }; - - for (int n = 0; reserved[n]; ++n) { - reserved_io_names.push_back (reserved[n]); - } + reserved_io_names[_("Monitor")] = true; + reserved_io_names[_("Master")] = true; + reserved_io_names["auditioner"] = true; // auditioner.cc Track (s, "auditioner",...) + + /* pure I/O */ + reserved_io_names[X_("Click")] = false; // session.cc ClickIO (*this, X_("Click") + reserved_io_names[_("Control")] = false; + reserved_io_names[_("Mackie")] = false; + reserved_io_names[_("FaderPort Recv")] = false; + reserved_io_names[_("FaderPort Send")] = false; + reserved_io_names[_("FaderPort8 Recv")] = false; + reserved_io_names[_("FaderPort8 Send")] = false; libardour_initialized = true; @@ -553,8 +580,6 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir void ARDOUR::init_post_engine () { - ControlProtocolManager::instance().discover_control_protocols (); - XMLNode* node; if ((node = Config->control_protocol_state()) != 0) { ControlProtocolManager::instance().set_state (*node, Stateful::loading_state_version); @@ -572,13 +597,13 @@ ARDOUR::cleanup () return; } + delete &ControlProtocolManager::instance(); ARDOUR::AudioEngine::destroy (); delete Library; #ifdef HAVE_LRDF lrdf_cleanup (); #endif - delete &ControlProtocolManager::instance(); #ifdef WINDOWS_VST_SUPPORT fst_exit (); #endif @@ -593,31 +618,6 @@ ARDOUR::cleanup () return; } -void -ARDOUR::find_bindings_files (map& files) -{ - vector found; - Searchpath spath = ardour_config_search_path(); - - if (getenv ("ARDOUR_SAE")) { - find_files_matching_pattern (found, spath, "*SAE-*.bindings"); - } else { - find_files_matching_pattern (found, spath, "*.bindings"); - } - - if (found.empty()) { - return; - } - - for (vector::iterator x = found.begin(); x != found.end(); ++x) { - std::string path(*x); - pair namepath; - namepath.second = path; - namepath.first = PBD::basename_nosuffix (path); - files.insert (namepath); - } -} - bool ARDOUR::no_auto_connect() { @@ -737,6 +737,7 @@ ARDOUR::set_translations_enabled (bool yn) (void) ::write (fd, &c, 1); (void) ::close (fd); + Config->ParameterChanged ("enable-translation"); return true; }