summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-04-24 21:47:52 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:41 -0400
commit83e51ee69b6b95574f160d4024995d6ad7cdfab5 (patch)
treea130f38171510a12ce51cdd162c95b796e5ea228
parent69f67b6198995f5bc46991212d73e6a1149b868f (diff)
add Slavable API for VCA assign/unassign
-rw-r--r--libs/ardour/ardour/route.h15
-rw-r--r--libs/ardour/ardour/vca.h7
-rw-r--r--libs/ardour/route.cc16
-rw-r--r--libs/ardour/vca.cc27
-rw-r--r--libs/ardour/wscript1
5 files changed, 53 insertions, 13 deletions
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 46c5b1f3c7..52be8c94b4 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -57,6 +57,7 @@
#include "ardour/soloable.h"
#include "ardour/solo_control.h"
#include "ardour/solo_safe_control.h"
+#include "ardour/slavable.h"
class RoutePinWindowProxy;
@@ -83,13 +84,14 @@ class SoloIsolateControl;
class PhaseControl;
class MonitorControl;
-class LIBARDOUR_API Route : public Stripable,
+class LIBARDOUR_API Route : public GraphNode,
+ public Stripable,
public Soloable,
public Muteable,
public Monitorable,
public Automatable,
public RouteGroupMember,
- public GraphNode,
+ public Slavable,
public boost::enable_shared_from_this<Route>
{
public:
@@ -599,8 +601,6 @@ public:
pframes_t nframes, int declick);
bool slaved_to (boost::shared_ptr<VCA>) const;
- void vca_assign (boost::shared_ptr<VCA>);
- void vca_unassign (boost::shared_ptr<VCA>);
protected:
friend class Session;
@@ -611,8 +611,11 @@ public:
void curve_reallocate ();
virtual void set_block_size (pframes_t nframes);
-protected:
- virtual framecnt_t check_initial_delay (framecnt_t nframes, framepos_t&) { return nframes; }
+ protected:
+ int assign_controls (boost::shared_ptr<VCA>);
+ int unassign_controls (boost::shared_ptr<VCA>);
+
+ virtual framecnt_t check_initial_delay (framecnt_t nframes, framepos_t&) { return nframes; }
void fill_buffers_with_input (BufferSet& bufs, boost::shared_ptr<IO> io, pframes_t nframes);
diff --git a/libs/ardour/ardour/vca.h b/libs/ardour/ardour/vca.h
index 9af6436f6b..a3dfb3ec07 100644
--- a/libs/ardour/ardour/vca.h
+++ b/libs/ardour/ardour/vca.h
@@ -29,6 +29,7 @@
#include "ardour/automatable.h"
#include "ardour/muteable.h"
#include "ardour/soloable.h"
+#include "ardour/slavable.h"
#include "ardour/stripable.h"
namespace ARDOUR {
@@ -39,7 +40,7 @@ class SoloControl;
class MuteControl;
class MonitorControl;
-class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, public Automatable, public boost::enable_shared_from_this<VCA> {
+class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, public Automatable, public Slavable, public boost::enable_shared_from_this<VCA> {
public:
VCA (Session& session, uint32_t num, const std::string& name);
~VCA();
@@ -108,6 +109,10 @@ class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, pu
virtual std::string send_name (uint32_t n) const { return std::string(); }
virtual boost::shared_ptr<AutomationControl> master_send_enable_controllable () const { return boost::shared_ptr<AutomationControl>(); }
+ protected:
+ int assign_controls (boost::shared_ptr<VCA>);
+ int unassign_controls (boost::shared_ptr<VCA>);
+
private:
uint32_t _number;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 78e0228382..301c7ba5c0 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -86,10 +86,10 @@ PBD::Signal3<int,boost::shared_ptr<Route>, boost::shared_ptr<PluginInsert>, Rout
/** Base class for all routable/mixable objects (tracks and busses) */
Route::Route (Session& sess, string name, Flag flg, DataType default_type)
- : Stripable (sess, name)
+ : GraphNode (sess._process_graph)
+ , Stripable (sess, name)
, Muteable (sess, name)
, Automatable (sess)
- , GraphNode (sess._process_graph)
, _active (true)
, _signal_latency (0)
, _signal_latency_at_amp_position (0)
@@ -5447,16 +5447,18 @@ Route::slaved_to (boost::shared_ptr<VCA> vca) const
return _gain_control->slaved_to (vca->gain_control());
}
-void
-Route::vca_assign (boost::shared_ptr<VCA> vca)
+int
+Route::assign_controls (boost::shared_ptr<VCA> vca)
{
_gain_control->add_master (vca->gain_control());
_solo_control->add_master (vca->solo_control());
_mute_control->add_master (vca->mute_control());
+
+ return 0;
}
-void
-Route::vca_unassign (boost::shared_ptr<VCA> vca)
+int
+Route::unassign_controls (boost::shared_ptr<VCA> vca)
{
if (!vca) {
/* unassign from all */
@@ -5468,6 +5470,8 @@ Route::vca_unassign (boost::shared_ptr<VCA> vca)
_solo_control->remove_master (vca->solo_control());
_mute_control->remove_master (vca->mute_control());
}
+
+ return 0;
}
bool
diff --git a/libs/ardour/vca.cc b/libs/ardour/vca.cc
index 0e33dca6e2..2ab84d5570 100644
--- a/libs/ardour/vca.cc
+++ b/libs/ardour/vca.cc
@@ -152,3 +152,30 @@ VCA::clear_all_solo_state ()
{
_solo_control->clear_all_solo_state ();
}
+
+int
+VCA::assign_controls (boost::shared_ptr<VCA> vca)
+{
+ _gain_control->add_master (vca->gain_control());
+ _solo_control->add_master (vca->solo_control());
+ _mute_control->add_master (vca->mute_control());
+
+ return 0;
+}
+
+int
+VCA::unassign_controls (boost::shared_ptr<VCA> vca)
+{
+ if (!vca) {
+ /* unassign from all */
+ _gain_control->clear_masters ();
+ _solo_control->clear_masters ();
+ _mute_control->clear_masters ();
+ } else {
+ _gain_control->remove_master (vca->gain_control());
+ _solo_control->remove_master (vca->solo_control());
+ _mute_control->remove_master (vca->mute_control());
+ }
+
+ return 0;
+}
diff --git a/libs/ardour/wscript b/libs/ardour/wscript
index 17876f889b..9a9b650a66 100644
--- a/libs/ardour/wscript
+++ b/libs/ardour/wscript
@@ -211,6 +211,7 @@ libardour_sources = [
'session_transport.cc',
'sidechain.cc',
'slave.cc',
+ 'slavable.cc',
'slavable_automation_control.cc',
'smf_source.cc',
'sndfile_helpers.cc',