diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc index 8c76b6fd2b..c13e475df3 100644 --- a/libs/ardour/automation_control.cc +++ b/libs/ardour/automation_control.cc @@ -95,12 +95,14 @@ AutomationControl::writable() const return true; } -/** Get the current effective `user' value based on automation state */ double AutomationControl::get_value() const { - bool from_list = alist() && alist()->automation_playback(); - return Control::get_double (from_list, timepos_t (_session.transport_sample())); + /* automation_run() will have updated the value + * (possibly ahead of time, according to latency compensation), + * and actually_set_value() will have set the user-value accordingly. + */ + return Control::user_double(); } double diff --git a/libs/ardour/slavable_automation_control.cc b/libs/ardour/slavable_automation_control.cc index 9caf59a16a..47d6d00005 100644 --- a/libs/ardour/slavable_automation_control.cc +++ b/libs/ardour/slavable_automation_control.cc @@ -106,18 +106,12 @@ SlavableAutomationControl::get_value_locked() const double SlavableAutomationControl::get_value() const { - bool from_list = _list && boost::dynamic_pointer_cast(_list)->automation_playback(); - Glib::Threads::RWLock::ReaderLock lm (master_lock); - if (!from_list) { - if (!_masters.empty() && automation_write ()) { - /* writing automation takes the fader value as-is, factor out the master */ - return Control::user_double (); - } - return get_value_locked (); - } else { - return Control::get_double (true, timepos_t (_session.transport_sample())) * get_masters_value_locked(); + if (!_masters.empty() && automation_write ()) { + /* writing automation takes the fader value as-is, factor out the master */ + return Control::user_double (); } + return get_value_locked (); } bool