diff options
author | John Emmas <johne53@tiscali.co.uk> | 2013-10-06 11:56:03 +0100 |
---|---|---|
committer | John Emmas <johne53@tiscali.co.uk> | 2013-10-06 11:56:03 +0100 |
commit | 300b484cf6ac14c15e365c4062345d64a61c4b18 (patch) | |
tree | f10b9abedc141192f5c35f9c0f40e94f1d52786d /libs/ardour | |
parent | 7d78172abfd9b02bcb6809db3f7545e90dbe968d (diff) | |
parent | 2d5e605bf124c82f77a5a893e540bc176164947d (diff) |
Merge branch 'master' into windows+cc
Conflicts (hopefully resolved):
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui_options.cc
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_backend.h | 18 | ||||
-rw-r--r-- | libs/ardour/ardour/audioengine.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/graph.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/rc_configuration_vars.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 7 | ||||
-rw-r--r-- | libs/ardour/ardour/slave.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 17 | ||||
-rw-r--r-- | libs/ardour/audioengine.cc | 26 | ||||
-rw-r--r-- | libs/ardour/engine_slave.cc (renamed from libs/ardour/jack_slave.cc) | 10 | ||||
-rw-r--r-- | libs/ardour/enums.cc | 1 | ||||
-rw-r--r-- | libs/ardour/globals.cc | 6 | ||||
-rw-r--r-- | libs/ardour/graph.cc | 30 | ||||
-rw-r--r-- | libs/ardour/session.cc | 34 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 80 | ||||
-rw-r--r-- | libs/ardour/session_time.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session_transport.cc | 30 | ||||
-rw-r--r-- | libs/ardour/utils.cc | 9 | ||||
-rw-r--r-- | libs/ardour/wscript | 4 |
18 files changed, 201 insertions, 94 deletions
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h index 9052acd530..0e39625e8c 100644 --- a/libs/ardour/ardour/audio_backend.h +++ b/libs/ardour/ardour/audio_backend.h @@ -399,13 +399,25 @@ class AudioBackend : public PortEngine { * stacksize. The thread will begin executing @param func, and will exit * when that function returns. */ - virtual int create_process_thread (boost::function<void()> func, AudioBackendNativeThread*, size_t stacksize) = 0; + virtual int create_process_thread (boost::function<void()> func) = 0; - /** Wait for the thread specified by @param thread to exit. + /** Wait for all processing threads to exit. * * Return zero on success, non-zero on failure. */ - virtual int wait_for_process_thread_exit (AudioBackendNativeThread thread) = 0; + virtual int join_process_threads () = 0; + + /** Return true if execution context is in a backend thread + */ + virtual bool in_process_thread () = 0; + + /** Return the minimum stack size of audio threads in bytes + */ + static size_t thread_stack_size () { return 100000; } + + /** Return number of processing threads + */ + virtual uint32_t process_thread_count () = 0; virtual void update_latencies () = 0; diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 201d960479..1bf4be3243 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -100,8 +100,12 @@ public: pframes_t sample_time_at_cycle_start (); pframes_t samples_since_cycle_start (); bool get_sync_offset (pframes_t& offset) const; - int create_process_thread (boost::function<void()> func, AudioBackendNativeThread*, size_t stacksize); - int wait_for_process_thread_exit (AudioBackendNativeThread); + + int create_process_thread (boost::function<void()> func); + int join_process_threads (); + bool in_process_thread (); + uint32_t process_thread_count (); + bool is_realtime() const; bool connected() const; diff --git a/libs/ardour/ardour/graph.h b/libs/ardour/ardour/graph.h index 08af6fb721..763723c792 100644 --- a/libs/ardour/ardour/graph.h +++ b/libs/ardour/ardour/graph.h @@ -31,8 +31,6 @@ #include <glib.h> #include <cassert> -#include <pthread.h> - #include "pbd/semutils.h" #include "ardour/types.h" @@ -59,8 +57,6 @@ class Graph : public SessionHandleRef public: Graph (Session & session); - uint32_t threads_in_use () const { return _thread_list.size(); } - void prep(); void trigger (GraphNode * n); void rechain (boost::shared_ptr<RouteList>, GraphEdges const &); @@ -93,7 +89,6 @@ protected: virtual void session_going_away (); private: - std::list<AudioBackendNativeThread> _thread_list; volatile bool _quit_threads; void reset_thread_list (); diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index 78be86eaea..7000dde3ca 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -51,7 +51,7 @@ CONFIG_VARIABLE (int, mtc_qf_speed_tolerance, "mtc-qf-speed-tolerance", 5) CONFIG_VARIABLE (bool, timecode_sync_frame_rate, "timecode-sync-frame-rate", true) CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true) CONFIG_VARIABLE (bool, timecode_source_2997, "timecode-source-2997", false) -CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", JACK) +CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", Engine) CONFIG_VARIABLE (std::string, ltc_source_port, "ltc-source-port", "system:capture_1") CONFIG_VARIABLE (bool, send_ltc, "send-ltc", false) CONFIG_VARIABLE (bool, ltc_send_continuously, "ltc-send-continuously", true) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 3fa9fbcb28..d8004e8505 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -161,6 +161,8 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi virtual ~Session (); + static int get_info_from_path (const std::string& xmlpath, float& sample_rate, SampleFormat& data_format); + std::string path() const { return _path; } std::string name() const { return _name; } std::string snap_name() const { return _current_snapshot_name; } @@ -509,7 +511,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi static PBD::Signal1<void, framepos_t> EndTimeChanged; void request_sync_source (Slave*); - bool synced_to_jack() const { return config.get_external_sync() && Config->get_sync_source() == JACK; } + bool synced_to_engine() const { return config.get_external_sync() && Config->get_sync_source() == Engine; } double transport_speed() const { return _transport_speed; } bool transport_stopped() const { return _transport_speed == 0.0f; } @@ -1617,7 +1619,10 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi void setup_ltc (); void setup_click (); + void setup_click_state (const XMLNode&); void setup_bundles (); + + static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath); }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h index c60acb1df7..a0b7b878e4 100644 --- a/libs/ardour/ardour/slave.h +++ b/libs/ardour/ardour/slave.h @@ -486,11 +486,11 @@ class MIDIClock_Slave : public Slave { bool _starting; }; -class JACK_Slave : public Slave +class Engine_Slave : public Slave { public: - JACK_Slave (AudioEngine&); - ~JACK_Slave (); + Engine_Slave (AudioEngine&); + ~Engine_Slave (); bool speed_and_position (double& speed, framepos_t& pos); diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index f2319d7669..ee43d1f30f 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -489,7 +489,12 @@ namespace ARDOUR { }; enum SyncSource { - JACK, + /* These are "synonyms". It is important for JACK to be first + both here and in enums.cc, so that the string "JACK" is + correctly recognized in older session and preference files. + */ + JACK = 0, + Engine = 0, MTC, MIDIClock, LTC @@ -610,16 +615,6 @@ namespace ARDOUR { uint32_t max; //< samples }; -/* PLATFORM SPECIFIC #ifdef's here */ - - /** Define the native thread type used on the platform */ - typedef pthread_t AudioBackendNativeThread; - static inline bool self_thread_equal (AudioBackendNativeThread thr) { - return pthread_equal (thr, pthread_self()); - } - -/* PLATFORM SPECIFIC #endif's here */ - } // namespace ARDOUR diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 05fc469c77..7cb4e17a5c 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -824,21 +824,39 @@ AudioEngine::get_sync_offset (pframes_t& offset) const } int -AudioEngine::create_process_thread (boost::function<void()> func, AudioBackendNativeThread* thr, size_t stacksize) +AudioEngine::create_process_thread (boost::function<void()> func) { if (!_backend) { return -1; } - return _backend->create_process_thread (func, thr, stacksize); + return _backend->create_process_thread (func); } int -AudioEngine::wait_for_process_thread_exit (AudioBackendNativeThread thr) +AudioEngine::join_process_threads () +{ + if (!_backend) { + return -1; + } + return _backend->join_process_threads (); +} + +bool +AudioEngine::in_process_thread () +{ + if (!_backend) { + return false; + } + return _backend->in_process_thread (); +} + +uint32_t +AudioEngine::process_thread_count () { if (!_backend) { return 0; } - return _backend->wait_for_process_thread_exit (thr); + return _backend->process_thread_count (); } int diff --git a/libs/ardour/jack_slave.cc b/libs/ardour/engine_slave.cc index 4b2f3b1860..eb55c9ba54 100644 --- a/libs/ardour/jack_slave.cc +++ b/libs/ardour/engine_slave.cc @@ -26,7 +26,7 @@ using namespace std; using namespace ARDOUR; -JACK_Slave::JACK_Slave (AudioEngine& e) +Engine_Slave::Engine_Slave (AudioEngine& e) : engine (e) { double x; @@ -35,24 +35,24 @@ JACK_Slave::JACK_Slave (AudioEngine& e) speed_and_position (x, p); } -JACK_Slave::~JACK_Slave () +Engine_Slave::~Engine_Slave () { } bool -JACK_Slave::locked() const +Engine_Slave::locked() const { return true; } bool -JACK_Slave::ok() const +Engine_Slave::ok() const { return true; } bool -JACK_Slave::speed_and_position (double& sp, framepos_t& position) +Engine_Slave::speed_and_position (double& sp, framepos_t& position) { switch (engine.transport_state()) { case TransportStopped: diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index bab0e8ed15..2a38cd2c8a 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -336,6 +336,7 @@ setup_enum_writer () REGISTER_ENUM (MTC); REGISTER_ENUM (JACK); + REGISTER_ENUM (Engine); REGISTER_ENUM (MIDIClock); REGISTER_ENUM (LTC); REGISTER (_SyncSource); diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index 0cda9ebdf4..b3bfbd2239 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -544,7 +544,11 @@ ARDOUR::get_available_sync_options () { 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); diff --git a/libs/ardour/graph.cc b/libs/ardour/graph.cc index 69c4953272..f8a1d51e10 100644 --- a/libs/ardour/graph.cc +++ b/libs/ardour/graph.cc @@ -97,29 +97,24 @@ Graph::reset_thread_list () number of threads. */ - if (_thread_list.size() == num_threads) { + if (AudioEngine::instance()->process_thread_count() == num_threads) { return; } Glib::Threads::Mutex::Lock lm (_session.engine().process_lock()); - AudioBackendNativeThread a_thread; - if (!_thread_list.empty()) { + if (AudioEngine::instance()->process_thread_count() != 0) { drop_threads (); } - if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::main_thread, this), &a_thread, 100000) != 0) { + if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::main_thread, this)) != 0) { throw failed_constructor (); } - _thread_list.push_back (a_thread); - for (uint32_t i = 1; i < num_threads; ++i) { - if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::helper_thread, this), &a_thread, 100000) != 0) { + if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::helper_thread, this))) { throw failed_constructor (); } - - _thread_list.push_back (a_thread); } } @@ -141,17 +136,15 @@ Graph::drop_threads () { _quit_threads = true; - for (unsigned int i=0; i< _thread_list.size(); i++) { + uint32_t thread_count = AudioEngine::instance()->process_thread_count (); + + for (unsigned int i=0; i < thread_count; i++) { _execution_sem.signal (); } _callback_start_sem.signal (); - for (list<AudioBackendNativeThread>::iterator i = _thread_list.begin(); i != _thread_list.end(); ++i) { - AudioEngine::instance()->wait_for_process_thread_exit (*i); - } - - _thread_list.clear (); + AudioEngine::instance()->join_process_threads (); _execution_tokens = 0; @@ -584,10 +577,5 @@ Graph::process_one_route (Route* route) bool Graph::in_process_thread () const { - for (list<AudioBackendNativeThread>::const_iterator i = _thread_list.begin (); i != _thread_list.end(); ++i) { - if (self_thread_equal (*i)) { - return true; - } - } - return false; + return AudioEngine::instance()->in_process_thread (); } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 2a081086d4..4b30543cb0 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -276,6 +276,21 @@ Session::Session (AudioEngine &eng, throw failed_constructor (); } + /* if a mix template was provided, then ::create() will + * have copied it into the session and we need to load it + * so that we have the state ready for ::set_state() + * after the engine is started. + * + * Note that we do NOT try to get the sample rate from + * the template at this time, though doing so would + * be easy if we decided this was an appropriate part + * of a template. + */ + + if (!mix_template.empty() && load_state (_current_snapshot_name)) { + throw failed_constructor (); + } + } else { if (load_state (_current_snapshot_name)) { @@ -393,7 +408,7 @@ Session::immediately_post_engine () _engine.Running.connect_same_thread (*this, boost::bind (&Session::initialize_latencies, this)); - if (synced_to_jack()) { + if (synced_to_engine()) { _engine.transport_stop (); } @@ -577,14 +592,21 @@ Session::setup_ltc () void Session::setup_click () { - XMLNode* child = 0; - _clicking = false; _click_io.reset (new ClickIO (*this, "click")); _click_gain.reset (new Amp (*this)); _click_gain->activate (); - - if (state_tree && (child = find_named_node (*state_tree->root(), "Click")) != 0) { + if (state_tree) { + setup_click_state (*state_tree->root()); + } +} + +void +Session::setup_click_state (const XMLNode& node) +{ + const XMLNode* child = 0; + + if ((child = find_named_node (node, "Click")) != 0) { /* existing state for Click */ int c = 0; @@ -1406,7 +1428,7 @@ Session::audible_frame () const offset = current_block_size; } - if (synced_to_jack()) { + if (synced_to_engine()) { tf = _engine.transport_frame(); } else { tf = _transport_frame; diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 1a605d2fd5..59bb3fd718 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -494,9 +494,10 @@ Session::create (const string& session_template, BusProfile* bus_profile) ifstream in(in_path.c_str()); if (in) { - string out_path = _path; - out_path += _name; - out_path += statefile_suffix; + /* no need to call legalize_for_path() since the string + * in session_template is already a legal path name + */ + string out_path = Glib::build_filename (_session_dir->root_path(), _name + statefile_suffix); ofstream out(out_path.c_str()); @@ -1317,13 +1318,7 @@ Session::set_state (const XMLNode& node, int version) if ((child = find_named_node (node, "Click")) == 0) { warning << _("Session: XML state has no click section") << endmsg; } else if (_click_io) { - const XMLNodeList& children (child->children()); - XMLNodeList::const_iterator i = children.begin(); - _click_io->set_state (**i, version); - ++i; - if (i != children.end()) { - _click_gain->set_state (**i, version); - } + setup_click_state (node); } if ((child = find_named_node (node, ControlProtocolManager::state_node_name)) != 0) { @@ -3781,3 +3776,68 @@ Session::rename (const std::string& new_name) #undef RENAME } + +int +Session::get_session_info_from_path (XMLTree& tree, const string& xmlpath) +{ + if (!Glib::file_test (xmlpath, Glib::FILE_TEST_EXISTS)) { + return -1; + } + + if (!tree.read (xmlpath)) { + return -1; + } + + return 0; +} + +int +Session::get_info_from_path (const string& xmlpath, float& sample_rate, SampleFormat& data_format) +{ + XMLTree tree; + bool found_sr = false; + bool found_data_format = false; + + if (get_session_info_from_path (tree, xmlpath)) { + return -1; + } + + /* sample rate */ + + const XMLProperty* prop; + if ((prop = tree.root()->property (X_("sample-rate"))) != 0) { + sample_rate = atoi (prop->value()); + found_sr = true; + } + + const XMLNodeList& children (tree.root()->children()); + for (XMLNodeList::const_iterator c = children.begin(); c != children.end(); ++c) { + const XMLNode* child = *c; + if (child->name() == "Config") { + const XMLNodeList& options (child->children()); + for (XMLNodeList::const_iterator oc = options.begin(); oc != options.end(); ++oc) { + const XMLNode* option = *oc; + const XMLProperty* name = option->property("name"); + + if (!name) { + continue; + } + + if (name->value() == "native-file-data-format") { + const XMLProperty* value = option->property ("value"); + if (value) { + SampleFormat fmt = (SampleFormat) string_2_enum (option->property ("value")->value(), fmt); + data_format = fmt; + found_data_format = true; + break; + } + } + } + } + if (found_data_format) { + break; + } + } + + return !(found_sr && found_data_format); // zero if they are both found +} diff --git a/libs/ardour/session_time.cc b/libs/ardour/session_time.cc index 0f2186c09b..e35910f2df 100644 --- a/libs/ardour/session_time.cc +++ b/libs/ardour/session_time.cc @@ -182,7 +182,7 @@ Session::timecode_time (Timecode::Time &t) int Session::backend_sync_callback (TransportState state, framepos_t pos) { - bool slave = synced_to_jack(); + bool slave = synced_to_engine(); switch (state) { case TransportStopped: diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index ab6d68fd67..38ad521235 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -86,7 +86,7 @@ Session::request_sync_source (Slave* new_slave) seamless = Config->get_seamless_loop (); - if (dynamic_cast<JACK_Slave*>(new_slave)) { + if (dynamic_cast<Engine_Slave*>(new_slave)) { /* JACK cannot support seamless looping at present */ Config->set_seamless_loop (false); } else { @@ -514,13 +514,13 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) if (auto_return_enabled || (ptw & PostTransportLocate) || (_requested_return_frame >= 0) || - synced_to_jack()) { + synced_to_engine()) { if (pending_locate_flush) { flush_all_inserts (); } - if ((auto_return_enabled || synced_to_jack() || _requested_return_frame >= 0) && + if ((auto_return_enabled || synced_to_engine() || _requested_return_frame >= 0) && !(ptw & PostTransportLocate)) { /* no explicit locate queued */ @@ -543,7 +543,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) /* don't try to handle loop play when synced to JACK */ - if (!synced_to_jack()) { + if (!synced_to_engine()) { Location *location = _locations->auto_loop_location(); @@ -734,7 +734,7 @@ Session::set_play_loop (bool yn) return; } - if (yn && Config->get_seamless_loop() && synced_to_jack()) { + if (yn && Config->get_seamless_loop() && synced_to_engine()) { warning << string_compose ( _("Seamless looping cannot be supported while %1 is using JACK transport.\n" "Recommend changing the configured options"), PROGRAM_NAME) @@ -811,7 +811,7 @@ Session::flush_all_inserts () void Session::start_locate (framepos_t target_frame, bool with_roll, bool with_flush, bool with_loop, bool force) { - if (synced_to_jack()) { + if (synced_to_engine()) { double sp; framepos_t pos; @@ -926,7 +926,7 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool bool transport_was_stopped = !transport_rolling(); - if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_jack() && play_loop)) { + if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_engine() && play_loop)) { realtime_stop (false, true); // XXX paul - check if the 2nd arg is really correct transport_was_stopped = true; } else { @@ -1067,7 +1067,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a set_track_monitor_input_status (true); } - if (synced_to_jack ()) { + if (synced_to_engine ()) { if (clear_state) { /* do this here because our response to the slave won't take care of it. @@ -1090,7 +1090,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a set_track_monitor_input_status (false); } - if (synced_to_jack()) { + if (synced_to_engine()) { _engine.transport_start (); } else { start_transport (); @@ -1100,7 +1100,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a /* not zero, not 1.0 ... varispeed */ - if ((synced_to_jack()) && speed != 0.0 && speed != 1.0) { + if ((synced_to_engine()) && speed != 0.0 && speed != 1.0) { warning << string_compose ( _("Global varispeed cannot be supported while %1 is connected to JACK transport control"), PROGRAM_NAME) @@ -1429,8 +1429,8 @@ Session::switch_to_sync_source (SyncSource src) } break; - case JACK: - if (_slave && dynamic_cast<JACK_Slave*>(_slave)) { + case Engine: + if (_slave && dynamic_cast<Engine_Slave*>(_slave)) { return; } @@ -1438,7 +1438,7 @@ Session::switch_to_sync_source (SyncSource src) return; } - new_slave = new JACK_Slave (*AudioEngine::instance()); + new_slave = new Engine_Slave (*AudioEngine::instance()); break; default: @@ -1632,9 +1632,9 @@ bool Session::maybe_stop (framepos_t limit) { if ((_transport_speed > 0.0f && _transport_frame >= limit) || (_transport_speed < 0.0f && _transport_frame == 0)) { - if (synced_to_jack () && config.get_jack_time_master ()) { + if (synced_to_engine () && config.get_jack_time_master ()) { _engine.transport_stop (); - } else if (!synced_to_jack ()) { + } else if (!synced_to_engine ()) { stop_transport (); } return true; diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index f23f1332b8..5356616324 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -397,12 +397,12 @@ string_to_sync_source (string str) } if (str == _("JACK")) { - return JACK; + return Engine; } fatal << string_compose (_("programming error: unknown sync source string \"%1\""), str) << endmsg; /*NOTREACHED*/ - return JACK; + return Engine; } /** @param sh Return a short version of the string */ @@ -410,7 +410,10 @@ const char* sync_source_to_string (SyncSource src, bool sh) { switch (src) { - case JACK: + case Engine: + /* no other backends offer sync for now ... deal with this if we + * ever have to. + */ return _("JACK"); case MTC: diff --git a/libs/ardour/wscript b/libs/ardour/wscript index e8c9fb8328..6e57c455fa 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -70,6 +70,7 @@ libardour_sources = [ 'diskstream.cc', 'element_import_handler.cc', 'element_importer.cc', + 'engine_slave.cc', 'enums.cc', 'event_type_map.cc', 'export_channel.cc', @@ -104,7 +105,6 @@ libardour_sources = [ 'interpolation.cc', 'io.cc', 'io_processor.cc', - 'jack_slave.cc', 'kmeterdsp.cc', 'ladspa_plugin.cc', 'ladspa_search_path.cc', @@ -347,7 +347,7 @@ def build(bld): 'AUDIOUNITS', 'OSX','BOOST','CURL','DL'] obj.use = ['libpbd','libmidipp','libevoral','libvamphost', 'libvampplugin','libtaglib','librubberband', - 'libaudiographer','libltc'] + 'libaudiographer','libltc','libtimecode'] obj.vnum = LIBARDOUR_LIB_VERSION obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3') obj.defines = [ |