summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Loftis <ben@glw.com>2010-04-22 15:54:12 +0000
committerBen Loftis <ben@glw.com>2010-04-22 15:54:12 +0000
commit2df90582860824831a9fc79e69c0750f2c84a5b2 (patch)
treee43498631364d370e43e22cacbe0810d923a7473
parent9ed1768212d03a6c6931cbcaa8f302ce0cb2f4f1 (diff)
more realtime automation fixes: only do realtime automation while rolling, and never Read on a locate when you are in Write
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6965 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/ardour/io.h4
-rw-r--r--libs/ardour/insert.cc6
-rw-r--r--libs/ardour/io.cc9
-rw-r--r--libs/ardour/panner.cc4
4 files changed, 14 insertions, 9 deletions
diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h
index 6ae917b9d4..7c0c0e1e78 100644
--- a/libs/ardour/ardour/io.h
+++ b/libs/ardour/ardour/io.h
@@ -244,9 +244,7 @@ class IO : public PBD::StatefulDestructible
void clear_automation ();
- bool gain_automation_recording() const {
- return (_gain_automation_curve.automation_state() & (Auto_Write|Auto_Touch));
- }
+ bool gain_automation_recording();
bool gain_automation_playback() const {
return (_gain_automation_curve.automation_state() & Auto_Play) ||
diff --git a/libs/ardour/insert.cc b/libs/ardour/insert.cc
index 035d344ab6..1dd6cff83d 100644
--- a/libs/ardour/insert.cc
+++ b/libs/ardour/insert.cc
@@ -340,7 +340,7 @@ PluginInsert::automation_snapshot (nframes_t now, bool force)
AutomationList *alist = *li;
- if (alist && alist->automation_write ()) {
+ if (alist && alist->automation_write () && _session.transport_rolling()) {
float val = _plugins[0]->get_parameter (n);
alist->rt_add (now, val);
@@ -361,7 +361,7 @@ PluginInsert::transport_stopped (nframes_t now)
if (alist) {
alist->reposition_for_rt_add (now);
- if (alist->automation_state() != Auto_Off) {
+ if (alist->automation_state() == Auto_Touch || alist->automation_state() == Auto_Play) {
_plugins[0]->set_parameter (n, alist->eval (now));
}
}
@@ -423,7 +423,7 @@ PluginInsert::set_parameter (uint32_t port, float val)
_plugins[0]->set_parameter (port, val);
- if (automation_list (port).automation_write()) {
+ if (automation_list (port).automation_write() && _session.transport_rolling()) {
if ( desc.toggled ) //store the previous value just before this so any interpolation works right
automation_list (port).add (_session.audible_frame()-1, last_val);
automation_list (port).add (_session.audible_frame(), val);
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 2fe72a276c..35d0df9e9f 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -2567,6 +2567,13 @@ IO::meter ()
}
}
+bool
+IO::gain_automation_recording ()
+{
+ return (_session.transport_rolling() && _gain_automation_curve.automation_write() );
+}
+
+
void
IO::clear_automation ()
{
@@ -2719,7 +2726,7 @@ IO::transport_stopped (nframes_t frame)
{
_gain_automation_curve.reposition_for_rt_add (frame);
- if (_gain_automation_curve.automation_state() != Auto_Off) {
+ if (_gain_automation_curve.automation_state() == Auto_Touch || _gain_automation_curve.automation_state() == Auto_Play) {
/* the src=0 condition is a special signal to not propagate
automation gain changes into the mix group when locating.
diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc
index 25ce8b2277..511a4778d5 100644
--- a/libs/ardour/panner.cc
+++ b/libs/ardour/panner.cc
@@ -198,7 +198,7 @@ BaseStereoPanner::~BaseStereoPanner ()
void
BaseStereoPanner::snapshot (nframes_t now)
{
- if (_automation.automation_state() == Auto_Write || _automation.automation_state() == Auto_Touch) {
+ if (_automation.automation_write () && parent.session().transport_rolling()) {
_automation.rt_add (now, x);
}
}
@@ -206,7 +206,7 @@ BaseStereoPanner::snapshot (nframes_t now)
void
BaseStereoPanner::transport_stopped (nframes_t frame)
{
- if (_automation.automation_state() != Auto_Off) {
+ if (_automation.automation_state() == Auto_Touch || _automation.automation_state() == Auto_Play) {
set_position (_automation.eval (frame));
}