summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin_insert.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-07-09 04:42:21 +0200
committerRobin Gareus <robin@gareus.org>2016-07-09 04:42:21 +0200
commit56c4eebfdd1033b9dd92ddcdf8698dda38545997 (patch)
tree03a41abf570ad6805fa6a5e8db038e3aa8b3d5a8 /libs/ardour/plugin_insert.cc
parent49c9569039f9c7d51e969affa447b270de9e60da (diff)
move LatencyChanged detection from Plugin to Processor (plugin-insert)
* support all Plugin APIs (not implementation specific) * also check for latency changes when plugins are hard en/disabled
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r--libs/ardour/plugin_insert.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index a8757fc97e..eaeb6d89af 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -69,6 +69,7 @@ PluginInsert::PluginInsert (Session& s, boost::shared_ptr<Plugin> plug)
: Processor (s, (plug ? plug->name() : string ("toBeRenamed")))
, _sc_playback_latency (0)
, _sc_capture_latency (0)
+ , _plugin_signal_latency (0)
, _signal_analysis_collected_nframes(0)
, _signal_analysis_collect_nframes_max(0)
, _configured (false)
@@ -551,6 +552,10 @@ PluginInsert::activate ()
}
Processor::activate ();
+ if (_plugin_signal_latency != signal_latency ()) {
+ _plugin_signal_latency = signal_latency ();
+ latency_changed ();
+ }
}
void
@@ -561,6 +566,10 @@ PluginInsert::deactivate ()
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
(*i)->deactivate ();
}
+ if (_plugin_signal_latency != signal_latency ()) {
+ _plugin_signal_latency = signal_latency ();
+ latency_changed ();
+ }
}
void
@@ -914,6 +923,11 @@ PluginInsert::connect_and_run (BufferSet& bufs, framepos_t start, framepos_t end
&_signal_analysis_outputs);
}
}
+
+ if (_plugin_signal_latency != signal_latency ()) {
+ _plugin_signal_latency = signal_latency ();
+ latency_changed ();
+ }
}
void
@@ -2699,6 +2713,9 @@ PluginInsert::describe_parameter (Evoral::Parameter param)
ARDOUR::framecnt_t
PluginInsert::signal_latency() const
{
+ if (!_pending_active) {
+ return 0;
+ }
if (_user_latency) {
return _user_latency;
}
@@ -2878,7 +2895,6 @@ PluginInsert::add_plugin (boost::shared_ptr<Plugin> plugin)
plugin->ParameterChangedExternally.connect_same_thread (*this, boost::bind (&PluginInsert::parameter_changed_externally, this, _1, _2));
plugin->StartTouch.connect_same_thread (*this, boost::bind (&PluginInsert::start_touch, this, _1));
plugin->EndTouch.connect_same_thread (*this, boost::bind (&PluginInsert::end_touch, this, _1));
- plugin->LatencyChanged.connect_same_thread (*this, boost::bind (&PluginInsert::latency_changed, this, _1, _2));
_custom_sinks = plugin->get_info()->n_inputs;
// cache sidechain port count
_cached_sidechain_pins.reset ();
@@ -2939,10 +2955,14 @@ PluginInsert::monitoring_changed ()
}
void
-PluginInsert::latency_changed (framecnt_t, framecnt_t)
+PluginInsert::latency_changed ()
{
// this is called in RT context, LatencyChanged is emitted after run()
_latency_changed = true;
+#if 0 // TODO check possible deadlock in RT-context
+ // XXX This also needs a proper API not an owner() hack.
+ static_cast<Route*>(owner ())->processors_changed (RouteProcessorChange ()); /* EMIT SIGNAL */
+#endif
}
void