diff options
author | Carl Hetherington <carl@carlh.net> | 2011-02-20 00:55:32 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-02-20 00:55:32 +0000 |
commit | 13232d03f3e5f8a5d7d19392c26c27ce0327250c (patch) | |
tree | 8c7b3b49174595d75b9ca8e13d12d10aa7a3a318 /libs/ardour/ardour | |
parent | c77d116703647a72cd7d01c6735fa610a88171dd (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.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 41 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 9 |
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); |