return false;
}
+bool
+Session::synced_to_engine() const {
+ return config.get_external_sync() && TransportMasterManager::instance().current()->type() == Engine;
+}
+
void
Session::request_sync_source (boost::shared_ptr<TransportMaster> tm)
{
}
if (ptw & PostTransportAdjustCaptureBuffering) {
+ /* need to prevent concurrency with ARDOUR::DiskWriter::run(),
+ * DiskWriter::adjust_buffering() re-allocates the ringbuffer */
+ Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
if (tr) {
because there will be no process callbacks to deliver stuff from
*/
- if (_engine.connected() && !_engine.freewheeling()) {
+ if (_engine.running() && !_engine.freewheeling()) {
// need to queue this in the next RT cycle
_send_timecode_update = true;
add_post_transport_work (PostTransportLocate);
_butler->schedule_transport_work ();
}
+ TransportStateChange (); /* EMIT SIGNAL */
}
}
double sp;
samplepos_t pos;
+ samplepos_t ignore1, ignore2;
- transport_master()->speed_and_position (sp, pos, 0);
+ transport_master()->speed_and_position (sp, pos, ignore1, ignore2, 0);
if (target_sample != pos) {