X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fautomation_watch.cc;h=16e10c95f941f938340488419fae9f3c88545dc3;hb=d89573f8e73ee7f0c28a6b9a8b8ba0f8e78c69aa;hp=d3138ee336e9202b1df54a9947765ada011e1f0c;hpb=3cd8138a419cb165f56070ace0b21a1e63ec5a43;p=ardour.git diff --git a/libs/ardour/automation_watch.cc b/libs/ardour/automation_watch.cc index d3138ee336..16e10c95f9 100644 --- a/libs/ardour/automation_watch.cc +++ b/libs/ardour/automation_watch.cc @@ -28,8 +28,6 @@ using namespace ARDOUR; using namespace PBD; -using std::cerr; -using std::endl; AutomationWatch* AutomationWatch::_instance = 0; @@ -65,8 +63,8 @@ void AutomationWatch::add_automation_watch (boost::shared_ptr ac) { Glib::Threads::Mutex::Lock lm (automation_watch_lock); - DEBUG_TRACE (DEBUG::Automation, string_compose ("now watching control %1 for automation\n", ac->name())); - automation_watches.push_back (ac); + DEBUG_TRACE (DEBUG::Automation, string_compose ("now watching control %1 for automation, astate = %2\n", ac->name(), enum_2_string (ac->automation_state()))); + automation_watches.insert (ac); /* if an automation control is added here while the transport is * rolling, make sure that it knows that there is a write pass going @@ -74,8 +72,10 @@ AutomationWatch::add_automation_watch (boost::shared_ptr ac) */ if (_session && _session->transport_rolling() && ac->alist()->automation_write()) { - DEBUG_TRACE (DEBUG::Automation, string_compose ("\ttransport is rolling @ %1, so enter write pass\n", _session->transport_speed())); - ac->list()->set_in_write_pass (true); + DEBUG_TRACE (DEBUG::Automation, string_compose ("\ttransport is rolling @ %1, audible = %2so enter write pass\n", + _session->transport_speed(), _session->audible_frame())); + /* add a guard point since we are already moving */ + ac->list()->set_in_write_pass (true, true, _session->audible_frame()); } /* we can't store shared_ptr in connections because it @@ -104,7 +104,7 @@ AutomationWatch::remove_automation_watch (boost::shared_ptr a { Glib::Threads::Mutex::Lock lm (automation_watch_lock); DEBUG_TRACE (DEBUG::Automation, string_compose ("remove control %1 from automation watch\n", ac->name())); - automation_watches.remove (ac); + automation_watches.erase (ac); ac->list()->set_in_write_pass (false); } @@ -117,7 +117,7 @@ AutomationWatch::timer () { Glib::Threads::Mutex::Lock lm (automation_watch_lock); - + framepos_t time = _session->audible_frame (); for (AutomationWatches::iterator aw = automation_watches.begin(); aw != automation_watches.end(); ++aw) { @@ -134,7 +134,7 @@ void AutomationWatch::thread () { while (_run_thread) { - usleep (100000); // Config->get_automation_interval() * 10); + usleep ((useconds_t) floor (Config->get_automation_interval_msecs() * 1000)); timer (); } }