X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fglobals.cc;h=1d510cfef1d42f60f7fe226b4b62fefc0eb4ff57;hb=1bd4c5b3a212460eed1773f6b049d18c89625565;hp=eb46943a43fb90f121185e59ab299e03d9055b08;hpb=00a106197a69ec1f5edcbc546b8971cba5730e2c;p=ardour.git diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index eb46943a43..1d510cfef1 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -15,7 +15,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ + $Id: globals.cc 935 2006-09-29 21:39:39Z paul $ */ #include // Needed so that libraptor (included in lrdf) won't complain @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -43,11 +44,14 @@ #include #include #include -#include +#include #include #include #include + +#ifdef HAVE_LIBLO #include +#endif #include @@ -59,10 +63,14 @@ ARDOUR::Configuration* ARDOUR::Config = 0; ARDOUR::AudioLibrary* ARDOUR::Library = 0; + +#ifdef HAVE_LIBLO ARDOUR::OSC* ARDOUR::osc = 0; +#endif using namespace ARDOUR; using namespace std; +using namespace PBD; MIDI::Port *default_mmc_port = 0; MIDI::Port *default_mtc_port = 0; @@ -74,6 +82,7 @@ Change ARDOUR::PositionChanged = ARDOUR::new_change (); Change ARDOUR::NameChanged = ARDOUR::new_change (); Change ARDOUR::BoundsChanged = Change (0); // see init(), below +#ifdef HAVE_LIBLO static int setup_osc () { @@ -89,6 +98,7 @@ setup_osc () return 0; } } +#endif static int setup_midi () @@ -180,12 +190,17 @@ setup_midi () } int -ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*sighandler)(int,siginfo_t*,void*)) +ARDOUR::init (bool use_vst, bool try_optimization) { bool generic_mix_functions = true; (void) bindtextdomain(PACKAGE, LOCALEDIR); + PBD::ID::init (); + + lrdf_init(); + Library = new AudioLibrary; + Config = new Configuration; if (Config->load_state ()) { @@ -197,13 +212,15 @@ ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*s if (setup_midi ()) { return -1; } - + +#ifdef HAVE_LIBLO if (setup_osc ()) { return -1; } +#endif #ifdef VST_SUPPORT - if (Config->get_use_vst() && fst_init (sighandler)) { + if (Config->get_use_vst() && fst_init ()) { return -1; } #endif @@ -281,12 +298,9 @@ ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*s info << "No H/W specific optimizations in use" << endmsg; } - - lrdf_init(); - Library = new AudioLibrary; /* singleton - first object is "it" */ - new PluginManager (engine); + new PluginManager (); /* singleton - first object is "it" */ new ControlProtocolManager (); @@ -311,10 +325,15 @@ ARDOUR::cleanup () return 0; } -ARDOUR::id_t -ARDOUR::new_id () + +microseconds_t +ARDOUR::get_microseconds () { - return get_uid(); + /* XXX need JACK to export its functionality */ + + struct timeval now; + gettimeofday (&now, 0); + return now.tv_sec * 1000000ULL + now.tv_usec; } ARDOUR::Change @@ -323,14 +342,27 @@ ARDOUR::new_change () Change c; static uint32_t change_bit = 1; - /* XXX catch out-of-range */ + /* catch out-of-range */ + if (!change_bit) + { + fatal << _("programming error: ") + << "change_bit out of range in ARDOUR::new_change()" + << endmsg; + /*NOTREACHED*/ + } c = Change (change_bit); - change_bit <<= 1; + change_bit <<= 1; // if it shifts too far, change_bit == 0 return c; } +string +ARDOUR::get_ardour_revision () +{ + return "$Rev$"; +} + string ARDOUR::get_user_ardour_path () { @@ -346,7 +378,9 @@ ARDOUR::get_user_ardour_path () /* create it if necessary */ - mkdir (path.c_str (), 0755); + if (g_mkdir_with_parents (path.c_str (), 0755)) { + throw exception (); + } return path; } @@ -466,8 +500,8 @@ ARDOUR::LocaleGuard::~LocaleGuard () } ARDOUR::OverlapType -ARDOUR::coverage (jack_nframes_t sa, jack_nframes_t ea, - jack_nframes_t sb, jack_nframes_t eb) +ARDOUR::coverage (nframes_t sa, nframes_t ea, + nframes_t sb, nframes_t eb) { /* OverlapType returned reflects how the second (B) range overlaps the first (A). @@ -546,16 +580,23 @@ ARDOUR::coverage (jack_nframes_t sa, jack_nframes_t ea, /* not sure where to put these */ -std::istream& operator>>(std::istream& o, HeaderFormat hf) { +template +std::istream& int_to_type (std::istream& o, T& hf) { int val; o >> val; - hf = (HeaderFormat) val; + hf = (T) val; return o; } -std::istream& operator>>(std::istream& o, SampleFormat sf) { - int val; - o >> val; - sf = (SampleFormat) val; - return o; -} +std::istream& operator>>(std::istream& o, HeaderFormat& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, SampleFormat& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, AutoConnectOption& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, MonitorModel& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, EditMode& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, SoloModel& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, LayerModel& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, CrossfadeModel& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, SlaveSource& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, ShuttleBehaviour& var) { return int_to_type (o, var); } +std::istream& operator>>(std::istream& o, ShuttleUnits& var) { return int_to_type (o, var); } +