summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-19 21:09:40 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-19 21:09:40 +0000
commit7b6b75f38ff6b34de3f70e36045498f227c1727d (patch)
treed7bc76a8745daa5051b2bcce7f84910f3ad72aac /libs/ardour
parentb6642d14ca64153b5731d1a3a79e4d00060541ca (diff)
forward port automation handling changes from 2.x, upto and including about rev 6981 (will need full testing in the 3.X context). as on 2.x, this removes real-time visual updates to automation curves during write/touch automation recording
git-svn-id: svn://localhost/ardour2/branches/3.0@7653 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/amp.cc2
-rw-r--r--libs/ardour/ardour/amp.h2
-rw-r--r--libs/ardour/ardour/automatable.h2
-rw-r--r--libs/ardour/ardour/automation_control.h10
-rw-r--r--libs/ardour/ardour/automation_list.h20
-rw-r--r--libs/ardour/ardour/delivery.h7
-rw-r--r--libs/ardour/ardour/internal_return.h2
-rw-r--r--libs/ardour/ardour/internal_send.h2
-rw-r--r--libs/ardour/ardour/meter.h2
-rw-r--r--libs/ardour/ardour/monitor_processor.h2
-rw-r--r--libs/ardour/ardour/panner.h2
-rw-r--r--libs/ardour/ardour/plugin_insert.h2
-rw-r--r--libs/ardour/ardour/port_insert.h2
-rw-r--r--libs/ardour/ardour/processor.h4
-rw-r--r--libs/ardour/ardour/return.h2
-rw-r--r--libs/ardour/ardour/send.h2
-rw-r--r--libs/ardour/automatable.cc27
-rw-r--r--libs/ardour/automation_list.cc60
-rw-r--r--libs/ardour/delivery.cc31
-rw-r--r--libs/ardour/internal_return.cc2
-rw-r--r--libs/ardour/internal_send.cc2
-rw-r--r--libs/ardour/meter.cc2
-rw-r--r--libs/ardour/midi_track.cc3
-rw-r--r--libs/ardour/monitor_processor.cc2
-rw-r--r--libs/ardour/panner.cc2
-rw-r--r--libs/ardour/plugin_insert.cc2
-rw-r--r--libs/ardour/port_insert.cc2
-rw-r--r--libs/ardour/return.cc2
-rw-r--r--libs/ardour/route.cc4
-rw-r--r--libs/ardour/send.cc2
30 files changed, 124 insertions, 84 deletions
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc
index f2448c06aa..6002a2549d 100644
--- a/libs/ardour/amp.cc
+++ b/libs/ardour/amp.cc
@@ -70,7 +70,7 @@ Amp::configure_io (ChanCount in, ChanCount out)
}
void
-Amp::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t nframes, bool)
+Amp::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t nframes, bool)
{
if (!_active && !_pending_active) {
return;
diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h
index 52aceaf85f..011fef13c0 100644
--- a/libs/ardour/ardour/amp.h
+++ b/libs/ardour/ardour/amp.h
@@ -43,7 +43,7 @@ public:
bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
bool configure_io (ChanCount in, ChanCount out);
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
bool apply_gain() const { return _apply_gain; }
void apply_gain(bool yn) { _apply_gain = yn; }
diff --git a/libs/ardour/ardour/automatable.h b/libs/ardour/ardour/automatable.h
index e0fe38e67e..469025c693 100644
--- a/libs/ardour/ardour/automatable.h
+++ b/libs/ardour/ardour/automatable.h
@@ -61,7 +61,7 @@ public:
void clear_controls ();
virtual void automation_snapshot(nframes_t now, bool force);
- virtual void transport_stopped (sframes_t now);
+ virtual void transport_stopped (framepos_t now);
virtual std::string describe_parameter(Evoral::Parameter param);
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index 2d22b9e661..006e74346f 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -64,14 +64,14 @@ public:
return ((ARDOUR::AutomationList*)_list.get())->set_automation_state(as);
}
- inline void start_touch() {
+ inline void start_touch(double when) {
set_touching (true);
- return ((ARDOUR::AutomationList*)_list.get())->start_touch();
+ return ((ARDOUR::AutomationList*)_list.get())->start_touch(when);
}
- inline void stop_touch() {
+ inline void stop_touch(bool mark, double when) {
set_touching (false);
- return ((ARDOUR::AutomationList*)_list.get())->stop_touch();
+ return ((ARDOUR::AutomationList*)_list.get())->stop_touch(mark, when);
}
/** Set the value and do the right thing based on automation state
@@ -86,6 +86,8 @@ public:
double lower() const { return parameter().min(); }
double upper() const { return parameter().max(); }
+ const ARDOUR::Session& session() const { return _session; }
+
protected:
ARDOUR::Session& _session;
};
diff --git a/libs/ardour/ardour/automation_list.h b/libs/ardour/ardour/automation_list.h
index acb071cca7..9a5420e74b 100644
--- a/libs/ardour/ardour/automation_list.h
+++ b/libs/ardour/ardour/automation_list.h
@@ -61,19 +61,21 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL
PBD::Signal0<void> automation_style_changed;
bool automation_playback() const {
- return (_state & Play) || ((_state & Touch) && !_touching);
+ return (_state & Play) || ((_state & Touch) && !touching());
}
bool automation_write () const {
- return (_state & Write) || ((_state & Touch) && _touching);
- }
+ return ((_state & Write) || ((_state & Touch) && touching()));
+ }
PBD::Signal0<void> StateChanged;
static PBD::Signal1<void,AutomationList*> AutomationListCreated;
- void start_touch ();
- void stop_touch ();
- bool touching() const { return _touching; }
+ void start_touch (double when);
+ void stop_touch (bool mark, double when);
+ bool touching() const { return g_atomic_int_get (&_touching); }
+ bool writing() const { return _state == Write; }
+ bool touch_enabled() const { return _state == Touch; }
XMLNode& get_state ();
int set_state (const XMLNode &, int version);
@@ -86,9 +88,9 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL
void maybe_signal_changed ();
- AutoState _state;
- AutoStyle _style;
- bool _touching;
+ AutoState _state;
+ AutoStyle _style;
+ gint _touching;
};
} // namespace
diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h
index ec808a9820..f7cbc29af7 100644
--- a/libs/ardour/ardour/delivery.h
+++ b/libs/ardour/ardour/delivery.h
@@ -71,10 +71,7 @@ public:
/* supplemental method used with MIDI */
void flush_buffers (nframes_t nframes, nframes64_t time);
- void transport_stopped ();
-
void no_outs_cuz_we_no_monitor(bool);
-
void cycle_start (nframes_t);
void increment_output_offset (nframes_t);
void transport_stopped (sframes_t frame);
@@ -100,8 +97,8 @@ public:
void allow_pan_reset ();
uint32_t pans_required() const { return _configured_input.n_audio(); }
- void start_pan_touch (uint32_t which);
- void end_pan_touch (uint32_t which);
+ void start_pan_touch (uint32_t which, double when);
+ void end_pan_touch (uint32_t which, bool mark, double when);
protected:
Role _role;
diff --git a/libs/ardour/ardour/internal_return.h b/libs/ardour/ardour/internal_return.h
index 2b8e618337..75de954752 100644
--- a/libs/ardour/ardour/internal_return.h
+++ b/libs/ardour/ardour/internal_return.h
@@ -38,7 +38,7 @@ class InternalReturn : public Return
XMLNode& get_state(void);
int set_state(const XMLNode&, int version);
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
bool configure_io (ChanCount in, ChanCount out);
bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
int set_block_size (nframes_t);
diff --git a/libs/ardour/ardour/internal_send.h b/libs/ardour/ardour/internal_send.h
index 0764982a93..d2a769982c 100644
--- a/libs/ardour/ardour/internal_send.h
+++ b/libs/ardour/ardour/internal_send.h
@@ -39,7 +39,7 @@ class InternalSend : public Send
XMLNode& get_state(void);
int set_state(const XMLNode& node, int version);
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
bool feeds (boost::shared_ptr<Route> other) const;
bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
bool configure_io (ChanCount in, ChanCount out);
diff --git a/libs/ardour/ardour/meter.h b/libs/ardour/ardour/meter.h
index 80adcd4156..dad86d5185 100644
--- a/libs/ardour/ardour/meter.h
+++ b/libs/ardour/ardour/meter.h
@@ -68,7 +68,7 @@ public:
void reflect_inputs (const ChanCount& in);
/** Compute peaks */
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
ChanCount input_streams () const { return current_meters; }
ChanCount output_streams () const { return current_meters; }
diff --git a/libs/ardour/ardour/monitor_processor.h b/libs/ardour/ardour/monitor_processor.h
index e453551b0b..0f23d7029f 100644
--- a/libs/ardour/ardour/monitor_processor.h
+++ b/libs/ardour/ardour/monitor_processor.h
@@ -110,7 +110,7 @@ class MonitorProcessor : public Processor
bool display_to_user() const;
- void run (BufferSet& /*bufs*/, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t /*nframes*/, bool /*result_required*/);
+ void run (BufferSet& /*bufs*/, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t /*nframes*/, bool /*result_required*/);
XMLNode& state (bool full);
int set_state (const XMLNode&, int /* version */);
diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h
index 62512f6181..087471032d 100644
--- a/libs/ardour/ardour/panner.h
+++ b/libs/ardour/ardour/panner.h
@@ -228,7 +228,7 @@ public:
bool can_support_io_configuration (const ChanCount& /*in*/, ChanCount& /*out*/) const { return true; };
/// The fundamental Panner function
- void run (BufferSet& src, BufferSet& dest, sframes_t start_frame, sframes_t end_frames, nframes_t nframes);
+ void run (BufferSet& src, BufferSet& dest, framepos_t start_frame, framepos_t end_frames, nframes_t nframes);
bool bypassed() const { return _bypassed; }
void set_bypassed (bool yn);
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index e4487eb6c0..1fcce61f39 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -52,7 +52,7 @@ class PluginInsert : public Processor
XMLNode& get_state(void);
int set_state(const XMLNode&, int version);
- void run (BufferSet& in, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& in, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
void silence (nframes_t nframes);
void activate ();
diff --git a/libs/ardour/ardour/port_insert.h b/libs/ardour/ardour/port_insert.h
index d30edc7162..f4e20a8045 100644
--- a/libs/ardour/ardour/port_insert.h
+++ b/libs/ardour/ardour/port_insert.h
@@ -50,7 +50,7 @@ class PortInsert : public IOProcessor
XMLNode& get_state(void);
int set_state (const XMLNode&, int version);
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
nframes_t signal_latency() const;
diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h
index 1e65bc58bd..55e0cfb2d6 100644
--- a/libs/ardour/ardour/processor.h
+++ b/libs/ardour/ardour/processor.h
@@ -63,15 +63,13 @@ class Processor : public SessionObject, public Automatable, public Latent
virtual nframes_t signal_latency() const { return 0; }
- virtual void transport_stopped (sframes_t /*frame*/) {}
-
virtual int set_block_size (nframes_t /*nframes*/) { return 0; }
virtual bool requires_fixed_sized_buffers() const { return false; }
/** @param result_required true if, on return from this method, bufs is required to contain valid data;
* if false, the method need not bother writing to bufs if it doesn't want to.
*/
- virtual void run (BufferSet& /*bufs*/, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t /*nframes*/, bool result_required) {}
+ virtual void run (BufferSet& /*bufs*/, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t /*nframes*/, bool result_required) {}
virtual void silence (nframes_t /*nframes*/) {}
virtual void activate () { _pending_active = true; ActiveChanged(); }
diff --git a/libs/ardour/ardour/return.h b/libs/ardour/ardour/return.h
index 63915e5d78..2dcb6eb270 100644
--- a/libs/ardour/ardour/return.h
+++ b/libs/ardour/ardour/return.h
@@ -42,7 +42,7 @@ public:
uint32_t bit_slot() const { return _bitslot; }
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
boost::shared_ptr<Amp> amp() const { return _amp; }
boost::shared_ptr<PeakMeter> meter() const { return _meter; }
diff --git a/libs/ardour/ardour/send.h b/libs/ardour/ardour/send.h
index a060363a23..af806b3c1f 100644
--- a/libs/ardour/ardour/send.h
+++ b/libs/ardour/ardour/send.h
@@ -55,7 +55,7 @@ class Send : public Delivery
uint32_t pans_required() const { return _configured_input.n_audio(); }
- void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool);
bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
bool configure_io (ChanCount in, ChanCount out);
diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc
index 5ae4e96b4e..68c42ba7b5 100644
--- a/libs/ardour/automatable.cc
+++ b/libs/ardour/automatable.cc
@@ -27,6 +27,7 @@
#include "pbd/error.h"
#include "pbd/enumwriter.h"
+#include "pbd/stacktrace.h"
#include "midi++/names.h"
@@ -393,7 +394,7 @@ Automatable::automation_snapshot (nframes_t now, bool force)
for (Controls::iterator i = controls().begin(); i != controls().end(); ++i) {
boost::shared_ptr<AutomationControl> c
= boost::dynamic_pointer_cast<AutomationControl>(i->second);
- if (c->automation_write()) {
+ if (_a_session.transport_rolling() && c->automation_write()) {
c->list()->rt_add (now, i->second->user_double());
}
}
@@ -403,20 +404,28 @@ Automatable::automation_snapshot (nframes_t now, bool force)
}
void
-Automatable::transport_stopped (sframes_t now)
+Automatable::transport_stopped (framepos_t now)
{
for (Controls::iterator li = controls().begin(); li != controls().end(); ++li) {
boost::shared_ptr<AutomationControl> c
= boost::dynamic_pointer_cast<AutomationControl>(li->second);
- boost::shared_ptr<AutomationList> l
+ if (c) {
+ boost::shared_ptr<AutomationList> l
= boost::dynamic_pointer_cast<AutomationList>(c->list());
-
- c->list()->reposition_for_rt_add (now);
-
- if (c->automation_state() != Off) {
- c->set_value(c->list()->eval(now));
- }
+
+ if (l) {
+ 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);
+ }
+ }
+ }
}
}
diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc
index 2270b2eff7..53fdb233c6 100644
--- a/libs/ardour/automation_list.cc
+++ b/libs/ardour/automation_list.cc
@@ -53,7 +53,7 @@ AutomationList::AutomationList (Evoral::Parameter id)
{
_state = Off;
_style = Absolute;
- _touching = false;
+ g_atomic_int_set (&_touching, 0);
create_curve_if_necessary();
@@ -67,7 +67,7 @@ AutomationList::AutomationList (const AutomationList& other)
{
_style = other._style;
_state = other._state;
- _touching = other._touching;
+ g_atomic_int_set (&_touching, other.touching());
create_curve_if_necessary();
@@ -80,7 +80,7 @@ AutomationList::AutomationList (const AutomationList& other, double start, doubl
{
_style = other._style;
_state = other._state;
- _touching = other._touching;
+ g_atomic_int_set (&_touching, other.touching());
create_curve_if_necessary();
@@ -94,7 +94,7 @@ AutomationList::AutomationList (const AutomationList& other, double start, doubl
AutomationList::AutomationList (const XMLNode& node, Evoral::Parameter id)
: ControlList(id)
{
- _touching = false;
+ g_atomic_int_set (&_touching, 0);
_state = Off;
_style = Absolute;
@@ -180,6 +180,12 @@ AutomationList::set_automation_state (AutoState s)
{
if (s != _state) {
_state = s;
+
+ if (_state == Write) {
+ Glib::Mutex::Lock lm (ControlList::_lock);
+ nascent.push_back (new NascentInfo (false));
+ }
+
automation_state_changed (s); /* EMIT SIGNAL */
}
}
@@ -194,17 +200,37 @@ AutomationList::set_automation_style (AutoStyle s)
}
void
-AutomationList::start_touch ()
+AutomationList::start_touch (double when)
{
- _touching = true;
- _new_value = true;
+ if (_state == Touch) {
+ Glib::Mutex::Lock lm (ControlList::_lock);
+ nascent.push_back (new NascentInfo (true, when));
+ }
+
+ g_atomic_int_set (&_touching, 1);
}
void
-AutomationList::stop_touch ()
+AutomationList::stop_touch (bool mark, double when)
{
- _touching = false;
- _new_value = false;
+ g_atomic_int_set (&_touching, 0);
+
+ if (_state == Touch) {
+ Glib::Mutex::Lock lm (ControlList::_lock);
+
+ if (mark) {
+ nascent.back()->end_time = when;
+
+ } else {
+
+ /* nascent info created in start touch but never used. just get rid of it.
+ */
+
+ NascentInfo* ninfo = nascent.back ();
+ nascent.erase (nascent.begin());
+ delete ninfo;
+ }
+ }
}
void
@@ -247,7 +273,14 @@ AutomationList::state (bool full)
root->add_property ("interpolation-style", enum_2_string (_interpolation));
if (full) {
- root->add_property ("state", auto_state_to_string (_state));
+ /* never serialize state with Write enabled - too dangerous
+ for the user's data
+ */
+ if (_state != Write) {
+ root->add_property ("state", auto_state_to_string (_state));
+ } else {
+ root->add_property ("state", auto_state_to_string (Off));
+ }
} else {
/* never save anything but Off for automation state to a template */
root->add_property ("state", auto_state_to_string (Off));
@@ -327,7 +360,6 @@ AutomationList::deserialize_events (const XMLNode& node)
error << _("automation list: cannot load coordinates from XML, all points ignored") << endmsg;
} else {
mark_dirty ();
- reposition_for_rt_add (0);
maybe_signal_changed ();
}
@@ -426,6 +458,9 @@ AutomationList::set_state (const XMLNode& node, int version)
if ((prop = node.property (X_("state"))) != 0) {
_state = string_to_auto_state (prop->value());
+ if (_state == Write) {
+ _state = Off;
+ }
} else {
_state = Off;
}
@@ -462,7 +497,6 @@ AutomationList::set_state (const XMLNode& node, int version)
freeze ();
clear ();
mark_dirty ();
- reposition_for_rt_add (0);
maybe_signal_changed ();
thaw ();
}
diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc
index d5c982c0cc..50a87eb000 100644
--- a/libs/ardour/delivery.cc
+++ b/libs/ardour/delivery.cc
@@ -221,7 +221,7 @@ Delivery::configure_io (ChanCount in, ChanCount out)
}
void
-Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool result_required)
+Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool result_required)
{
assert (_output);
@@ -418,27 +418,22 @@ Delivery::reset_panners ()
void
-Delivery::start_pan_touch (uint32_t which)
+Delivery::start_pan_touch (uint32_t which, double when)
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->start_touch();
+ _panner->pan_control(which)->start_touch(when);
}
}
void
-Delivery::end_pan_touch (uint32_t which)
+Delivery::end_pan_touch (uint32_t which, bool mark, double when)
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->stop_touch();
+ _panner->pan_control(which)->stop_touch(mark, when);
}
}
-void
-Delivery::transport_stopped (sframes_t frame)
-{
- _panner->transport_stopped (frame);
-}
void
Delivery::flush_buffers (nframes_t nframes, nframes64_t time)
@@ -453,15 +448,19 @@ Delivery::flush_buffers (nframes_t nframes, nframes64_t time)
}
void
-Delivery::transport_stopped ()
+Delivery::transport_stopped (framepos_t now)
{
- /* turn off any notes that are on */
+ Processor::transport_stopped (now);
- PortSet& ports (_output->ports());
+ _panner->transport_stopped (now);
- for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
- (*i).transport_stopped ();
- }
+ if (_output) {
+ PortSet& ports (_output->ports());
+
+ for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
+ (*i).transport_stopped ();
+ }
+ }
}
gain_t
diff --git a/libs/ardour/internal_return.cc b/libs/ardour/internal_return.cc
index e1f39b79a3..db3c68a352 100644
--- a/libs/ardour/internal_return.cc
+++ b/libs/ardour/internal_return.cc
@@ -37,7 +37,7 @@ InternalReturn::InternalReturn (Session& s)
}
void
-InternalReturn::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t nframes, bool)
+InternalReturn::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t nframes, bool)
{
if (!_active && !_pending_active) {
return;
diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc
index a1425e3059..9c4238b134 100644
--- a/libs/ardour/internal_send.cc
+++ b/libs/ardour/internal_send.cc
@@ -80,7 +80,7 @@ InternalSend::send_to_going_away ()
}
void
-InternalSend::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool)
+InternalSend::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool)
{
if ((!_active && !_pending_active) || !target || !_send_to) {
_meter->reset ();
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index 3c53f56db4..443146cf13 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -39,7 +39,7 @@ PBD::Signal0<void> Metering::Meter;
* be set to 0.
*/
void
-PeakMeter::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t nframes, bool)
+PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t nframes, bool)
{
if (!_active && !_pending_active) {
return;
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 25418ec968..f79ed520c0 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -396,12 +396,9 @@ MidiTrack::no_roll (nframes_t nframes, sframes_t start_frame, sframes_t end_fram
void
MidiTrack::handle_transport_stopped (bool abort, bool did_locate, bool flush_processors)
{
-
- _main_outs->transport_stopped ();
Route::handle_transport_stopped (abort, did_locate, flush_processors);
}
-
void
MidiTrack::push_midi_input_to_step_edit_ringbuffer (nframes_t nframes)
{
diff --git a/libs/ardour/monitor_processor.cc b/libs/ardour/monitor_processor.cc
index bcdc28a4ae..8ea5e70aab 100644
--- a/libs/ardour/monitor_processor.cc
+++ b/libs/ardour/monitor_processor.cc
@@ -245,7 +245,7 @@ MonitorProcessor::state (bool full)
}
void
-MonitorProcessor::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t nframes, bool /*result_required*/)
+MonitorProcessor::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t nframes, bool /*result_required*/)
{
uint32_t chn = 0;
gain_t target_gain;
diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc
index c400199943..3f6b23672a 100644
--- a/libs/ardour/panner.cc
+++ b/libs/ardour/panner.cc
@@ -1489,7 +1489,7 @@ Panner::distribute_no_automation (BufferSet& inbufs, BufferSet& outbufs, nframes
}
void
-Panner::run (BufferSet& inbufs, BufferSet& outbufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes)
+Panner::run (BufferSet& inbufs, BufferSet& outbufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes)
{
if (outbufs.count().n_audio() == 0) {
// Failing to deliver audio we were asked to deliver is a bug
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 73655b24b1..d6dfc014cf 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -367,7 +367,7 @@ PluginInsert::silence (nframes_t nframes)
}
void
-PluginInsert::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t nframes, bool)
+PluginInsert::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_frame*/, nframes_t nframes, bool)
{
if (_active || _pending_active) {
diff --git a/libs/ardour/port_insert.cc b/libs/ardour/port_insert.cc
index 087d2577ad..20c6b127d2 100644
--- a/libs/ardour/port_insert.cc
+++ b/libs/ardour/port_insert.cc
@@ -101,7 +101,7 @@ PortInsert::latency() const
}
void
-PortInsert::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool)
+PortInsert::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool)
{
if (_output->n_ports().n_total() == 0) {
return;
diff --git a/libs/ardour/return.cc b/libs/ardour/return.cc
index 10879d7722..d8c8dd22f8 100644
--- a/libs/ardour/return.cc
+++ b/libs/ardour/return.cc
@@ -103,7 +103,7 @@ Return::set_state (const XMLNode& node, int version)
}
void
-Return::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool)
+Return::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool)
{
if ((!_active && !_pending_active) || _input->n_ports() == ChanCount::ZERO) {
return;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 0f9e7ba241..290d9209d9 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -2621,7 +2621,7 @@ Route::direct_feeds (boost::shared_ptr<Route> other, bool* only_send)
void
Route::handle_transport_stopped (bool /*abort_ignored*/, bool did_locate, bool can_flush_processors)
{
- nframes_t now = _session.transport_frame();
+ framepos_t now = _session.transport_frame();
{
Glib::RWLock::ReaderLock lm (_processor_lock);
@@ -2630,6 +2630,8 @@ Route::handle_transport_stopped (bool /*abort_ignored*/, bool did_locate, bool c
automation_snapshot (now, true);
}
+ Automatable::transport_stopped (now);
+
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
if (Config->get_plugins_stop_with_transport() && can_flush_processors) {
diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc
index 4624006ca9..9d5d2398c7 100644
--- a/libs/ardour/send.cc
+++ b/libs/ardour/send.cc
@@ -71,7 +71,7 @@ Send::deactivate ()
}
void
-Send::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool)
+Send::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool)
{
if (_output->n_ports() == ChanCount::ZERO) {
_meter->reset ();