summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-12-07 14:44:47 +0000
committerCarl Hetherington <carl@carlh.net>2010-12-07 14:44:47 +0000
commit94b4c264d156d79efc687a98f17514b128960118 (patch)
tree97847ecdb68b1da8ea482b5e4de54fcc058dcf4a /libs/ardour/ardour
parent40c162d6096f9bb338b602fb7845234133285411 (diff)
Send note-offs to VST instrument plugins on transport stop. Fixes #3583.
git-svn-id: svn://localhost/ardour2/branches/3.0@8203 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/midi_track.h2
-rw-r--r--libs/ardour/ardour/plugin.h2
-rw-r--r--libs/ardour/ardour/plugin_insert.h2
-rw-r--r--libs/ardour/ardour/processor.h2
-rw-r--r--libs/ardour/ardour/route.h3
-rw-r--r--libs/ardour/ardour/vst_plugin.h7
6 files changed, 15 insertions, 3 deletions
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index 554f5b3385..60d2567c21 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -42,7 +42,7 @@ public:
int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
int declick, bool can_record, bool rec_monitors_input, bool& need_butler);
- void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors);
+ void realtime_handle_transport_stopped ();
void use_new_diskstream ();
void set_diskstream (boost::shared_ptr<Diskstream>);
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 828e532c6a..d917ef85af 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -128,6 +128,8 @@ class Plugin : public PBD::StatefulDestructible, public Latent
virtual bool parameter_is_input(uint32_t) const = 0;
virtual bool parameter_is_output(uint32_t) const = 0;
+ virtual void realtime_handle_transport_stopped () {}
+
bool save_preset (std::string);
void remove_preset (std::string);
virtual bool load_preset (const std::string& uri) = 0;
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index e4a42d8165..a83f75ed3e 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -74,6 +74,8 @@ class PluginInsert : public Processor
bool is_generator() const;
+ void realtime_handle_transport_stopped ();
+
struct PluginControl : public AutomationControl
{
PluginControl (PluginInsert* p, const Evoral::Parameter &param,
diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h
index 182208e560..9038088cf0 100644
--- a/libs/ardour/ardour/processor.h
+++ b/libs/ardour/ardour/processor.h
@@ -84,6 +84,8 @@ class Processor : public SessionObject, public Automatable, public Latent
virtual ChanCount input_streams () const { return _configured_input; }
virtual ChanCount output_streams() const { return _configured_output; }
+ virtual void realtime_handle_transport_stopped () {}
+
/* note: derived classes should implement state(), NOT get_state(), to allow
us to merge C++ inheritance and XML lack-of-inheritance reasonably
smoothly.
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index afa6c0e527..7f2f5dc719 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -116,7 +116,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
virtual void set_record_enabled (bool /*yn*/, void * /*src*/) {}
virtual bool record_enabled() const { return false; }
- virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors);
+ virtual void nonrealtime_handle_transport_stopped (bool abort, bool did_locate, bool flush_processors);
+ virtual void realtime_handle_transport_stopped () {}
virtual void set_pending_declick (int);
/* end of vfunc-based API */
diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h
index 332872e9bd..24af13c053 100644
--- a/libs/ardour/ardour/vst_plugin.h
+++ b/libs/ardour/ardour/vst_plugin.h
@@ -28,8 +28,8 @@
#include <dlfcn.h>
#include "pbd/stateful.h"
-#include <jack/types.h>
#include "ardour/plugin.h"
+#include "ardour/midi_state_tracker.h"
struct _FSTHandle;
struct _FST;
@@ -79,6 +79,8 @@ class VSTPlugin : public ARDOUR::Plugin
bool parameter_is_input(uint32_t i) const { return true; }
bool parameter_is_output(uint32_t i) const { return false; }
+ void realtime_handle_transport_stopped ();
+
bool load_preset (const std::string& preset_label);
virtual std::vector<PresetRecord> get_presets ();
int first_user_preset_index () const;
@@ -103,6 +105,9 @@ private:
FST* _fst;
AEffect* _plugin;
bool been_resumed;
+ MidiStateTracker _tracker;
+ BufferSet _pending_stop_events;
+ bool _have_pending_stop_events;
};
class VSTPluginInfo : public PluginInfo