X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fautomatable.cc;h=906ff4ed3ee2ad7b7a0a316a2293f3aaeab66d89;hb=7eb4e5d22bf43fa1e6bc44dfa33d8732f744c2dd;hp=ef99fc70d3e91ebf6ba00add7c2c3d141f0ea9f3;hpb=b68fd1cc259eed8d6f67ce38458d95710063f24b;p=ardour.git diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index ef99fc70d3..906ff4ed3e 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -365,32 +365,34 @@ void Automatable::transport_stopped (framepos_t now) { for (Controls::iterator li = controls().begin(); li != controls().end(); ++li) { + boost::shared_ptr c = + boost::dynamic_pointer_cast(li->second); + if (!c) { + continue; + } - boost::shared_ptr c - = boost::dynamic_pointer_cast(li->second); - if (c) { - boost::shared_ptr l - = boost::dynamic_pointer_cast(c->list()); + boost::shared_ptr l = + boost::dynamic_pointer_cast(c->list()); + if (!l) { + continue; + } - if (l) { - /* Stop any active touch gesture just before we mark the write pass - as finished. If we don't do this, the transport can end up stopped with - an AutomationList thinking that a touch is still in progress and, - when the transport is re-started, a touch will magically - be happening without it ever have being started in the usual way. - */ - l->stop_touch (true, now); - l->write_pass_finished (now); - - if (l->automation_playback()) { - c->set_value(c->list()->eval(now)); - } - - if (l->automation_state() == Write) { - l->set_automation_state (Touch); - } - } - } + /* Stop any active touch gesture just before we mark the write pass + as finished. If we don't do this, the transport can end up stopped with + an AutomationList thinking that a touch is still in progress and, + when the transport is re-started, a touch will magically + be happening without it ever have being started in the usual way. + */ + l->stop_touch (true, now); + l->write_pass_finished (now, Config->get_automation_thinning_factor()); + + if (l->automation_playback()) { + c->set_value(c->list()->eval(now)); + } + + if (l->automation_state() == Write) { + l->set_automation_state (Touch); + } } }