summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-02-20 00:55:32 +0000
committerCarl Hetherington <carl@carlh.net>2011-02-20 00:55:32 +0000
commit13232d03f3e5f8a5d7d19392c26c27ce0327250c (patch)
tree8c7b3b49174595d75b9ca8e13d12d10aa7a3a318 /libs/ardour/ardour
parentc77d116703647a72cd7d01c6735fa610a88171dd (diff)
Modify route _processor list set up so that the logic for placing `invisible' processors (e.g. internal returns etc.) is in one place. Add option to get pre-fade listen from before or after pre-fade processors (#3781).
git-svn-id: svn://localhost/ardour2/branches/3.0@8903 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h1
-rw-r--r--libs/ardour/ardour/route.h41
-rw-r--r--libs/ardour/ardour/types.h9
3 files changed, 48 insertions, 3 deletions
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 92647947a2..e1030bafa0 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -84,6 +84,7 @@ CONFIG_VARIABLE (bool, mute_affects_control_outs, "mute-affects-control-outs", t
CONFIG_VARIABLE (bool, mute_affects_main_outs, "mute-affects-main-outs", true)
CONFIG_VARIABLE (MonitorModel, monitoring_model, "monitoring-model", ExternalMonitoring)
CONFIG_VARIABLE (ListenPosition, listen_position, "listen-position", AfterFaderListen)
+CONFIG_VARIABLE (PFLPosition, pfl_position, "pfl-position", PFLFromAfterProcessors)
CONFIG_VARIABLE (bool, use_monitor_bus, "use-monitor-bus", false)
CONFIG_VARIABLE (bool, solo_control_is_listen_control, "solo-control-is-listen-control", false)
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index e17dc775d1..defcc2c5c2 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -155,7 +155,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
bool solo_safe() const;
void set_listen (bool yn, void* src);
- bool listening () const;
+ bool listening_via_monitor () const;
void set_phase_invert (uint32_t, bool yn);
void set_phase_invert (boost::dynamic_bitset<>);
@@ -220,7 +220,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
void add_internal_return ();
BufferSet* get_return_buffer () const;
void release_return_buffer () const;
- void put_monitor_send_at (Placement);
+ void listen_position_changed ();
boost::shared_ptr<CapturingProcessor> add_export_point(/* Add some argument for placement later */);
/** A record of the stream configuration at some point in the processor list.
@@ -294,7 +294,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
PBD::Signal1<void,void*> SelectedChanged;
- int listen_via (boost::shared_ptr<Route>, Placement p, bool active, bool aux);
+ int listen_via_monitor ();
+ int listen_via (boost::shared_ptr<Route>, Placement p);
void drop_listen (boost::shared_ptr<Route>);
/**
@@ -508,6 +509,40 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
void set_processor_positions ();
void update_port_latencies (const PortSet& ports, const PortSet& feeders, bool playback, framecnt_t) const;
+
+ void setup_invisible_processors ();
+
+ boost::shared_ptr<CapturingProcessor> _capturing_processor;
+
+ /** A handy class to keep processor state while we attempt a reconfiguration
+ * that may fail.
+ */
+ class ProcessorState {
+ public:
+ ProcessorState (Route* r)
+ : _route (r)
+ , _processors (r->_processors)
+ , _processor_max_streams (r->processor_max_streams)
+ { }
+
+ void restore () {
+ _route->_processors = _processors;
+ _route->processor_max_streams = _processor_max_streams;
+ }
+
+ private:
+ /* this should perhaps be a shared_ptr, but ProcessorStates will
+ not hang around long enough for it to matter.
+ */
+ Route* _route;
+ ProcessorList _processors;
+ ChanCount _processor_max_streams;
+ };
+
+ friend class ProcessorState;
+
+ /* no copy construction */
+ Route (Route const &);
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 744c06f552..b03ba6b232 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -346,6 +346,13 @@ namespace ARDOUR {
ExternalMonitoring
};
+ enum PFLPosition {
+ /** PFL signals come from before pre-fader processors */
+ PFLFromBeforeProcessors,
+ /** PFL signals come pre-fader but after pre-fader processors */
+ PFLFromAfterProcessors
+ };
+
enum DenormalModel {
DenormalNone,
DenormalFTZ,
@@ -557,6 +564,7 @@ std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
std::istream& operator>>(std::istream& o, ARDOUR::RemoteModel& sf);
std::istream& operator>>(std::istream& o, ARDOUR::ListenPosition& sf);
std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
@@ -576,6 +584,7 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::RemoteModel& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::ListenPosition& sf);
std::ostream& operator<<(std::ostream& o, const ARDOUR::LayerModel& sf);