X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fglobals.cc;h=89775a586ba1b7c8e301288cb4c4623fd89f3fda;hb=4c4863248c014870611d55b2659da657b13a5f48;hp=5874ac3b1b25d183cea69ba2766e2497605947b8;hpb=658bb3ccd43658de18fbd43cd91a8e66650e27a7;p=ardour.git diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index 5874ac3b1b..89775a586b 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -37,6 +37,10 @@ #include #include +#ifdef PLATFORM_WINDOWS +#include // for LARGE_INTEGER +#endif + #ifdef WINDOWS_VST_SUPPORT #include #endif @@ -85,10 +89,13 @@ #include "ardour/audioregion.h" #include "ardour/buffer_manager.h" #include "ardour/control_protocol_manager.h" +#include "ardour/directory_names.h" +#include "ardour/event_type_map.h" #include "ardour/filesystem_paths.h" #include "ardour/midi_region.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/process_thread.h" @@ -99,6 +106,7 @@ #include "ardour/runtime_functions.h" #include "ardour/session_event.h" #include "ardour/source_factory.h" +#include "ardour/uri_map.h" #include "audiographer/routines.h" @@ -125,7 +133,10 @@ mix_buffers_with_gain_t ARDOUR::mix_buffers_with_gain = 0; mix_buffers_no_gain_t ARDOUR::mix_buffers_no_gain = 0; PBD::Signal1 ARDOUR::BootMessage; +PBD::Signal3 ARDOUR::PluginScanMessage; +PBD::Signal1 ARDOUR::PluginScanTimeout; PBD::Signal0 ARDOUR::GUIIdle; +PBD::Signal3 ARDOUR::CopyConfigurationFiles; namespace ARDOUR { extern void setup_enum_writer (); @@ -209,7 +220,12 @@ lotsa_files_please () if (getrlimit (RLIMIT_NOFILE, &rl) == 0) { +#ifdef __APPLE__ + /* See the COMPATIBILITY note on the Apple setrlimit() man page */ + rl.rlim_cur = min ((rlim_t) OPEN_MAX, rl.rlim_max); +#else rl.rlim_cur = rl.rlim_max; +#endif if (setrlimit (RLIMIT_NOFILE, &rl) != 0) { if (rl.rlim_cur == RLIM_INFINITY) { @@ -228,6 +244,94 @@ lotsa_files_please () #endif } +int +ARDOUR::copy_configuration_files (string const & old_dir, string const & new_dir, int old_version) +{ + string old_name; + string new_name; + + if (old_version == 3) { + + old_name = Glib::build_filename (old_dir, "recent"); + new_name = Glib::build_filename (new_dir, "recent"); + + copy_file (old_name, new_name); + + /* can only copy ardour.rc - UI config is not compatible */ + + old_name = Glib::build_filename (old_dir, "ardour.rc"); + new_name = Glib::build_filename (new_dir, "config"); + + copy_file (old_name, new_name); + + /* copy templates and route templates */ + + old_name = Glib::build_filename (old_dir, "templates"); + new_name = Glib::build_filename (new_dir, "templates"); + + copy_recurse (old_name, new_name); + + old_name = Glib::build_filename (old_dir, "route_templates"); + new_name = Glib::build_filename (new_dir, "route_templates"); + + copy_recurse (old_name, new_name); + + /* presets */ + + old_name = Glib::build_filename (old_dir, "presets"); + new_name = Glib::build_filename (new_dir, "presets"); + + copy_recurse (old_name, new_name); + + /* presets */ + + old_name = Glib::build_filename (old_dir, "plugin_statuses"); + new_name = Glib::build_filename (new_dir, "plugin_statuses"); + + copy_file (old_name, new_name); + + /* export formats */ + + old_name = Glib::build_filename (old_dir, export_formats_dir_name); + new_name = Glib::build_filename (new_dir, export_formats_dir_name); + + vector export_formats; + g_mkdir_with_parents (Glib::build_filename (new_dir, export_formats_dir_name).c_str(), 0755); + find_files_matching_pattern (export_formats, old_name, "*.format"); + for (vector::iterator i = export_formats.begin(); i != export_formats.end(); ++i) { + std::string from = *i; + std::string to = Glib::build_filename (new_name, Glib::path_get_basename (*i)); + copy_file (from, to); + } + } + + return 0; +} + +static void +maybe_copy_old_configuration_files () +{ + int version = atoi (X_(PROGRAM_VERSION)); + + if (version <= 1) { + return; + } + + version--; + + string old_config_dir = user_config_directory (version); + + if (Glib::file_test (old_config_dir, Glib::FILE_TEST_IS_DIR)) { + string current_config_dir = user_config_directory (); + boost::optional r = CopyConfigurationFiles (old_config_dir, current_config_dir, version); /* EMIT SIGNAL */ + if (r) { + if (r.get()) { + copy_configuration_files (old_config_dir, current_config_dir, version); + } + } + } +} + bool ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir) { @@ -239,10 +343,12 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir #ifdef ENABLE_NLS (void) bindtextdomain(PACKAGE, localedir); + (void) bind_textdomain_codeset (PACKAGE, "UTF-8"); #endif SessionEvent::init_event_pool (); + Operations::make_operations_quarks (); SessionObject::make_property_quarks (); Region::make_property_quarks (); MidiRegion::make_property_quarks (); @@ -272,6 +378,8 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir // allow ardour the absolute maximum number of open files lotsa_files_please (); + maybe_copy_old_configuration_files (); + #ifdef HAVE_LRDF lrdf_init(); #endif @@ -314,8 +422,12 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir SourceFactory::init (); Analyser::init (); - /* singleton - first object is "it" */ + /* singletons - first object is "it" */ (void) PluginManager::instance(); +#ifdef LV2_SUPPORT + (void) URIMap::instance(); +#endif + (void) EventTypeMap::instance(); ProcessThread::init (); /* the + 4 is a bit of a handwave. i don't actually know @@ -326,24 +438,6 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir PannerManager::instance().discover_panners(); - // Initialize parameter metadata - EventTypeMap::instance().new_parameter(NullAutomation); - EventTypeMap::instance().new_parameter(GainAutomation); - EventTypeMap::instance().new_parameter(PanAzimuthAutomation); - EventTypeMap::instance().new_parameter(PanElevationAutomation); - EventTypeMap::instance().new_parameter(PanWidthAutomation); - EventTypeMap::instance().new_parameter(PluginAutomation); - EventTypeMap::instance().new_parameter(SoloAutomation); - EventTypeMap::instance().new_parameter(MuteAutomation); - EventTypeMap::instance().new_parameter(MidiCCAutomation); - EventTypeMap::instance().new_parameter(MidiPgmChangeAutomation); - EventTypeMap::instance().new_parameter(MidiPitchBenderAutomation); - EventTypeMap::instance().new_parameter(MidiChannelPressureAutomation); - EventTypeMap::instance().new_parameter(FadeInAutomation); - EventTypeMap::instance().new_parameter(FadeOutAutomation); - EventTypeMap::instance().new_parameter(EnvelopeAutomation); - EventTypeMap::instance().new_parameter(MidiCCAutomation); - ARDOUR::AudioEngine::create (); libardour_initialized = true; @@ -363,7 +457,7 @@ ARDOUR::init_post_engine () /* find plugins */ - ARDOUR::PluginManager::instance().refresh (); + ARDOUR::PluginManager::instance().refresh (!Config->get_discover_vst_on_start()); } void @@ -387,6 +481,8 @@ ARDOUR::cleanup () #ifdef LXVST_SUPPORT vstfx_exit(); #endif + delete &PluginManager::instance(); + delete Config; PBD::cleanup (); return; @@ -399,11 +495,9 @@ ARDOUR::find_bindings_files (map& files) Searchpath spath = ardour_config_search_path(); if (getenv ("ARDOUR_SAE")) { - Glib::PatternSpec pattern("*SAE-*.bindings"); - find_matching_files_in_search_path (spath, pattern, found); + find_files_matching_pattern (found, spath, "*SAE-*.bindings"); } else { - Glib::PatternSpec pattern("*.bindings"); - find_matching_files_in_search_path (spath, pattern, found); + find_files_matching_pattern (found, spath, "*.bindings"); } if (found.empty()) { @@ -613,3 +707,26 @@ ARDOUR::get_microseconds () return (microseconds_t) ts.tv_sec * 1000000 + (ts.tv_nsec/1000); #endif } + +/** Return the number of bits per sample for a given sample format. + * + * This is closely related to sndfile_data_width() but does NOT + * return a "magic" value to differentiate between 32 bit integer + * and 32 bit floating point values. + */ + +int +ARDOUR::format_data_width (ARDOUR::SampleFormat format) +{ + + + + switch (format) { + case ARDOUR::FormatInt16: + return 16; + case ARDOUR::FormatInt24: + return 24; + default: + return 32; + } +}