summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-12-16 04:01:42 +0100
committerRobin Gareus <robin@gareus.org>2018-12-16 04:25:20 +0100
commite4d3ebfb666e2c4e9cf134d8f3ed42152da343bf (patch)
treed0855bac03500a9dfca33b38949faf8da3ed5002 /libs/ardour/ardour
parent17a8a50e5816b48469907fa4aa00b50103f0f02d (diff)
Optimize plugin-processing for non-automated params
Keep a dedicated list of automated parameters to evaluate in realtime. This fixes a performance issue with plugins that have many controls with only few of them being automated.
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/automatable.h6
-rw-r--r--libs/ardour/ardour/plugin_insert.h2
2 files changed, 5 insertions, 3 deletions
diff --git a/libs/ardour/ardour/automatable.h b/libs/ardour/ardour/automatable.h
index c7db1c7a21..fe14cacf77 100644
--- a/libs/ardour/ardour/automatable.h
+++ b/libs/ardour/ardour/automatable.h
@@ -26,6 +26,7 @@
#include <boost/shared_ptr.hpp>
+#include "pbd/rcu.h"
#include "pbd/signals.h"
#include "evoral/ControlSet.hpp"
@@ -88,7 +89,7 @@ public:
virtual void non_realtime_locate (samplepos_t now);
virtual void non_realtime_transport_stop (samplepos_t now, bool flush);
- virtual void automation_run (samplepos_t, pframes_t);
+ virtual void automation_run (samplepos_t, pframes_t, bool only_active = false);
virtual std::string describe_parameter(Evoral::Parameter param);
@@ -112,7 +113,8 @@ protected:
void can_automate(Evoral::Parameter);
- virtual void automation_list_automation_state_changed (Evoral::Parameter, AutoState) {}
+ virtual void automation_list_automation_state_changed (Evoral::Parameter, AutoState);
+ SerializedRCUManager<ControlList> _automated_controls;
int load_automation (const std::string& path);
int old_set_automation_state(const XMLNode&);
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h
index 30dd04057a..64b2bd875d 100644
--- a/libs/ardour/ardour/plugin_insert.h
+++ b/libs/ardour/ardour/plugin_insert.h
@@ -79,7 +79,7 @@ public:
bool write_immediate_event (size_t size, const uint8_t* buf);
- void automation_run (samplepos_t, pframes_t);
+ void automation_run (samplepos_t, pframes_t, bool only_active = false);
bool find_next_event (double, double, Evoral::ControlEvent&, bool only_active = true) const;
int set_block_size (pframes_t nframes);