diff options
-rw-r--r-- | libs/ardour/ardour/audio_unit.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/insert.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/redirect.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/send.h | 1 | ||||
-rw-r--r-- | libs/ardour/audio_unit.cc | 14 | ||||
-rw-r--r-- | libs/ardour/insert.cc | 8 | ||||
-rw-r--r-- | libs/ardour/route.cc | 3 |
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); |