summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-02-29 21:26:45 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:38 -0400
commitacaaa98bd0a21494ae912dbbc37fbbc33cbbf61d (patch)
tree905a1f5929cf6427087c3f9ae7d3d3cff202d83e /libs
parent984f4487e0c66e1ae4d3c732e48e00d4470cad8b (diff)
start shaping up VCA assign process
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/gain_control.h1
-rw-r--r--libs/ardour/ardour/route.h7
-rw-r--r--libs/ardour/gain_control.cc7
-rw-r--r--libs/ardour/route.cc13
4 files changed, 25 insertions, 3 deletions
diff --git a/libs/ardour/ardour/gain_control.h b/libs/ardour/ardour/gain_control.h
index c6421a6922..7845679220 100644
--- a/libs/ardour/ardour/gain_control.h
+++ b/libs/ardour/ardour/gain_control.h
@@ -57,6 +57,7 @@ class LIBARDOUR_API GainControl : public AutomationControl {
void add_master (boost::shared_ptr<GainControl>);
void remove_master (boost::shared_ptr<GainControl>);
void clear_masters ();
+ bool slaved_to (boost::shared_ptr<GainControl>) const;
private:
void _set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 3ade22319d..ed32769058 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -72,6 +72,7 @@ class MonitorProcessor;
class Pannable;
class CapturingProcessor;
class InternalSend;
+class VCA;
class LIBARDOUR_API Route : public SessionObject, public Automatable, public RouteGroupMember, public GraphNode, public boost::enable_shared_from_this<Route>
{
@@ -707,8 +708,10 @@ public:
void monitor_run (framepos_t start_frame, framepos_t end_frame,
pframes_t nframes, int declick);
-protected:
- friend class Session;
+ bool slaved_to (boost::shared_ptr<VCA>) const;
+
+ protected:
+ friend class Session;
void catch_up_on_solo_mute_override ();
void mod_solo_by_others_upstream (int32_t);
diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc
index eeb49e7de0..5ba7179231 100644
--- a/libs/ardour/gain_control.cc
+++ b/libs/ardour/gain_control.cc
@@ -176,3 +176,10 @@ GainControl::clear_masters ()
Changed(); /* EMIT SIGNAL */
}
}
+
+bool
+GainControl::slaved_to (boost::shared_ptr<GainControl> gc) const
+{
+ Glib::Threads::Mutex::Lock lm (master_lock);
+ return find (_masters.begin(), _masters.end(), gc) != _masters.end();
+}
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 49528e30e3..8b1f47ec4e 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -69,6 +69,7 @@
#include "ardour/session.h"
#include "ardour/unknown_processor.h"
#include "ardour/utils.h"
+#include "ardour/vca.h"
#include "i18n.h"
@@ -3345,7 +3346,7 @@ Route::set_processor_state (const XMLNode& node)
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
- XMLProperty const * prop = (*niter)->property ("type");
+ XMLProperty* prop = (*niter)->property ("type");
if (prop->value() == "amp") {
_amp->set_state (**niter, Stateful::current_state_version);
@@ -5883,3 +5884,13 @@ Route::master_send_enable_controllable () const
return boost::shared_ptr<AutomationControl>();
#endif
}
+
+bool
+Route::slaved_to (boost::shared_ptr<VCA> vca) const
+{
+ if (!vca || !_gain_control) {
+ return false;
+ }
+
+ return _gain_control->slaved_to (vca->control());
+}