summaryrefslogtreecommitdiff
path: root/libs/ardour/globals.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-12 11:28:50 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-12 11:28:50 -0400
commitbb826f4beebfcedc50570b818c305560d2233e47 (patch)
tree1484460f914e64fdbdce58230ffe7934bc0761f4 /libs/ardour/globals.cc
parent8c5cff60912c7e0a7256f635641399500d8d00d9 (diff)
parentf85b362351a5f9167f93b6988f2c8a4c7e03a33c (diff)
incomplete merge of master into windows (requires upcoming changes to master to be complete)
Diffstat (limited to 'libs/ardour/globals.cc')
-rw-r--r--libs/ardour/globals.cc49
1 files changed, 45 insertions, 4 deletions
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index 1406bbd43a..8646b819f3 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -35,6 +35,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
+#include <time.h>
#ifdef WINDOWS_VST_SUPPORT
#include <fst.h>
@@ -74,11 +75,11 @@
#include "pbd/basename.h"
#include "midi++/port.h"
-#include "midi++/manager.h"
#include "midi++/mmc.h"
#include "ardour/analyser.h"
#include "ardour/audio_library.h"
+#include "ardour/audio_backend.h"
#include "ardour/audioengine.h"
#include "ardour/audioplaylist.h"
#include "ardour/audioregion.h"
@@ -86,6 +87,7 @@
#include "ardour/control_protocol_manager.h"
#include "ardour/filesystem_paths.h"
#include "ardour/midi_region.h"
+#include "ardour/midiport_manager.h"
#include "ardour/mix.h"
#include "ardour/panner_manager.h"
#include "ardour/plugin_manager.h"
@@ -342,6 +344,8 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
EventTypeMap::instance().new_parameter(EnvelopeAutomation);
EventTypeMap::instance().new_parameter(MidiCCAutomation);
+ ARDOUR::AudioEngine::create ();
+
libardour_initialized = true;
return true;
@@ -350,9 +354,6 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
void
ARDOUR::init_post_engine ()
{
- /* the MIDI Manager is needed by the ControlProtocolManager */
- MIDI::Manager::create (AudioEngine::instance()->jack());
-
ControlProtocolManager::instance().discover_control_protocols ();
XMLNode* node;
@@ -550,3 +551,43 @@ ARDOUR::get_available_sync_options ()
return ret;
}
+
+/** Return a monotonic value for the number of microseconds that have elapsed
+ * since an arbitrary zero origin.
+ */
+
+#ifdef __MACH__
+/* Thanks Apple for not implementing this basic SUSv2, POSIX.1-2001 function
+ */
+#include <mach/mach_time.h>
+#define CLOCK_REALTIME 0
+#define CLOCK_MONOTONIC 0
+int
+clock_gettime (int /*clk_id*/, struct timespec *t)
+{
+ static bool initialized = false;
+ static mach_timebase_info_data_t timebase;
+ if (!initialized) {
+ mach_timebase_info(&timebase);
+ initialized = true;
+ }
+ uint64_t time;
+ time = mach_absolute_time();
+ double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom);
+ double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9);
+ t->tv_sec = seconds;
+ t->tv_nsec = nseconds;
+ return 0;
+}
+#endif
+
+microseconds_t
+ARDOUR::get_microseconds ()
+{
+ struct timespec ts;
+ if (clock_gettime (CLOCK_MONOTONIC, &ts) != 0) {
+ /* EEEK! */
+ return 0;
+ }
+ return (microseconds_t) ts.tv_sec * 1000000 + (ts.tv_nsec/1000);
+}