#undef check /* stupid Apple and their un-namespaced, generic Carbon macros */
#endif
-#include <giomm.h>
-
#include <glibmm/fileutils.h>
#include <glibmm/miscutils.h>
#include "pbd/cpus.h"
#include "pbd/error.h"
#include "pbd/id.h"
+#include "pbd/pbd.h"
#include "pbd/strsplit.h"
#include "pbd/fpu.h"
#include "pbd/file_utils.h"
using namespace std;
using namespace PBD;
+bool libardour_initialized = false;
+
compute_peak_t ARDOUR::compute_peak = 0;
find_peaks_t ARDOUR::find_peaks = 0;
apply_gain_to_buffer_t ARDOUR::apply_gain_to_buffer = 0;
}
}
-int
+bool
ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir)
{
- if (!Glib::thread_supported()) {
- Glib::thread_init();
+ if (libardour_initialized) {
+ return true;
}
- // this really should be in PBD::init..if there was one
- Gio::init ();
+ if (!PBD::init()) return false;
#ifdef ENABLE_NLS
(void) bindtextdomain(PACKAGE, localedir);
#endif
- PBD::ID::init ();
SessionEvent::init_event_pool ();
SessionObject::make_property_quarks ();
Config = new RCConfiguration;
if (Config->load_state ()) {
- return -1;
+ return false;
}
Config->set_use_windows_vst (use_windows_vst);
#ifdef WINDOWS_VST_SUPPORT
if (Config->get_use_windows_vst() && fst_init (0)) {
- return -1;
+ return false;
}
#endif
#ifdef LXVST_SUPPORT
if (Config->get_use_lxvst() && vstfx_init (0)) {
- return -1;
+ return false;
}
#endif
ARDOUR::AudioEngine::create ();
- return 0;
+ libardour_initialized = true;
+
+ return true;
}
void
ARDOUR::PluginManager::instance().refresh ();
}
-int
-ARDOUR::cleanup ()
+void
+ARDOUR::cleanup ()
{
+ if (!libardour_initialized) {
+ return;
+ }
+
+ ARDOUR::AudioEngine::destroy ();
+
delete Library;
lrdf_cleanup ();
delete &ControlProtocolManager::instance();
#ifdef LXVST_SUPPORT
vstfx_exit();
#endif
- EnumWriter::destroy ();
- return 0;
+ PBD::cleanup ();
+
+ return;
}
void
c = '0';
}
- ::write (fd, &c, 1);
- ::close (fd);
+ (void) ::write (fd, &c, 1);
+ (void) ::close (fd);
return true;
}
{
vector<SyncSource> ret;
- ret.push_back (JACK);
+ boost::shared_ptr<AudioBackend> backend = AudioEngine::instance()->current_backend();
+ if (backend && backend->name() == "JACK") {
+ ret.push_back (Engine);
+ }
+
ret.push_back (MTC);
ret.push_back (MIDIClock);
ret.push_back (LTC);
/** 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 ()