summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/audio_unit.h1
-rw-r--r--libs/ardour/ardour/insert.h2
-rw-r--r--libs/ardour/ardour/plugin.h1
-rw-r--r--libs/ardour/ardour/redirect.h1
-rw-r--r--libs/ardour/ardour/send.h1
-rw-r--r--libs/ardour/audio_unit.cc14
-rw-r--r--libs/ardour/insert.cc8
-rw-r--r--libs/ardour/route.cc3
8 files changed, 24 insertions, 7 deletions
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index d8232e1e01..35b4630f94 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -79,6 +79,7 @@ class AUPlugin : public ARDOUR::Plugin
uint32_t nth_parameter (uint32_t which, bool& ok) const;
void activate ();
void deactivate ();
+ void flush ();
void set_block_size (nframes_t nframes);
int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset);
diff --git a/libs/ardour/ardour/insert.h b/libs/ardour/ardour/insert.h
index 7baebe401c..641df01c67 100644
--- a/libs/ardour/ardour/insert.h
+++ b/libs/ardour/ardour/insert.h
@@ -53,6 +53,7 @@ class Insert : public Redirect
virtual void run (vector<Sample *>& bufs, uint32_t nbufs, nframes_t nframes) = 0;
virtual void activate () {}
virtual void deactivate () {}
+ virtual void flush () {}
virtual int32_t can_do (int32_t in, int32_t& out) = 0;
virtual int32_t configure_io (int32_t magic, int32_t in, int32_t out) = 0;
@@ -114,6 +115,7 @@ class PluginInsert : public Insert
void silence (nframes_t nframes);
void activate ();
void deactivate ();
+ void flush ();
void set_block_size (nframes_t nframes);
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 480844878e..f2198b3170 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -113,6 +113,7 @@ class Plugin : public PBD::StatefulDestructible
virtual uint32_t nth_parameter (uint32_t which, bool& ok) const = 0;
virtual void activate () = 0;
virtual void deactivate () = 0;
+ virtual void flush () { deactivate(); activate(); }
virtual void set_block_size (nframes_t nframes) = 0;
virtual int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset) = 0;
diff --git a/libs/ardour/ardour/redirect.h b/libs/ardour/ardour/redirect.h
index e24494f23d..e4e6ccc14b 100644
--- a/libs/ardour/ardour/redirect.h
+++ b/libs/ardour/ardour/redirect.h
@@ -73,6 +73,7 @@ class Redirect : public IO
virtual void run (vector<Sample *>& ibufs, uint32_t nbufs, nframes_t nframes) = 0;
virtual void activate () = 0;
virtual void deactivate () = 0;
+ virtual void flush () = 0;
virtual nframes_t latency() { return 0; }
virtual void set_block_size (nframes_t nframes) {}
diff --git a/libs/ardour/ardour/send.h b/libs/ardour/ardour/send.h
index e241c6dbf8..6052f48b16 100644
--- a/libs/ardour/ardour/send.h
+++ b/libs/ardour/ardour/send.h
@@ -45,6 +45,7 @@ class Send : public Redirect
void run (vector<Sample *> &bufs, uint32_t nbufs, nframes_t nframes);
void activate() {}
void deactivate () {}
+ void flush () {}
void set_metering (bool yn);
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index d364e12329..5808e2e516 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -804,11 +804,17 @@ AUPlugin::activate ()
void
AUPlugin::deactivate ()
{
- unit->GlobalReset ();
+ unit->Uninitialize ();
initialized = false;
}
void
+AUPlugin::flush ()
+{
+ unit->GlobalReset ();
+}
+
+void
AUPlugin::set_block_size (nframes_t nframes)
{
_set_block_size (nframes);
@@ -822,8 +828,7 @@ AUPlugin::_set_block_size (nframes_t nframes)
OSErr err;
if (initialized) {
- unit->Uninitialize ();
- initialized = false;
+ deactivate ();
}
if ((err = unit->SetProperty (kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global,
@@ -850,8 +855,7 @@ AUPlugin::configure_io (int32_t in, int32_t out)
if ( (in==input_channels) && (out==output_channels) ) {
return 0;
} else {
- unit->Uninitialize ();
- initialized = false;
+ deactivate ();
}
}
diff --git a/libs/ardour/insert.cc b/libs/ardour/insert.cc
index d931f3a8e2..e70293d986 100644
--- a/libs/ardour/insert.cc
+++ b/libs/ardour/insert.cc
@@ -276,6 +276,14 @@ PluginInsert::deactivate ()
}
void
+PluginInsert::flush ()
+{
+ for (vector<boost::shared_ptr<Plugin> >::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+ (*i)->flush ();
+ }
+}
+
+void
PluginInsert::connect_and_run (vector<Sample*>& bufs, uint32_t nbufs, nframes_t nframes, nframes_t offset, bool with_auto, nframes_t now)
{
int32_t in_index = 0;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 4e8d4d954c..3834c98095 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -2264,8 +2264,7 @@ Route::handle_transport_stopped (bool abort_ignored, bool did_locate, bool can_f
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
if (Config->get_plugins_stop_with_transport() && can_flush_redirects) {
- (*i)->deactivate ();
- (*i)->activate ();
+ (*i)->flush ();
}
(*i)->transport_stopped (now);