From 05bcdd1d4c583c68ed977164913ff47e94df7adb Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 27 Jun 2007 20:23:48 +0000 Subject: Renamed Insert to Processor and Redirect to IOProcessor. git-svn-id: svn://localhost/ardour2/trunk@2071 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/SConscript | 4 +- libs/ardour/ardour/automation_event.h | 2 +- libs/ardour/ardour/canvas_vars.h | 2 +- libs/ardour/ardour/insert.h | 113 -------- libs/ardour/ardour/io_processor.h | 85 ++++++ libs/ardour/ardour/meter.h | 6 +- libs/ardour/ardour/plugin_insert.h | 4 +- libs/ardour/ardour/port_insert.h | 6 +- libs/ardour/ardour/processor.h | 113 ++++++++ libs/ardour/ardour/redirect.h | 85 ------ libs/ardour/ardour/route.h | 114 ++++---- libs/ardour/ardour/send.h | 4 +- libs/ardour/ardour/session.h | 8 +- libs/ardour/ardour/track.h | 29 +- libs/ardour/audio_track.cc | 80 +++--- libs/ardour/automatable.cc | 7 +- libs/ardour/automation_event.cc | 2 - libs/ardour/insert.cc | 261 ------------------ libs/ardour/io_processor.cc | 107 ++++++++ libs/ardour/meter.cc | 2 +- libs/ardour/midi_track.cc | 34 +-- libs/ardour/plugin_insert.cc | 20 +- libs/ardour/port_insert.cc | 22 +- libs/ardour/processor.cc | 255 ++++++++++++++++++ libs/ardour/redirect.cc | 107 -------- libs/ardour/route.cc | 493 +++++++++++++++++----------------- libs/ardour/send.cc | 20 +- libs/ardour/session.cc | 24 +- libs/ardour/session_state.cc | 6 +- libs/ardour/session_transport.cc | 2 +- libs/ardour/track.cc | 8 +- 31 files changed, 1006 insertions(+), 1019 deletions(-) delete mode 100644 libs/ardour/ardour/insert.h create mode 100644 libs/ardour/ardour/io_processor.h create mode 100644 libs/ardour/ardour/processor.h delete mode 100644 libs/ardour/ardour/redirect.h delete mode 100644 libs/ardour/insert.cc create mode 100644 libs/ardour/io_processor.cc create mode 100644 libs/ardour/processor.cc delete mode 100644 libs/ardour/redirect.cc (limited to 'libs/ardour') diff --git a/libs/ardour/SConscript b/libs/ardour/SConscript index e2e84c386c..6374047c1f 100644 --- a/libs/ardour/SConscript +++ b/libs/ardour/SConscript @@ -77,7 +77,8 @@ gdither.cc globals.cc import.cc automatable.cc -insert.cc +processor.cc +io_processor.cc plugin_insert.cc port_insert.cc io.cc @@ -92,7 +93,6 @@ playlist_factory.cc plugin.cc plugin_manager.cc recent_sessions.cc -redirect.cc region.cc region_factory.cc reverse.cc diff --git a/libs/ardour/ardour/automation_event.h b/libs/ardour/ardour/automation_event.h index af1a3cb704..f76b12f41d 100644 --- a/libs/ardour/ardour/automation_event.h +++ b/libs/ardour/ardour/automation_event.h @@ -93,7 +93,7 @@ class AutomationList : public PBD::StatefulDestructible void reposition_for_rt_add (double when); void rt_add (double when, double value); void add (double when, double value); - /* this should be private but old-school automation loading needs it in IO/Redirect */ + /* this should be private but old-school automation loading needs it in IO/IOProcessor */ void fast_simple_add (double when, double value); void reset_range (double start, double end); diff --git a/libs/ardour/ardour/canvas_vars.h b/libs/ardour/ardour/canvas_vars.h index 35af35e2ac..2d9e7ae03c 100644 --- a/libs/ardour/ardour/canvas_vars.h +++ b/libs/ardour/ardour/canvas_vars.h @@ -9,7 +9,7 @@ CANVAS_VARIABLE(canvasvar_MidiBusBase, "midi bus base") CANVAS_VARIABLE(canvasvar_TimeStretchFill, "time-stretch-fill") CANVAS_VARIABLE(canvasvar_TimeStretchOutline, "time-stretch-outline") CANVAS_VARIABLE(canvasvar_AutomationLine, "automation line") -CANVAS_VARIABLE(canvasvar_RedirectAutomationLine, "redirect automation line") +CANVAS_VARIABLE(canvasvar_ProcessorAutomationLine, "processor automation line") CANVAS_VARIABLE(canvasvar_ControlPointFill, "control point fill") CANVAS_VARIABLE(canvasvar_ControlPointOutline, "control point outline") CANVAS_VARIABLE(canvasvar_EnteredControlPointOutline, "entered control point outline") diff --git a/libs/ardour/ardour/insert.h b/libs/ardour/ardour/insert.h deleted file mode 100644 index 3fc9fbd1e4..0000000000 --- a/libs/ardour/ardour/insert.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - Copyright (C) 2000 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __ardour_insert_h__ -#define __ardour_insert_h__ - -#include -#include -#include - -#include - -#include - -#include -#include -#include -#include -#include - - -class XMLNode; - -namespace ARDOUR { - -class Session; - -/* A mixer strip element - plugin, send, meter, etc. - */ -class Insert : public Automatable -{ - public: - static const string state_node_name; - - Insert(Session&, const string& name, Placement p); // TODO: remove placement in favour of sort key - - virtual ~Insert() { } - - static boost::shared_ptr clone (boost::shared_ptr); - - uint32_t sort_key() const { return _sort_key; } - void set_sort_key (uint32_t key); - - Placement placement() const { return _placement; } - void set_placement (Placement); - - bool active () const { return _active; } - void set_active (bool yn); - - bool get_next_ab_is_active () const { return _next_ab_is_active; } - void set_next_ab_is_active (bool yn) { _next_ab_is_active = yn; } - - virtual nframes_t latency() { return 0; } - - virtual void transport_stopped (nframes_t frame) {} - - virtual void set_block_size (nframes_t nframes) {} - - virtual void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) = 0; - virtual void silence (nframes_t nframes, nframes_t offset) {} - - virtual void activate () { _active = true; ActiveChanged.emit(); } - virtual void deactivate () { _active = false; ActiveChanged.emit(); } - - virtual bool configure_io (ChanCount in, ChanCount out) { _configured_input = in; return (_configured = true); } - - /* Act as a pass through, if not overridden */ - virtual bool can_support_input_configuration (ChanCount in) const { return true; } - virtual ChanCount output_for_input_configuration (ChanCount in) const { return in; } - virtual ChanCount output_streams() const { return _configured_input; } - virtual ChanCount input_streams () const { return _configured_input; } - - virtual XMLNode& state (bool full); - virtual XMLNode& get_state (void); - virtual int set_state (const XMLNode&); - - void *get_gui () const { return _gui; } - void set_gui (void *p) { _gui = p; } - - static sigc::signal InsertCreated; - - sigc::signal ActiveChanged; - sigc::signal PlacementChanged; - -protected: - bool _active; - bool _next_ab_is_active; - bool _configured; - ChanCount _configured_input; - Placement _placement; - uint32_t _sort_key; - void* _gui; /* generic, we don't know or care what this is */ -}; - -} // namespace ARDOUR - -#endif /* __ardour_insert_h__ */ diff --git a/libs/ardour/ardour/io_processor.h b/libs/ardour/ardour/io_processor.h new file mode 100644 index 0000000000..c6224969b9 --- /dev/null +++ b/libs/ardour/ardour/io_processor.h @@ -0,0 +1,85 @@ +/* + Copyright (C) 2001 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __ardour_redirect_h__ +#define __ardour_redirect_h__ + +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include + +using std::map; +using std::set; +using std::string; +using std::vector; + +class XMLNode; + +namespace ARDOUR { + +class Session; + +/** A mixer strip element (Processor) with Jack ports (IO). + */ +class IOProcessor : public Processor +{ + public: + IOProcessor (Session&, const string& name, Placement, + int input_min = -1, int input_max = -1, int output_min = -1, int output_max = -1); + IOProcessor (const IOProcessor&); + virtual ~IOProcessor (); + + virtual ChanCount output_streams() const { return _io->n_outputs(); } + virtual ChanCount input_streams () const { return _io->n_inputs(); } + virtual ChanCount natural_output_streams() const { return _io->n_outputs(); } + virtual ChanCount natural_input_streams () const { return _io->n_inputs(); } + + boost::shared_ptr io() { return _io; } + boost::shared_ptr io() const { return _io; } + + virtual void automation_snapshot (nframes_t now) { _io->automation_snapshot(now); } + + virtual void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) = 0; + void silence (nframes_t nframes, nframes_t offset); + + sigc::signal AutomationPlaybackChanged; + sigc::signal AutomationChanged; + + XMLNode& state (bool full_state); + int set_state (const XMLNode&); + + protected: + boost::shared_ptr _io; +}; + +} // namespace ARDOUR + +#endif /* __ardour_redirect_h__ */ diff --git a/libs/ardour/ardour/meter.h b/libs/ardour/ardour/meter.h index 7e0bf8ac53..c78cdebfb0 100644 --- a/libs/ardour/ardour/meter.h +++ b/libs/ardour/ardour/meter.h @@ -21,7 +21,7 @@ #include #include -#include +#include #include namespace ARDOUR { @@ -33,9 +33,9 @@ class Session; /** Meters peaks on the input and stores them for access. */ -class PeakMeter : public Insert { +class PeakMeter : public Processor { public: - PeakMeter(Session& s) : Insert(s, "meter", PreFader) {} + PeakMeter(Session& s) : Processor(s, "meter", PreFader) {} void reset (); void reset_max (); diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index df0460af84..ea8f78b62f 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include class XMLNode; @@ -40,7 +40,7 @@ class Plugin; /** Plugin inserts: send data through a plugin */ -class PluginInsert : public Insert +class PluginInsert : public Processor { public: PluginInsert (Session&, boost::shared_ptr, Placement); diff --git a/libs/ardour/ardour/port_insert.h b/libs/ardour/ardour/port_insert.h index 5d9cd583cb..1f366ae259 100644 --- a/libs/ardour/ardour/port_insert.h +++ b/libs/ardour/ardour/port_insert.h @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include @@ -37,10 +37,8 @@ namespace ARDOUR { class Session; /** Port inserts: send output to a Jack port, pick up input at a Jack port - * - * PortInsert IS-A Redirect IS-A Insert, IO */ -class PortInsert : public Redirect +class PortInsert : public IOProcessor { public: PortInsert (Session&, Placement); diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h new file mode 100644 index 0000000000..7d126e8e0c --- /dev/null +++ b/libs/ardour/ardour/processor.h @@ -0,0 +1,113 @@ +/* + Copyright (C) 2000 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __ardour_processor_h__ +#define __ardour_processor_h__ + +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + + +class XMLNode; + +namespace ARDOUR { + +class Session; + +/* A mixer strip element - plugin, send, meter, etc. + */ +class Processor : public Automatable +{ + public: + static const string state_node_name; + + Processor(Session&, const string& name, Placement p); // TODO: remove placement in favour of sort key + + virtual ~Processor() { } + + static boost::shared_ptr clone (boost::shared_ptr); + + uint32_t sort_key() const { return _sort_key; } + void set_sort_key (uint32_t key); + + Placement placement() const { return _placement; } + void set_placement (Placement); + + bool active () const { return _active; } + void set_active (bool yn); + + bool get_next_ab_is_active () const { return _next_ab_is_active; } + void set_next_ab_is_active (bool yn) { _next_ab_is_active = yn; } + + virtual nframes_t latency() { return 0; } + + virtual void transport_stopped (nframes_t frame) {} + + virtual void set_block_size (nframes_t nframes) {} + + virtual void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) = 0; + virtual void silence (nframes_t nframes, nframes_t offset) {} + + virtual void activate () { _active = true; ActiveChanged.emit(); } + virtual void deactivate () { _active = false; ActiveChanged.emit(); } + + virtual bool configure_io (ChanCount in, ChanCount out) { _configured_input = in; return (_configured = true); } + + /* Act as a pass through, if not overridden */ + virtual bool can_support_input_configuration (ChanCount in) const { return true; } + virtual ChanCount output_for_input_configuration (ChanCount in) const { return in; } + virtual ChanCount output_streams() const { return _configured_input; } + virtual ChanCount input_streams () const { return _configured_input; } + + virtual XMLNode& state (bool full); + virtual XMLNode& get_state (void); + virtual int set_state (const XMLNode&); + + void *get_gui () const { return _gui; } + void set_gui (void *p) { _gui = p; } + + static sigc::signal ProcessorCreated; + + sigc::signal ActiveChanged; + sigc::signal PlacementChanged; + +protected: + bool _active; + bool _next_ab_is_active; + bool _configured; + ChanCount _configured_input; + Placement _placement; + uint32_t _sort_key; + void* _gui; /* generic, we don't know or care what this is */ +}; + +} // namespace ARDOUR + +#endif /* __ardour_processor_h__ */ diff --git a/libs/ardour/ardour/redirect.h b/libs/ardour/ardour/redirect.h deleted file mode 100644 index bc12bb6a8a..0000000000 --- a/libs/ardour/ardour/redirect.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright (C) 2001 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __ardour_redirect_h__ -#define __ardour_redirect_h__ - -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include -#include - -using std::map; -using std::set; -using std::string; -using std::vector; - -class XMLNode; - -namespace ARDOUR { - -class Session; - -/** A mixer strip element (Insert) with Jack ports (IO). - */ -class Redirect : public Insert -{ - public: - Redirect (Session&, const string& name, Placement, - int input_min = -1, int input_max = -1, int output_min = -1, int output_max = -1); - Redirect (const Redirect&); - virtual ~Redirect (); - - virtual ChanCount output_streams() const { return _io->n_outputs(); } - virtual ChanCount input_streams () const { return _io->n_inputs(); } - virtual ChanCount natural_output_streams() const { return _io->n_outputs(); } - virtual ChanCount natural_input_streams () const { return _io->n_inputs(); } - - boost::shared_ptr io() { return _io; } - boost::shared_ptr io() const { return _io; } - - virtual void automation_snapshot (nframes_t now) { _io->automation_snapshot(now); } - - virtual void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) = 0; - void silence (nframes_t nframes, nframes_t offset); - - sigc::signal AutomationPlaybackChanged; - sigc::signal AutomationChanged; - - XMLNode& state (bool full_state); - int set_state (const XMLNode&); - - protected: - boost::shared_ptr _io; -}; - -} // namespace ARDOUR - -#endif /* __ardour_redirect_h__ */ diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 4f5f863fee..008d8ffcbb 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -39,12 +39,12 @@ #include #include #include -#include +#include #include namespace ARDOUR { -class Insert; +class Processor; class Send; class RouteGroup; @@ -59,7 +59,7 @@ class Route : public IO { protected: - typedef list > InsertList; + typedef list > ProcessorList; public: @@ -100,7 +100,7 @@ class Route : public IO virtual bool can_record() { return false; } virtual void set_record_enable (bool yn, void *src) {} virtual bool record_enabled() const { return false; } - virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_inserts); + virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors); virtual void set_pending_declick (int); /* end of vfunc-based API */ @@ -137,54 +137,54 @@ class Route : public IO virtual void set_meter_point (MeterPoint, void *src); MeterPoint meter_point() const { return _meter_point; } - /* Inserts */ + /* Processors */ - void flush_inserts (); + void flush_processors (); - template void foreach_insert (T *obj, void (T::*func)(boost::shared_ptr)) { - Glib::RWLock::ReaderLock lm (insert_lock); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + template void foreach_processor (T *obj, void (T::*func)(boost::shared_ptr)) { + Glib::RWLock::ReaderLock lm (_processor_lock); + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (obj->*func) (*i); } } - boost::shared_ptr nth_insert (uint32_t n) { - Glib::RWLock::ReaderLock lm (insert_lock); - InsertList::iterator i; - for (i = _inserts.begin(); i != _inserts.end() && n; ++i, --n); - if (i == _inserts.end()) { - return boost::shared_ptr (); + boost::shared_ptr nth_processor (uint32_t n) { + Glib::RWLock::ReaderLock lm (_processor_lock); + ProcessorList::iterator i; + for (i = _processors.begin(); i != _processors.end() && n; ++i, --n); + if (i == _processors.end()) { + return boost::shared_ptr (); } else { return *i; } } - ChanCount max_insert_outs () const { return insert_max_outs; } + ChanCount max_processor_outs () const { return processor_max_outs; } ChanCount pre_fader_streams() const; - /** A record of the stream configuration at some point in the insert list. - * Used to return where and why an insert list configuration request failed. + /** A record of the stream configuration at some point in the processor list. + * Used to return where and why an processor list configuration request failed. */ - struct InsertStreams { - InsertStreams(size_t i=0, ChanCount c=ChanCount()) : index(i), count(c) {} + struct ProcessorStreams { + ProcessorStreams(size_t i=0, ChanCount c=ChanCount()) : index(i), count(c) {} - size_t index; ///< Index of insert where configuration failed - ChanCount count; ///< Input requested of insert + size_t index; ///< Index of processor where configuration failed + ChanCount count; ///< Input requested of processor }; - int add_insert (boost::shared_ptr, InsertStreams* err = 0); - int add_inserts (const InsertList&, InsertStreams* err = 0); - int remove_insert (boost::shared_ptr, InsertStreams* err = 0); - int copy_inserts (const Route&, Placement, InsertStreams* err = 0); - int sort_inserts (InsertStreams* err = 0); - void disable_inserts (Placement); - void disable_inserts (); + int add_processor (boost::shared_ptr, ProcessorStreams* err = 0); + int add_processors (const ProcessorList&, ProcessorStreams* err = 0); + int remove_processor (boost::shared_ptr, ProcessorStreams* err = 0); + int copy_processors (const Route&, Placement, ProcessorStreams* err = 0); + int sort_processors (ProcessorStreams* err = 0); + void disable_processors (Placement); + void disable_processors (); void disable_plugins (Placement); void disable_plugins (); void ab_plugins (bool forward); - void clear_inserts (Placement); - void all_inserts_flip(); - void all_inserts_active (Placement, bool state); + void clear_processors (Placement); + void all_processors_flip(); + void all_processors_active (Placement, bool state); virtual nframes_t update_total_latency(); nframes_t signal_latency() const { return _own_latency; } @@ -198,7 +198,7 @@ class Route : public IO sigc::signal post_fader_changed; sigc::signal control_outs_changed; sigc::signal main_outs_changed; - sigc::signal inserts_changed; + sigc::signal processors_changed; sigc::signal record_enable_changed; sigc::signal edit_group_changed; sigc::signal mix_group_changed; @@ -215,8 +215,8 @@ class Route : public IO int set_state(const XMLNode& node); virtual XMLNode& get_template(); - XMLNode& get_insert_state (); - int set_insert_state (const XMLNode&); + XMLNode& get_processor_state (); + int set_processor_state (const XMLNode&); sigc::signal SelectedChanged; @@ -290,29 +290,31 @@ class Route : public IO gain_t desired_solo_gain; gain_t desired_mute_gain; - nframes_t check_initial_delay (nframes_t, nframes_t&, nframes_t&); + nframes_t _initial_delay; nframes_t _roll_delay; nframes_t _own_latency; - InsertList _inserts; - Glib::RWLock insert_lock; - IO *_control_outs; - Glib::Mutex control_outs_lock; - RouteGroup *_edit_group; - RouteGroup *_mix_group; - std::string _comment; - bool _have_internal_generator; + ProcessorList _processors; + Glib::RWLock _processor_lock; + IO *_control_outs; + Glib::Mutex _control_outs_lock; + RouteGroup *_edit_group; + RouteGroup *_mix_group; + std::string _comment; + bool _have_internal_generator; ToggleControllable _solo_control; ToggleControllable _mute_control; + nframes_t check_initial_delay (nframes_t, nframes_t&, nframes_t&); + void passthru (nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset, int declick, bool meter_inputs); virtual void process_output_buffers (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, - nframes_t nframes, nframes_t offset, bool with_inserts, int declick, + nframes_t nframes, nframes_t offset, bool with_processors, int declick, bool meter); protected: @@ -327,14 +329,14 @@ class Route : public IO sigc::connection input_signal_connection; - ChanCount insert_max_outs; + ChanCount processor_max_outs; uint32_t _remote_control_id; uint32_t pans_required() const; ChanCount n_process_buffers (); virtual int _set_state (const XMLNode&, bool call_base); - virtual void _set_insert_states (const XMLNodeList&); + virtual void _set_processor_states (const XMLNodeList&); private: void init (); @@ -355,24 +357,24 @@ class Route : public IO void input_change_handler (IOChange, void *src); void output_change_handler (IOChange, void *src); - int reset_plugin_counts (InsertStreams*); /* locked */ - int _reset_plugin_counts (InsertStreams*); /* unlocked */ + int reset_plugin_counts (ProcessorStreams*); /* locked */ + int _reset_plugin_counts (ProcessorStreams*); /* unlocked */ - /* insert I/O channels and plugin count handling */ + /* processor I/O channels and plugin count handling */ - struct InsertCount { - boost::shared_ptr insert; + struct ProcessorCount { + boost::shared_ptr processor; ChanCount in; ChanCount out; - InsertCount (boost::shared_ptr ins) : insert(ins) {} + ProcessorCount (boost::shared_ptr ins) : processor(ins) {} }; - int32_t apply_some_plugin_counts (std::list& iclist); - bool check_some_plugin_counts (std::list& iclist, ChanCount required_inputs, InsertStreams* err_streams); + int32_t apply_some_plugin_counts (std::list& iclist); + bool check_some_plugin_counts (std::list& iclist, ChanCount required_inputs, ProcessorStreams* err_streams); void set_deferred_state (); - void add_insert_from_xml (const XMLNode&); + void add_processor_from_xml (const XMLNode&); }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/send.h b/libs/ardour/ardour/send.h index dc509514e2..26d0351bb2 100644 --- a/libs/ardour/ardour/send.h +++ b/libs/ardour/ardour/send.h @@ -28,11 +28,11 @@ #include #include #include -#include +#include namespace ARDOUR { -class Send : public Redirect +class Send : public IOProcessor { public: Send (Session&, Placement); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 9001196b60..3a4a21cb8a 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -87,9 +87,9 @@ class MidiDiskstream; class AudioFileSource; class MidiSource; class Auditioner; -class Insert; +class Processor; class Send; -class Redirect; +class IOProcessor; class PortInsert; class PluginInsert; class Bundle; @@ -1519,8 +1519,8 @@ class Session : public PBD::StatefulDestructible uint32_t insert_cnt; - void add_insert (Insert *); - void remove_insert (Insert *); + void add_processor (Processor *); + void remove_processor (Processor *); /* S/W RAID */ diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index 5d87a13886..06ce398896 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -103,14 +103,14 @@ class Track : public Route TrackMode _mode; //private: (FIXME) - struct FreezeRecordInsertInfo { - FreezeRecordInsertInfo(XMLNode& st, boost::shared_ptr ins) - : state (st), insert (ins) {} - - XMLNode state; - boost::shared_ptr insert; - PBD::ID id; - UndoAction memento; + struct FreezeRecordProcessorInfo { + FreezeRecordProcessorInfo(XMLNode& st, boost::shared_ptr proc) + : state (st), processor (proc) {} + + XMLNode state; + boost::shared_ptr processor; + PBD::ID id; + UndoAction memento; }; struct FreezeRecord { @@ -120,10 +120,10 @@ class Track : public Route ~FreezeRecord(); - boost::shared_ptr playlist; - vector insert_info; - bool have_mementos; - FreezeState state; + boost::shared_ptr playlist; + vector processor_info; + bool have_mementos; + FreezeState state; }; struct RecEnableControllable : public PBD::Controllable { @@ -135,11 +135,6 @@ class Track : public Route Track& track; }; - //virtual void diskstream_record_enable_changed (void *src) = 0; - //virtual void diskstream_input_channel_changed (void *src) = 0; - - //virtual void input_change_handler (void *src) = 0; - virtual void set_state_part_two () = 0; FreezeRecord _freeze_record; diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index 151b434c6b..9f13aee465 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -27,12 +27,12 @@ #include #include #include -#include +#include #include #include #include #include -#include +#include #include #include #include @@ -304,8 +304,8 @@ AudioTrack::state(bool full_state) freeze_node->add_property ("playlist", _freeze_record.playlist->name()); freeze_node->add_property ("state", enum_2_string (_freeze_record.state)); - for (vector::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) { - inode = new XMLNode (X_("insert")); + for (vector::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) { + inode = new XMLNode (X_("processor")); (*i)->id.print (buf, sizeof (buf)); inode->add_property (X_("id"), buf); inode->add_child_copy ((*i)->state); @@ -360,10 +360,10 @@ AudioTrack::set_state_part_two () _freeze_record.have_mementos = false; _freeze_record.state = Frozen; - for (vector::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) { + for (vector::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) { delete *i; } - _freeze_record.insert_info.clear (); + _freeze_record.processor_info.clear (); if ((prop = fnode->property (X_("playlist"))) != 0) { boost::shared_ptr pl = _session.playlist_by_name (prop->value()); @@ -384,7 +384,7 @@ AudioTrack::set_state_part_two () XMLNodeList clist = fnode->children(); for (citer = clist.begin(); citer != clist.end(); ++citer) { - if ((*citer)->name() != X_("insert")) { + if ((*citer)->name() != X_("processor")) { continue; } @@ -392,10 +392,10 @@ AudioTrack::set_state_part_two () continue; } - FreezeRecordInsertInfo* frii = new FreezeRecordInsertInfo (*((*citer)->children().front()), - boost::shared_ptr()); + FreezeRecordProcessorInfo* frii = new FreezeRecordProcessorInfo (*((*citer)->children().front()), + boost::shared_ptr()); frii->id = prop->value (); - _freeze_record.insert_info.push_back (frii); + _freeze_record.processor_info.push_back (frii); } } @@ -515,7 +515,7 @@ AudioTrack::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, boost::shared_ptr diskstream = audio_diskstream(); { - Glib::RWLock::ReaderLock lm (insert_lock, Glib::TRY_LOCK); + Glib::RWLock::ReaderLock lm (_processor_lock, Glib::TRY_LOCK); if (lm.locked()) { // automation snapshot can also be called from the non-rt context // and it uses the redirect list, so we take the lock out here @@ -524,7 +524,7 @@ AudioTrack::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, } - if (n_outputs().n_total() == 0 && _inserts.empty()) { + if (n_outputs().n_total() == 0 && _processors.empty()) { return 0; } @@ -620,7 +620,7 @@ int AudioTrack::silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset, bool can_record, bool rec_monitors_input) { - if (n_outputs().n_total() == 0 && _inserts.empty()) { + if (n_outputs().n_total() == 0 && _processors.empty()) { return 0; } @@ -643,12 +643,12 @@ AudioTrack::export_stuff (BufferSet& buffers, nframes_t start, nframes_t nframes gain_t gain_automation[nframes]; gain_t gain_buffer[nframes]; float mix_buffer[nframes]; - InsertList::iterator i; + ProcessorList::iterator i; bool post_fader_work = false; gain_t this_gain = _gain; boost::shared_ptr diskstream = audio_diskstream(); - Glib::RWLock::ReaderLock rlock (insert_lock); + Glib::RWLock::ReaderLock rlock (_processor_lock); boost::shared_ptr apl = boost::dynamic_pointer_cast(diskstream->playlist()); assert(apl); @@ -677,17 +677,17 @@ AudioTrack::export_stuff (BufferSet& buffers, nframes_t start, nframes_t nframes } - /* note: only run inserts during export. other layers in the machinery - will already have checked that there are no external port inserts. + /* note: only run processors during export. other layers in the machinery + will already have checked that there are no external port processors. */ - for (i = _inserts.begin(); i != _inserts.end(); ++i) { - boost::shared_ptr insert; + for (i = _processors.begin(); i != _processors.end(); ++i) { + boost::shared_ptr processor; - if ((insert = boost::dynamic_pointer_cast(*i)) != 0) { - switch (insert->placement()) { + if ((processor = boost::dynamic_pointer_cast(*i)) != 0) { + switch (processor->placement()) { case PreFader: - insert->run (buffers, start, start+nframes, nframes, 0); + processor->run (buffers, start, start+nframes, nframes, 0); break; case PostFader: post_fader_work = true; @@ -719,15 +719,15 @@ AudioTrack::export_stuff (BufferSet& buffers, nframes_t start, nframes_t nframes if (post_fader_work) { - for (i = _inserts.begin(); i != _inserts.end(); ++i) { - boost::shared_ptr insert; + for (i = _processors.begin(); i != _processors.end(); ++i) { + boost::shared_ptr processor; - if ((insert = boost::dynamic_pointer_cast(*i)) != 0) { + if ((processor = boost::dynamic_pointer_cast(*i)) != 0) { switch ((*i)->placement()) { case PreFader: break; case PostFader: - insert->run (buffers, start, start+nframes, nframes, 0); + processor->run (buffers, start, start+nframes, nframes, 0); break; } } @@ -796,27 +796,27 @@ AudioTrack::freeze (InterThreadInfo& itt) return; } - _freeze_record.insert_info.clear (); + _freeze_record.processor_info.clear (); _freeze_record.have_mementos = true; { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - for (InsertList::iterator r = _inserts.begin(); r != _inserts.end(); ++r) { + for (ProcessorList::iterator r = _processors.begin(); r != _processors.end(); ++r) { - boost::shared_ptr insert; + boost::shared_ptr processor; - if ((insert = boost::dynamic_pointer_cast(*r)) != 0) { + if ((processor = boost::dynamic_pointer_cast(*r)) != 0) { - FreezeRecordInsertInfo* frii = new FreezeRecordInsertInfo ((*r)->get_state(), insert); + FreezeRecordProcessorInfo* frii = new FreezeRecordProcessorInfo ((*r)->get_state(), processor); - frii->id = insert->id(); + frii->id = processor->id(); - _freeze_record.insert_info.push_back (frii); + _freeze_record.processor_info.push_back (frii); - /* now deactivate the insert */ + /* now deactivate the processor */ - insert->set_active (false); + processor->set_active (false); _session.set_dirty (); } } @@ -852,15 +852,15 @@ AudioTrack::unfreeze () if (_freeze_record.have_mementos) { - for (vector::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) { + for (vector::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) { (*i)->memento (); } } else { - Glib::RWLock::ReaderLock lm (insert_lock); // should this be a write lock? jlc - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { - for (vector::iterator ii = _freeze_record.insert_info.begin(); ii != _freeze_record.insert_info.end(); ++ii) { + Glib::RWLock::ReaderLock lm (_processor_lock); // should this be a write lock? jlc + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { + for (vector::iterator ii = _freeze_record.processor_info.begin(); ii != _freeze_record.processor_info.end(); ++ii) { if ((*ii)->id == (*i)->id()) { (*i)->set_state (((*ii)->state)); break; diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index 40ab7af769..9f3ba6deb6 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -122,8 +122,7 @@ Automatable::add_automation_parameter(AutomationList* al) /* let derived classes do whatever they need with this */ automation_list_creation_callback (al->param_id(), *al); - cerr << _name << ": added (visible, can_automate) parameter " << al->param_id().to_string() << ", # params = " - << _parameter_automation.size() << endl; + cerr << _name << ": added parameter " << al->param_id().to_string() << endl; // FIXME: sane default behaviour? _visible_parameter_automation.insert(al->param_id()); @@ -168,7 +167,7 @@ Automatable::automation_list (ParamID parameter, bool create_if_missing) return al; } else { - warning << "AutomationList " << parameter.to_string() << " not found for " << _name << endmsg; + //warning << "AutomationList " << parameter.to_string() << " not found for " << _name << endmsg; return NULL; } } @@ -181,7 +180,7 @@ Automatable::automation_list (ParamID parameter) const if (i != _parameter_automation.end()) { return i->second; } else { - warning << "AutomationList " << parameter.to_string() << " not found for " << _name << endmsg; + //warning << "AutomationList " << parameter.to_string() << " not found for " << _name << endmsg; return NULL; } } diff --git a/libs/ardour/automation_event.cc b/libs/ardour/automation_event.cc index 82d3e457cb..b620054558 100644 --- a/libs/ardour/automation_event.cc +++ b/libs/ardour/automation_event.cc @@ -1372,8 +1372,6 @@ AutomationList::set_state (const XMLNode& node) warning << "Legacy session: automation list has no automation-id property."; } - cerr << "Loaded automation " << _param_id.to_string() << endl; - if ((prop = node.property (X_("default"))) != 0){ _default_value = atof (prop->value()); } else { diff --git a/libs/ardour/insert.cc b/libs/ardour/insert.cc deleted file mode 100644 index 1e73c398c2..0000000000 --- a/libs/ardour/insert.cc +++ /dev/null @@ -1,261 +0,0 @@ -/* - Copyright (C) 2000 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef VST_SUPPORT -#include -#endif - -#ifdef HAVE_AUDIOUNITS -#include -#endif - -#include -#include -#include - -#include "i18n.h" - -using namespace std; -using namespace ARDOUR; -using namespace PBD; - -sigc::signal Insert::InsertCreated; - -// Always saved as Insert, but may be Redirect or Send in legacy sessions -const string Insert::state_node_name = "Insert"; - -Insert::Insert(Session& session, const string& name, Placement p) - : Automatable(session, name) - , _active(false) - , _next_ab_is_active(false) - , _configured(false) - , _placement(p) - , _gui(0) -{ -} - -boost::shared_ptr -Insert::clone (boost::shared_ptr other) -{ - boost::shared_ptr send; - boost::shared_ptr port_insert; - boost::shared_ptr plugin_insert; - - if ((send = boost::dynamic_pointer_cast(other)) != 0) { - return boost::shared_ptr (new Send (*send)); - } else if ((port_insert = boost::dynamic_pointer_cast(other)) != 0) { - return boost::shared_ptr (new PortInsert (*port_insert)); - } else if ((plugin_insert = boost::dynamic_pointer_cast(other)) != 0) { - return boost::shared_ptr (new PluginInsert (*plugin_insert)); - } else { - fatal << _("programming error: unknown Insert type in Insert::Clone!\n") - << endmsg; - /*NOTREACHED*/ - } - return boost::shared_ptr(); -} - -void -Insert::set_sort_key (uint32_t key) -{ - _sort_key = key; -} - -void -Insert::set_placement (Placement p) -{ - if (_placement != p) { - _placement = p; - PlacementChanged (); /* EMIT SIGNAL */ - } -} - -void -Insert::set_active (bool yn) -{ - _active = yn; - ActiveChanged (); -} - -XMLNode& -Insert::get_state (void) -{ - return state (true); -} - -/* NODE STRUCTURE - - - - - - X1 Y1 - X2 Y2 - .... - - - -*/ - -XMLNode& -Insert::state (bool full_state) -{ - XMLNode* node = new XMLNode (state_node_name); - stringstream sstr; - - // FIXME: This conflicts with "id" used by plugin for name in legacy sessions (ugh). - // Do we need to serialize this? - /* - char buf[64]; - id().print (buf, sizeof (buf)); - node->add_property("id", buf); - */ - - node->add_property("name", _name); - node->add_property("active", active() ? "yes" : "no"); - node->add_property("placement", enum_2_string (_placement)); - - if (_extra_xml){ - node->add_child_copy (*_extra_xml); - } - - if (full_state) { - - XMLNode& automation = Automatable::get_automation_state(); - - for (set::iterator x = _visible_parameter_automation.begin(); x != _visible_parameter_automation.end(); ++x) { - if (x != _visible_parameter_automation.begin()) { - sstr << ' '; - } - sstr << *x; - } - - automation.add_property ("visible", sstr.str()); - - node->add_child_nocopy (automation); - } - - return *node; -} - -int -Insert::set_state (const XMLNode& node) -{ - const XMLProperty *prop; - - // may not exist for legacy sessions - if ((prop = node.property ("name")) != 0) { - set_name(prop->value()); - } - - XMLNodeList nlist = node.children(); - XMLNodeIterator niter; - bool have_io = false; - - for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - - if ((*niter)->name() == X_("Automation")) { - - - XMLProperty *prop; - - if ((prop = (*niter)->property ("path")) != 0) { - old_set_automation_state (*(*niter)); - } else { - set_automation_state (*(*niter), ParamID(PluginAutomation)); - } - - if ((prop = (*niter)->property ("visible")) != 0) { - uint32_t what; - stringstream sstr; - - _visible_parameter_automation.clear (); - - sstr << prop->value(); - while (1) { - sstr >> what; - if (sstr.fail()) { - break; - } - // FIXME: other automation types? - mark_automation_visible (ParamID(PluginAutomation, what), true); - } - } - - } else if ((*niter)->name() == "extra") { - _extra_xml = new XMLNode (*(*niter)); - } - } - - if (!have_io && dynamic_cast(this)) { - error << _("XML node describing a redirect is missing an IO node") << endmsg; - return -1; - } - - if ((prop = node.property ("active")) == 0) { - error << _("XML node describing an insert is missing the `active' field") << endmsg; - return -1; - } - - if (_active != (prop->value() == "yes")) { - _active = !_active; - ActiveChanged (); /* EMIT_SIGNAL */ - } - - if ((prop = node.property ("placement")) == 0) { - error << _("XML node describing an insert is missing the `placement' field") << endmsg; - return -1; - } - - /* hack to handle older sessions before we only used EnumWriter */ - - string pstr; - - if (prop->value() == "pre") { - pstr = "PreFader"; - } else if (prop->value() == "post") { - pstr = "PostFader"; - } else { - pstr = prop->value(); - } - - Placement p = Placement (string_2_enum (pstr, p)); - set_placement (p); - - return 0; -} - diff --git a/libs/ardour/io_processor.cc b/libs/ardour/io_processor.cc new file mode 100644 index 0000000000..9802c83330 --- /dev/null +++ b/libs/ardour/io_processor.cc @@ -0,0 +1,107 @@ +/* + Copyright (C) 2001 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "i18n.h" + +using namespace std; +using namespace ARDOUR; +using namespace PBD; + +IOProcessor::IOProcessor (Session& s, const string& name, Placement p, + int input_min, int input_max, + int output_min, int output_max) + : Processor(s, name, p) + , _io(new IO(s, name, input_min, input_max, output_min, output_max)) +{ + _active = false; + _sort_key = 0; + _gui = 0; + _extra_xml = 0; +} + +IOProcessor::~IOProcessor () +{ + notify_callbacks (); +} + +XMLNode& +IOProcessor::state (bool full_state) +{ + XMLNode& node = Processor::state(full_state); + + node.add_child_nocopy (_io->state (full_state)); + + return node; +} + +int +IOProcessor::set_state (const XMLNode& node) +{ + const XMLProperty *prop; + + Processor::set_state(node); + + XMLNodeList nlist = node.children(); + XMLNodeIterator niter; + bool have_io = false; + + for (niter = nlist.begin(); niter != nlist.end(); ++niter) { + if ((*niter)->name() == IO::state_node_name) { + have_io = true; + _io->set_state(**niter); + + // legacy sessions: use IO name + if ((prop = node.property ("name")) == 0) { + set_name(_io->name()); + } + } + } + + if (!have_io) { + error << _("XML node describing a redirect is missing an IO node") << endmsg; + return -1; + } + + return 0; +} + +void +IOProcessor::silence (nframes_t nframes, nframes_t offset) +{ + _io->silence(nframes, offset); +} diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc index a7a287e9c1..fb8dafbc7b 100644 --- a/libs/ardour/meter.cc +++ b/libs/ardour/meter.cc @@ -118,7 +118,7 @@ PeakMeter::configure_io (ChanCount in, ChanCount out) assert(_visible_peak_power.size() == limit); assert(_max_peak_power.size() == limit); - Insert::configure_io(in, out); + Processor::configure_io(in, out); return true; } diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 3385727f0e..71a2735606 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -26,11 +26,11 @@ #include #include #include -#include +#include #include #include #include -#include +#include #include #include #include @@ -219,8 +219,8 @@ MidiTrack::state(bool full_state) freeze_node->add_property ("playlist", _freeze_record.playlist->name()); freeze_node->add_property ("state", enum_2_string (_freeze_record.state)); - for (vector::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) { - inode = new XMLNode (X_("insert")); + for (vector::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) { + inode = new XMLNode (X_("processor")); (*i)->id.print (buf, sizeof(buf)); inode->add_property (X_("id"), buf); inode->add_child_copy ((*i)->state); @@ -275,10 +275,10 @@ MidiTrack::set_state_part_two () _freeze_record.have_mementos = false; _freeze_record.state = Frozen; - for (vector::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) { + for (vector::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) { delete *i; } - _freeze_record.insert_info.clear (); + _freeze_record.processor_info.clear (); if ((prop = fnode->property (X_("playlist"))) != 0) { boost::shared_ptr pl = _session.playlist_by_name (prop->value()); @@ -299,7 +299,7 @@ MidiTrack::set_state_part_two () XMLNodeList clist = fnode->children(); for (citer = clist.begin(); citer != clist.end(); ++citer) { - if ((*citer)->name() != X_("insert")) { + if ((*citer)->name() != X_("processor")) { continue; } @@ -307,10 +307,10 @@ MidiTrack::set_state_part_two () continue; } - FreezeRecordInsertInfo* frii = new FreezeRecordInsertInfo (*((*citer)->children().front()), - boost::shared_ptr()); + FreezeRecordProcessorInfo* frii = new FreezeRecordProcessorInfo (*((*citer)->children().front()), + boost::shared_ptr()); frii->id = prop->value (); - _freeze_record.insert_info.push_back (frii); + _freeze_record.processor_info.push_back (frii); } } @@ -427,7 +427,7 @@ MidiTrack::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, int dret; boost::shared_ptr diskstream = midi_diskstream(); - if (n_outputs().n_total() == 0 && _inserts.empty()) { + if (n_outputs().n_total() == 0 && _processors.empty()) { return 0; } @@ -498,7 +498,7 @@ int MidiTrack::silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset, bool can_record, bool rec_monitors_input) { - if (n_outputs().n_midi() == 0 && _inserts.empty()) { + if (n_outputs().n_midi() == 0 && _processors.empty()) { return 0; } @@ -518,7 +518,7 @@ MidiTrack::silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_ void MidiTrack::process_output_buffers (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, - nframes_t nframes, nframes_t offset, bool with_inserts, int declick, + nframes_t nframes, nframes_t offset, bool with_processors, int declick, bool meter) { /* There's no such thing as a MIDI bus for the time being. @@ -529,11 +529,11 @@ MidiTrack::process_output_buffers (BufferSet& bufs, _meter->run(bufs, start_frame, end_frame, nframes, offset); } - // Run all inserts - if (with_inserts) { - Glib::RWLock::ReaderLock rm (insert_lock, Glib::TRY_LOCK); + // Run all processors + if (with_processors) { + Glib::RWLock::ReaderLock rm (_processor_lock, Glib::TRY_LOCK); if (rm.locked()) { - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->run (bufs, start_frame, end_frame, nframes, offset); } } diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 1b0130fc37..0ec5dde0db 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -53,7 +53,7 @@ using namespace PBD; const string PluginInsert::port_automation_node_name = "PortAutomation"; PluginInsert::PluginInsert (Session& s, boost::shared_ptr plug, Placement placement) - : Insert (s, plug->name(), placement) + : Processor (s, plug->name(), placement) { /* the first is the master */ @@ -68,11 +68,11 @@ PluginInsert::PluginInsert (Session& s, boost::shared_ptr plug, Placemen IO::MoreChannels (max(input_streams(), output_streams())); } - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } PluginInsert::PluginInsert (Session& s, const XMLNode& node) - : Insert (s, "unnamed plugin insert", PreFader) + : Processor (s, "unnamed plugin insert", PreFader) { if (set_state (node)) { throw failed_constructor(); @@ -89,7 +89,7 @@ PluginInsert::PluginInsert (Session& s, const XMLNode& node) } PluginInsert::PluginInsert (const PluginInsert& other) - : Insert (other._session, other._name, other.placement()) + : Processor (other._session, other._name, other.placement()) { uint32_t count = other._plugins.size(); @@ -103,7 +103,7 @@ PluginInsert::PluginInsert (const PluginInsert& other) init (); - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } bool @@ -496,7 +496,7 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) } else { bool success = set_count (count_for_configuration(in, out)); if (success) - Insert::configure_io(in, out); + Processor::configure_io(in, out); return success; } } @@ -634,7 +634,7 @@ XMLNode& PluginInsert::state (bool full) { char buf[256]; - XMLNode& node = Insert::state (full); + XMLNode& node = Processor::state (full); node.add_property ("type", _plugins[0]->state_node_name()); snprintf(buf, sizeof(buf), "%s", _plugins[0]->name()); @@ -745,15 +745,15 @@ PluginInsert::set_state(const XMLNode& node) const XMLNode* insert_node = &node; - // legacy sessions: search for child Redirect node + // legacy sessions: search for child IOProcessor node for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - if ((*niter)->name() == "Redirect") { + if ((*niter)->name() == "IOProcessor") { insert_node = *niter; break; } } - Insert::set_state (*insert_node); + Processor::set_state (*insert_node); /* look for port automation node */ diff --git a/libs/ardour/port_insert.cc b/libs/ardour/port_insert.cc index 51bf8fb0fb..0c12c0ed2c 100644 --- a/libs/ardour/port_insert.cc +++ b/libs/ardour/port_insert.cc @@ -41,17 +41,17 @@ using namespace ARDOUR; using namespace PBD; PortInsert::PortInsert (Session& s, Placement p) - : Redirect (s, string_compose (_("insert %1"), (bitslot = s.next_insert_id()) + 1), p, 1, -1, 1, -1) + : IOProcessor (s, string_compose (_("insert %1"), (bitslot = s.next_insert_id()) + 1), p, 1, -1, 1, -1) { init (); - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } PortInsert::PortInsert (const PortInsert& other) - : Redirect (other._session, string_compose (_("insert %1"), (bitslot = other._session.next_insert_id()) + 1), other.placement(), 1, -1, 1, -1) + : IOProcessor (other._session, string_compose (_("insert %1"), (bitslot = other._session.next_insert_id()) + 1), other.placement(), 1, -1, 1, -1) { init (); - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } void @@ -69,13 +69,13 @@ PortInsert::init () } PortInsert::PortInsert (Session& s, const XMLNode& node) - : Redirect (s, "unnamed port insert", PreFader) + : IOProcessor (s, "unnamed port insert", PreFader) { if (set_state (node)) { throw failed_constructor(); } - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } PortInsert::~PortInsert () @@ -110,7 +110,7 @@ PortInsert::get_state(void) XMLNode& PortInsert::state (bool full) { - XMLNode& node = Redirect::state(full); + XMLNode& node = IOProcessor::state(full); char buf[32]; node.add_property ("type", "port"); snprintf (buf, sizeof (buf), "%" PRIu32, bitslot); @@ -146,15 +146,15 @@ PortInsert::set_state(const XMLNode& node) const XMLNode* insert_node = &node; - // legacy sessions: search for child Redirect node + // legacy sessions: search for child IOProcessor node for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - if ((*niter)->name() == "Redirect") { + if ((*niter)->name() == "IOProcessor") { insert_node = *niter; break; } } - Redirect::set_state (*insert_node); + IOProcessor::set_state (*insert_node); return 0; } @@ -227,7 +227,7 @@ PortInsert::configure_io (ChanCount in, ChanCount out) bool success = (_io->ensure_io (out, in, false, this) == 0); if (success) - return Insert::configure_io(in, out); + return Processor::configure_io(in, out); else return false; } diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc new file mode 100644 index 0000000000..b192eb85c1 --- /dev/null +++ b/libs/ardour/processor.cc @@ -0,0 +1,255 @@ +/* + Copyright (C) 2000 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef VST_SUPPORT +#include +#endif + +#ifdef HAVE_AUDIOUNITS +#include +#endif + +#include +#include +#include + +#include "i18n.h" + +using namespace std; +using namespace ARDOUR; +using namespace PBD; + +sigc::signal Processor::ProcessorCreated; + +// Always saved as Processor, but may be IOProcessor or Send in legacy sessions +const string Processor::state_node_name = "Processor"; + +Processor::Processor(Session& session, const string& name, Placement p) + : Automatable(session, name) + , _active(false) + , _next_ab_is_active(false) + , _configured(false) + , _placement(p) + , _gui(0) +{ +} + +boost::shared_ptr +Processor::clone (boost::shared_ptr other) +{ + boost::shared_ptr send; + boost::shared_ptr port_insert; + boost::shared_ptr plugin_insert; + + if ((send = boost::dynamic_pointer_cast(other)) != 0) { + return boost::shared_ptr (new Send (*send)); + } else if ((port_insert = boost::dynamic_pointer_cast(other)) != 0) { + return boost::shared_ptr (new PortInsert (*port_insert)); + } else if ((plugin_insert = boost::dynamic_pointer_cast(other)) != 0) { + return boost::shared_ptr (new PluginInsert (*plugin_insert)); + } else { + fatal << _("programming error: unknown Processor type in Processor::Clone!\n") + << endmsg; + /*NOTREACHED*/ + } + return boost::shared_ptr(); +} + +void +Processor::set_sort_key (uint32_t key) +{ + _sort_key = key; +} + +void +Processor::set_placement (Placement p) +{ + if (_placement != p) { + _placement = p; + PlacementChanged (); /* EMIT SIGNAL */ + } +} + +void +Processor::set_active (bool yn) +{ + _active = yn; + ActiveChanged (); +} + +XMLNode& +Processor::get_state (void) +{ + return state (true); +} + +/* NODE STRUCTURE + + + + + + X1 Y1 + X2 Y2 + .... + + + +*/ + +XMLNode& +Processor::state (bool full_state) +{ + XMLNode* node = new XMLNode (state_node_name); + stringstream sstr; + + // FIXME: This conflicts with "id" used by plugin for name in legacy sessions (ugh). + // Do we need to serialize this? + /* + char buf[64]; + id().print (buf, sizeof (buf)); + node->add_property("id", buf); + */ + + node->add_property("name", _name); + node->add_property("active", active() ? "yes" : "no"); + node->add_property("placement", enum_2_string (_placement)); + + if (_extra_xml){ + node->add_child_copy (*_extra_xml); + } + + if (full_state) { + + XMLNode& automation = Automatable::get_automation_state(); + + for (set::iterator x = _visible_parameter_automation.begin(); x != _visible_parameter_automation.end(); ++x) { + if (x != _visible_parameter_automation.begin()) { + sstr << ' '; + } + sstr << *x; + } + + automation.add_property ("visible", sstr.str()); + + node->add_child_nocopy (automation); + } + + return *node; +} + +int +Processor::set_state (const XMLNode& node) +{ + const XMLProperty *prop; + + // may not exist for legacy sessions + if ((prop = node.property ("name")) != 0) { + set_name(prop->value()); + } + + XMLNodeList nlist = node.children(); + XMLNodeIterator niter; + + for (niter = nlist.begin(); niter != nlist.end(); ++niter) { + + if ((*niter)->name() == X_("Automation")) { + + + XMLProperty *prop; + + if ((prop = (*niter)->property ("path")) != 0) { + old_set_automation_state (*(*niter)); + } else { + set_automation_state (*(*niter), ParamID(PluginAutomation)); + } + + if ((prop = (*niter)->property ("visible")) != 0) { + uint32_t what; + stringstream sstr; + + _visible_parameter_automation.clear (); + + sstr << prop->value(); + while (1) { + sstr >> what; + if (sstr.fail()) { + break; + } + // FIXME: other automation types? + mark_automation_visible (ParamID(PluginAutomation, what), true); + } + } + + } else if ((*niter)->name() == "extra") { + _extra_xml = new XMLNode (*(*niter)); + } + } + + if ((prop = node.property ("active")) == 0) { + error << _("XML node describing a processor is missing the `active' field") << endmsg; + return -1; + } + + if (_active != (prop->value() == "yes")) { + _active = !_active; + ActiveChanged (); /* EMIT_SIGNAL */ + } + + if ((prop = node.property ("placement")) == 0) { + error << _("XML node describing a processor is missing the `placement' field") << endmsg; + return -1; + } + + /* hack to handle older sessions before we only used EnumWriter */ + + string pstr; + + if (prop->value() == "pre") { + pstr = "PreFader"; + } else if (prop->value() == "post") { + pstr = "PostFader"; + } else { + pstr = prop->value(); + } + + Placement p = Placement (string_2_enum (pstr, p)); + set_placement (p); + + return 0; +} + diff --git a/libs/ardour/redirect.cc b/libs/ardour/redirect.cc deleted file mode 100644 index ef01f3437a..0000000000 --- a/libs/ardour/redirect.cc +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright (C) 2001 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "i18n.h" - -using namespace std; -using namespace ARDOUR; -using namespace PBD; - -Redirect::Redirect (Session& s, const string& name, Placement p, - int input_min, int input_max, - int output_min, int output_max) - : Insert(s, name, p) - , _io(new IO(s, name, input_min, input_max, output_min, output_max)) -{ - _active = false; - _sort_key = 0; - _gui = 0; - _extra_xml = 0; -} - -Redirect::~Redirect () -{ - notify_callbacks (); -} - -XMLNode& -Redirect::state (bool full_state) -{ - XMLNode& node = Insert::state(full_state); - - node.add_child_nocopy (_io->state (full_state)); - - return node; -} - -int -Redirect::set_state (const XMLNode& node) -{ - const XMLProperty *prop; - - Insert::set_state(node); - - XMLNodeList nlist = node.children(); - XMLNodeIterator niter; - bool have_io = false; - - for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - if ((*niter)->name() == IO::state_node_name) { - have_io = true; - _io->set_state(**niter); - - // legacy sessions: use IO name - if ((prop = node.property ("name")) == 0) { - set_name(_io->name()); - } - } - } - - if (!have_io) { - error << _("XML node describing a redirect is missing an IO node") << endmsg; - return -1; - } - - return 0; -} - -void -Redirect::silence (nframes_t nframes, nframes_t offset) -{ - _io->silence(nframes, offset); -} diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 3353149efa..d8ecabb1c0 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -76,7 +76,7 @@ Route::Route (Session& sess, const XMLNode& node, DataType default_type) void Route::init () { - insert_max_outs.reset(); + processor_max_outs.reset(); _muted = false; _soloed = false; _solo_safe = false; @@ -115,8 +115,8 @@ Route::init () Route::~Route () { - clear_inserts (PreFader); - clear_inserts (PostFader); + clear_processors (PreFader); + clear_processors (PostFader); for (OrderKeys::iterator i = order_keys.begin(); i != order_keys.end(); ++i) { free ((void*)(i->first)); @@ -238,13 +238,13 @@ Route::set_gain (gain_t val, void *src) void Route::process_output_buffers (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, - nframes_t nframes, nframes_t offset, bool with_inserts, int declick, + nframes_t nframes, nframes_t offset, bool with_processors, int declick, bool meter) { // This is definitely very audio-only for now assert(_default_type == DataType::AUDIO); - InsertList::iterator i; + ProcessorList::iterator i; bool post_fader_work = false; bool mute_declick_applied = false; gain_t dmg, dsg, dg; @@ -266,7 +266,7 @@ Route::process_output_buffers (BufferSet& bufs, declick = _pending_declick; { - Glib::Mutex::Lock cm (control_outs_lock, Glib::TRY_LOCK); + Glib::Mutex::Lock cm (_control_outs_lock, Glib::TRY_LOCK); if (cm.locked()) { co = _control_outs; @@ -373,11 +373,11 @@ Route::process_output_buffers (BufferSet& bufs, PRE-FADER REDIRECTS -------------------------------------------------------------------------------------------------- */ - if (with_inserts) { - Glib::RWLock::ReaderLock rm (insert_lock, Glib::TRY_LOCK); + if (with_processors) { + Glib::RWLock::ReaderLock rm (_processor_lock, Glib::TRY_LOCK); if (rm.locked()) { if (mute_gain > 0 || !_mute_affects_pre_fader) { - for (i = _inserts.begin(); i != _inserts.end(); ++i) { + for (i = _processors.begin(); i != _processors.end(); ++i) { switch ((*i)->placement()) { case PreFader: (*i)->run (bufs, start_frame, end_frame, nframes, offset); @@ -388,7 +388,7 @@ Route::process_output_buffers (BufferSet& bufs, } } } else { - for (i = _inserts.begin(); i != _inserts.end(); ++i) { + for (i = _processors.begin(); i != _processors.end(); ++i) { switch ((*i)->placement()) { case PreFader: (*i)->silence (nframes, offset); @@ -538,14 +538,14 @@ Route::process_output_buffers (BufferSet& bufs, POST-FADER REDIRECTS -------------------------------------------------------------------------------------------------- */ - /* note that post_fader_work cannot be true unless with_inserts was also true, so don't test both */ + /* note that post_fader_work cannot be true unless with_processors was also true, so don't test both */ if (post_fader_work) { - Glib::RWLock::ReaderLock rm (insert_lock, Glib::TRY_LOCK); + Glib::RWLock::ReaderLock rm (_processor_lock, Glib::TRY_LOCK); if (rm.locked()) { if (mute_gain > 0 || !_mute_affects_post_fader) { - for (i = _inserts.begin(); i != _inserts.end(); ++i) { + for (i = _processors.begin(); i != _processors.end(); ++i) { switch ((*i)->placement()) { case PreFader: break; @@ -555,7 +555,7 @@ Route::process_output_buffers (BufferSet& bufs, } } } else { - for (i = _inserts.begin(); i != _inserts.end(); ++i) { + for (i = _processors.begin(); i != _processors.end(); ++i) { switch ((*i)->placement()) { case PreFader: break; @@ -651,7 +651,7 @@ Route::process_output_buffers (BufferSet& bufs, ) { /* don't use Route::silence() here, because that causes - all outputs (sends, port inserts, etc. to be silent). + all outputs (sends, port processors, etc. to be silent). */ if (_meter_point == MeterPostFader) { @@ -684,7 +684,7 @@ Route::process_output_buffers (BufferSet& bufs, ChanCount Route::n_process_buffers () { - return max (n_inputs(), insert_max_outs); + return max (n_inputs(), processor_max_outs); } void @@ -770,23 +770,23 @@ Route::set_mute (bool yn, void *src) } int -Route::add_insert (boost::shared_ptr insert, InsertStreams* err) +Route::add_processor (boost::shared_ptr processor, ProcessorStreams* err) { - ChanCount old_rmo = insert_max_outs; + ChanCount old_rmo = processor_max_outs; if (!_session.engine().connected()) { return 1; } { - Glib::RWLock::WriterLock lm (insert_lock); + Glib::RWLock::WriterLock lm (_processor_lock); boost::shared_ptr pi; boost::shared_ptr porti; - //insert->set_default_type(_default_type); + //processor->set_default_type(_default_type); - if ((pi = boost::dynamic_pointer_cast(insert)) != 0) { + if ((pi = boost::dynamic_pointer_cast(processor)) != 0) { pi->set_count (1); if (pi->natural_input_streams() == ChanCount::ZERO) { @@ -796,51 +796,51 @@ Route::add_insert (boost::shared_ptr insert, InsertStreams* err) } - _inserts.push_back (insert); + _processors.push_back (processor); - // Set up insert list channels. This will set insert->[input|output]_streams(), + // Set up processor list channels. This will set processor->[input|output]_streams(), // configure redirect ports properly, etc. if (_reset_plugin_counts (err)) { - _inserts.pop_back (); + _processors.pop_back (); _reset_plugin_counts (0); // it worked before we tried to add it ... return -1; } // Ensure peak vector sizes before the plugin is activated - ChanCount potential_max_streams = max(insert->input_streams(), insert->output_streams()); + ChanCount potential_max_streams = max(processor->input_streams(), processor->output_streams()); _meter->configure_io(potential_max_streams, potential_max_streams); - insert->activate (); - insert->ActiveChanged.connect (bind (mem_fun (_session, &Session::update_latency_compensation), false, false)); + processor->activate (); + processor->ActiveChanged.connect (bind (mem_fun (_session, &Session::update_latency_compensation), false, false)); } - if (insert_max_outs != old_rmo || old_rmo == ChanCount::ZERO) { + if (processor_max_outs != old_rmo || old_rmo == ChanCount::ZERO) { reset_panner (); } - inserts_changed (); /* EMIT SIGNAL */ + processors_changed (); /* EMIT SIGNAL */ return 0; } int -Route::add_inserts (const InsertList& others, InsertStreams* err) +Route::add_processors (const ProcessorList& others, ProcessorStreams* err) { - ChanCount old_rmo = insert_max_outs; + ChanCount old_rmo = processor_max_outs; if (!_session.engine().connected()) { return 1; } { - Glib::RWLock::WriterLock lm (insert_lock); + Glib::RWLock::WriterLock lm (_processor_lock); - InsertList::iterator existing_end = _inserts.end(); + ProcessorList::iterator existing_end = _processors.end(); --existing_end; ChanCount potential_max_streams; - for (InsertList::const_iterator i = others.begin(); i != others.end(); ++i) { + for (ProcessorList::const_iterator i = others.begin(); i != others.end(); ++i) { boost::shared_ptr pi; @@ -855,11 +855,11 @@ Route::add_inserts (const InsertList& others, InsertStreams* err) // Ensure peak vector sizes before the plugin is activated _meter->configure_io(potential_max_streams, potential_max_streams); - _inserts.push_back (*i); + _processors.push_back (*i); if (_reset_plugin_counts (err)) { ++existing_end; - _inserts.erase (existing_end, _inserts.end()); + _processors.erase (existing_end, _processors.end()); _reset_plugin_counts (0); // it worked before we tried to add it ... return -1; } @@ -869,24 +869,24 @@ Route::add_inserts (const InsertList& others, InsertStreams* err) } } - if (insert_max_outs != old_rmo || old_rmo == ChanCount::ZERO) { + if (processor_max_outs != old_rmo || old_rmo == ChanCount::ZERO) { reset_panner (); } - inserts_changed (); /* EMIT SIGNAL */ + processors_changed (); /* EMIT SIGNAL */ return 0; } -/** Turn off all inserts with a given placement - * @param p Placement of inserts to disable +/** Turn off all processors with a given placement + * @param p Placement of processors to disable */ void -Route::disable_inserts (Placement p) +Route::disable_processors (Placement p) { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->placement() == p) { (*i)->set_active (false); } @@ -899,11 +899,11 @@ Route::disable_inserts (Placement p) */ void -Route::disable_inserts () +Route::disable_processors () { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->set_active (false); } @@ -917,9 +917,9 @@ Route::disable_inserts () void Route::disable_plugins (Placement p) { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if (boost::dynamic_pointer_cast (*i) && (*i)->placement() == p) { (*i)->set_active (false); } @@ -934,9 +934,9 @@ Route::disable_plugins (Placement p) void Route::disable_plugins () { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if (boost::dynamic_pointer_cast (*i)) { (*i)->set_active (false); } @@ -949,7 +949,7 @@ Route::disable_plugins () void Route::ab_plugins (bool forward) { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); if (forward) { @@ -957,7 +957,7 @@ Route::ab_plugins (bool forward) we go the other way, we will revert them */ - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if (!boost::dynamic_pointer_cast (*i)) { continue; } @@ -974,7 +974,7 @@ Route::ab_plugins (bool forward) /* backward = if the redirect was marked to go active on the next ab, do so */ - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if (!boost::dynamic_pointer_cast (*i)) { continue; @@ -996,40 +996,40 @@ Route::ab_plugins (bool forward) ChanCount Route::pre_fader_streams() const { - boost::shared_ptr insert; + boost::shared_ptr processor; // Find the last pre-fader redirect - for (InsertList::const_iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->placement() == PreFader) { - insert = *i; + processor = *i; } } - if (insert) { - return insert->output_streams(); + if (processor) { + return processor->output_streams(); } else { return n_inputs (); } } -/** Remove inserts with a given placement. - * @param p Placement of inserts to remove. +/** Remove processors with a given placement. + * @param p Placement of processors to remove. */ void -Route::clear_inserts (Placement p) +Route::clear_processors (Placement p) { - const ChanCount old_rmo = insert_max_outs; + const ChanCount old_rmo = processor_max_outs; if (!_session.engine().connected()) { return; } { - Glib::RWLock::WriterLock lm (insert_lock); - InsertList new_list; + Glib::RWLock::WriterLock lm (_processor_lock); + ProcessorList new_list; - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->placement() == p) { /* it's the placement we want to get rid of */ (*i)->drop_references (); @@ -1039,42 +1039,42 @@ Route::clear_inserts (Placement p) } } - _inserts = new_list; + _processors = new_list; } /* FIXME: can't see how this test can ever fire */ - if (insert_max_outs != old_rmo) { + if (processor_max_outs != old_rmo) { reset_panner (); } - insert_max_outs.reset(); + processor_max_outs.reset(); _have_internal_generator = false; - inserts_changed (); /* EMIT SIGNAL */ + processors_changed (); /* EMIT SIGNAL */ } int -Route::remove_insert (boost::shared_ptr insert, InsertStreams* err) +Route::remove_processor (boost::shared_ptr processor, ProcessorStreams* err) { - ChanCount old_rmo = insert_max_outs; + ChanCount old_rmo = processor_max_outs; if (!_session.engine().connected()) { return 1; } - insert_max_outs.reset(); + processor_max_outs.reset(); { - Glib::RWLock::WriterLock lm (insert_lock); - InsertList::iterator i; + Glib::RWLock::WriterLock lm (_processor_lock); + ProcessorList::iterator i; bool removed = false; - for (i = _inserts.begin(); i != _inserts.end(); ++i) { - if (*i == insert) { + for (i = _processors.begin(); i != _processors.end(); ++i) { + if (*i == processor) { - InsertList::iterator tmp; + ProcessorList::iterator tmp; /* move along, see failure case for reset_plugin_counts() - where we may need to reinsert the insert. + where we may need to reprocessor the processor. */ tmp = i; @@ -1085,14 +1085,14 @@ Route::remove_insert (boost::shared_ptr insert, InsertStreams* err) run. */ - boost::shared_ptr redirect; + boost::shared_ptr redirect; - if ((redirect = boost::dynamic_pointer_cast (*i)) != 0) { + if ((redirect = boost::dynamic_pointer_cast (*i)) != 0) { redirect->io()->disconnect_inputs (this); redirect->io()->disconnect_outputs (this); } - _inserts.erase (i); + _processors.erase (i); i = tmp; removed = true; @@ -1107,7 +1107,7 @@ Route::remove_insert (boost::shared_ptr insert, InsertStreams* err) if (_reset_plugin_counts (err)) { /* get back to where we where */ - _inserts.insert (i, insert); + _processors.insert (i, processor); /* we know this will work, because it worked before :) */ _reset_plugin_counts (0); return -1; @@ -1115,7 +1115,7 @@ Route::remove_insert (boost::shared_ptr insert, InsertStreams* err) bool foo = false; - for (i = _inserts.begin(); i != _inserts.end(); ++i) { + for (i = _processors.begin(); i != _processors.end(); ++i) { boost::shared_ptr pi; if ((pi = boost::dynamic_pointer_cast(*i)) != 0) { @@ -1128,55 +1128,55 @@ Route::remove_insert (boost::shared_ptr insert, InsertStreams* err) _have_internal_generator = foo; } - if (old_rmo != insert_max_outs) { + if (old_rmo != processor_max_outs) { reset_panner (); } - insert->drop_references (); + processor->drop_references (); - inserts_changed (); /* EMIT SIGNAL */ + processors_changed (); /* EMIT SIGNAL */ return 0; } int -Route::reset_plugin_counts (InsertStreams* err) +Route::reset_plugin_counts (ProcessorStreams* err) { - Glib::RWLock::WriterLock lm (insert_lock); + Glib::RWLock::WriterLock lm (_processor_lock); return _reset_plugin_counts (err); } int -Route::_reset_plugin_counts (InsertStreams* err) +Route::_reset_plugin_counts (ProcessorStreams* err) { - InsertList::iterator r; - map > insert_map; + ProcessorList::iterator r; + map > processor_map; ChanCount initial_streams; /* Process each placement in order, checking to see if we can really do what has been requested. */ - /* divide inserts up by placement so we get the signal flow - properly modelled. we need to do this because the _inserts + /* divide processors up by placement so we get the signal flow + properly modelled. we need to do this because the _processors list is not sorted by placement */ /* ... but it should/will be... */ - for (r = _inserts.begin(); r != _inserts.end(); ++r) { + for (r = _processors.begin(); r != _processors.end(); ++r) { - boost::shared_ptr insert; + boost::shared_ptr processor; - if ((insert = boost::dynamic_pointer_cast(*r)) != 0) { - insert_map[insert->placement()].push_back (InsertCount (insert)); + if ((processor = boost::dynamic_pointer_cast(*r)) != 0) { + processor_map[processor->placement()].push_back (ProcessorCount (processor)); } } /* A: PreFader */ - if ( ! check_some_plugin_counts (insert_map[PreFader], n_inputs (), err)) { + if ( ! check_some_plugin_counts (processor_map[PreFader], n_inputs (), err)) { return -1; } @@ -1184,22 +1184,22 @@ Route::_reset_plugin_counts (InsertStreams* err) /* B: PostFader */ - if ( ! check_some_plugin_counts (insert_map[PostFader], post_fader_input, err)) { + if ( ! check_some_plugin_counts (processor_map[PostFader], post_fader_input, err)) { return -1; } /* OK, everything can be set up correctly, so lets do it */ - apply_some_plugin_counts (insert_map[PreFader]); - apply_some_plugin_counts (insert_map[PostFader]); + apply_some_plugin_counts (processor_map[PreFader]); + apply_some_plugin_counts (processor_map[PostFader]); - /* recompute max outs of any insert */ + /* recompute max outs of any processor */ - insert_max_outs.reset(); - InsertList::iterator prev = _inserts.end(); + processor_max_outs.reset(); + ProcessorList::iterator prev = _processors.end(); - for (r = _inserts.begin(); r != _inserts.end(); prev = r, ++r) { - insert_max_outs = max ((*r)->output_streams (), insert_max_outs); + for (r = _processors.begin(); r != _processors.end(); prev = r, ++r) { + processor_max_outs = max ((*r)->output_streams (), processor_max_outs); } /* we're done */ @@ -1208,31 +1208,31 @@ Route::_reset_plugin_counts (InsertStreams* err) } int32_t -Route::apply_some_plugin_counts (list& iclist) +Route::apply_some_plugin_counts (list& iclist) { - list::iterator i; + list::iterator i; for (i = iclist.begin(); i != iclist.end(); ++i) { - if ((*i).insert->configure_io ((*i).in, (*i).out)) { + if ((*i).processor->configure_io ((*i).in, (*i).out)) { return -1; } /* make sure that however many we have, they are all active */ - (*i).insert->activate (); + (*i).processor->activate (); } return 0; } /** Returns whether \a iclist can be configured and run starting with - * \a required_inputs at the first insert's inputs. + * \a required_inputs at the first processor's inputs. * If false is returned, \a iclist can not be run with \a required_inputs, and \a err is set. * Otherwise, \a err is set to the output of the list. */ bool -Route::check_some_plugin_counts (list& iclist, ChanCount required_inputs, InsertStreams* err) +Route::check_some_plugin_counts (list& iclist, ChanCount required_inputs, ProcessorStreams* err) { - list::iterator i; + list::iterator i; size_t index = 0; if (err) { @@ -1242,7 +1242,7 @@ Route::check_some_plugin_counts (list& iclist, ChanCount required_i for (i = iclist.begin(); i != iclist.end(); ++i) { - if ((*i).insert->can_support_input_configuration (required_inputs) < 0) { + if ((*i).processor->can_support_input_configuration (required_inputs) < 0) { if (err) { err->index = index; err->count = required_inputs; @@ -1251,7 +1251,7 @@ Route::check_some_plugin_counts (list& iclist, ChanCount required_i } (*i).in = required_inputs; - (*i).out = (*i).insert->output_for_input_configuration (required_inputs); + (*i).out = (*i).processor->output_for_input_configuration (required_inputs); required_inputs = (*i).out; @@ -1261,7 +1261,7 @@ Route::check_some_plugin_counts (list& iclist, ChanCount required_i if (err) { if (!iclist.empty()) { err->index = index; - err->count = iclist.back().insert->output_for_input_configuration(required_inputs); + err->count = iclist.back().processor->output_for_input_configuration(required_inputs); } } @@ -1269,28 +1269,28 @@ Route::check_some_plugin_counts (list& iclist, ChanCount required_i } int -Route::copy_inserts (const Route& other, Placement placement, InsertStreams* err) +Route::copy_processors (const Route& other, Placement placement, ProcessorStreams* err) { - ChanCount old_rmo = insert_max_outs; + ChanCount old_rmo = processor_max_outs; - InsertList to_be_deleted; + ProcessorList to_be_deleted; { - Glib::RWLock::WriterLock lm (insert_lock); - InsertList::iterator tmp; - InsertList the_copy; + Glib::RWLock::WriterLock lm (_processor_lock); + ProcessorList::iterator tmp; + ProcessorList the_copy; - the_copy = _inserts; + the_copy = _processors; - /* remove all relevant inserts */ + /* remove all relevant processors */ - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ) { tmp = i; ++tmp; if ((*i)->placement() == placement) { to_be_deleted.push_back (*i); - _inserts.erase (i); + _processors.erase (i); } i = tmp; @@ -1298,9 +1298,9 @@ Route::copy_inserts (const Route& other, Placement placement, InsertStreams* err /* now copy the relevant ones from "other" */ - for (InsertList::const_iterator i = other._inserts.begin(); i != other._inserts.end(); ++i) { + for (ProcessorList::const_iterator i = other._processors.begin(); i != other._processors.end(); ++i) { if ((*i)->placement() == placement) { - _inserts.push_back (Redirect::clone (*i)); + _processors.push_back (IOProcessor::clone (*i)); } } @@ -1310,15 +1310,15 @@ Route::copy_inserts (const Route& other, Placement placement, InsertStreams* err /* FAILED COPY ATTEMPT: we have to restore order */ - /* delete all cloned inserts */ + /* delete all cloned processors */ - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ) { tmp = i; ++tmp; if ((*i)->placement() == placement) { - _inserts.erase (i); + _processors.erase (i); } i = tmp; @@ -1326,8 +1326,8 @@ Route::copy_inserts (const Route& other, Placement placement, InsertStreams* err /* restore the natural order */ - _inserts = the_copy; - insert_max_outs = old_rmo; + _processors = the_copy; + processor_max_outs = old_rmo; /* we failed, even though things are OK again */ @@ -1335,51 +1335,51 @@ Route::copy_inserts (const Route& other, Placement placement, InsertStreams* err } else { - /* SUCCESSFUL COPY ATTEMPT: delete the inserts we removed pre-copy */ + /* SUCCESSFUL COPY ATTEMPT: delete the processors we removed pre-copy */ to_be_deleted.clear (); } } - if (insert_max_outs != old_rmo || old_rmo == ChanCount::ZERO) { + if (processor_max_outs != old_rmo || old_rmo == ChanCount::ZERO) { reset_panner (); } - inserts_changed (); /* EMIT SIGNAL */ + processors_changed (); /* EMIT SIGNAL */ return 0; } void -Route::all_inserts_flip () +Route::all_processors_flip () { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - if (_inserts.empty()) { + if (_processors.empty()) { return; } - bool first_is_on = _inserts.front()->active(); + bool first_is_on = _processors.front()->active(); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->set_active (!first_is_on); } _session.set_dirty (); } -/** Set all inserts with a given placement to a given active state. - * @param p Placement of inserts to change. - * @param state New active state for those inserts. +/** Set all processors with a given placement to a given active state. + * @param p Placement of processors to change. + * @param state New active state for those processors. */ void -Route::all_inserts_active (Placement p, bool state) +Route::all_processors_active (Placement p, bool state) { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - if (_inserts.empty()) { + if (_processors.empty()) { return; } - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->placement() == p) { (*i)->set_active (state); } @@ -1388,35 +1388,35 @@ Route::all_inserts_active (Placement p, bool state) _session.set_dirty (); } -struct InsertSorter { - bool operator() (boost::shared_ptr a, boost::shared_ptr b) { +struct ProcessorSorter { + bool operator() (boost::shared_ptr a, boost::shared_ptr b) { return a->sort_key() < b->sort_key(); } }; int -Route::sort_inserts (InsertStreams* err) +Route::sort_processors (ProcessorStreams* err) { { - InsertSorter comparator; - Glib::RWLock::WriterLock lm (insert_lock); - ChanCount old_rmo = insert_max_outs; + ProcessorSorter comparator; + Glib::RWLock::WriterLock lm (_processor_lock); + ChanCount old_rmo = processor_max_outs; /* the sweet power of C++ ... */ - InsertList as_it_was_before = _inserts; + ProcessorList as_it_was_before = _processors; - _inserts.sort (comparator); + _processors.sort (comparator); if (_reset_plugin_counts (err)) { - _inserts = as_it_was_before; - insert_max_outs = old_rmo; + _processors = as_it_was_before; + processor_max_outs = old_rmo; return -1; } } reset_panner (); - inserts_changed (); /* EMIT SIGNAL */ + processors_changed (); /* EMIT SIGNAL */ return 0; } @@ -1437,7 +1437,7 @@ XMLNode& Route::state(bool full_state) { XMLNode *node = new XMLNode("Route"); - InsertList:: iterator i; + ProcessorList:: iterator i; char buf[32]; if (_flags) { @@ -1502,7 +1502,7 @@ Route::state(bool full_state) cmt->add_content (_comment); } - for (i = _inserts.begin(); i != _inserts.end(); ++i) { + for (i = _processors.begin(); i != _processors.end(); ++i) { node->add_child_nocopy((*i)->state (full_state)); } @@ -1514,10 +1514,10 @@ Route::state(bool full_state) } XMLNode& -Route::get_insert_state () +Route::get_processor_state () { XMLNode* root = new XMLNode (X_("redirects")); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { root->add_child_nocopy ((*i)->state (true)); } @@ -1525,7 +1525,7 @@ Route::get_insert_state () } int -Route::set_insert_state (const XMLNode& root) +Route::set_processor_state (const XMLNode& root) { if (root.name() != X_("redirects")) { return -1; @@ -1535,13 +1535,13 @@ Route::set_insert_state (const XMLNode& root) XMLNodeList nnlist; XMLNodeConstIterator iter; XMLNodeConstIterator niter; - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); nlist = root.children(); for (iter = nlist.begin(); iter != nlist.end(); ++iter){ - /* iter now points to a Redirect state node */ + /* iter now points to a IOProcessor state node */ nnlist = (*iter)->children (); @@ -1556,15 +1556,15 @@ Route::set_insert_state (const XMLNode& root) XMLProperty* prop = (*niter)->property (X_("id")); if (!prop) { - warning << _("Redirect node has no ID, ignored") << endmsg; + warning << _("IOProcessor node has no ID, ignored") << endmsg; break; } ID id = prop->value (); - /* now look for a insert with that ID */ + /* now look for a processor with that ID */ - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->id() == id) { (*i)->set_state (**iter); break; @@ -1594,7 +1594,7 @@ Route::set_deferred_state () nlist = deferred_state->children(); for (niter = nlist.begin(); niter != nlist.end(); ++niter){ - add_insert_from_xml (**niter); + add_processor_from_xml (**niter); } delete deferred_state; @@ -1602,7 +1602,7 @@ Route::set_deferred_state () } void -Route::add_insert_from_xml (const XMLNode& node) +Route::add_processor_from_xml (const XMLNode& node) { const XMLProperty *prop; @@ -1611,7 +1611,7 @@ Route::add_insert_from_xml (const XMLNode& node) try { boost::shared_ptr send (new Send (_session, node)); - add_insert (send); + add_processor (send); } catch (failed_constructor &err) { @@ -1619,39 +1619,40 @@ Route::add_insert_from_xml (const XMLNode& node) return; } - } else if (node.name() == "Insert") { + // use "Processor" in XML? + } else if (node.name() == "Processor") { try { if ((prop = node.property ("type")) != 0) { - boost::shared_ptr insert; + boost::shared_ptr processor; if (prop->value() == "ladspa" || prop->value() == "Ladspa" || prop->value() == "vst") { - insert.reset (new PluginInsert(_session, node)); + processor.reset (new PluginInsert(_session, node)); } else if (prop->value() == "port") { - insert.reset (new PortInsert (_session, node)); + processor.reset (new PortInsert (_session, node)); } else if (prop->value() == "send") { - insert.reset (new Send (_session, node)); + processor.reset (new Send (_session, node)); } else { - error << string_compose(_("unknown Insert type \"%1\"; ignored"), prop->value()) << endmsg; + error << string_compose(_("unknown Processor type \"%1\"; ignored"), prop->value()) << endmsg; } - add_insert (insert); + add_processor (processor); } else { - error << _("Insert XML node has no type property") << endmsg; + error << _("Processor XML node has no type property") << endmsg; } } catch (failed_constructor &err) { - warning << _("insert could not be created. Ignored.") << endmsg; + warning << _("processor could not be created. Ignored.") << endmsg; return; } } @@ -1797,24 +1798,24 @@ Route::_set_state (const XMLNode& node, bool call_base) } } - XMLNodeList insert_nodes; + XMLNodeList processor_nodes; for (niter = nlist.begin(); niter != nlist.end(); ++niter){ child = *niter; - if (child->name() == X_("Send") || child->name() == X_("Insert")) { - insert_nodes.push_back(child); + if (child->name() == X_("Send") || child->name() == X_("Processor")) { + processor_nodes.push_back(child); } } - _set_insert_states(insert_nodes); + _set_processor_states(processor_nodes); for (niter = nlist.begin(); niter != nlist.end(); ++niter){ child = *niter; - // All inserts have been applied already + // All processors have been applied already if (child->name() == X_("Automation")) { @@ -1874,37 +1875,37 @@ Route::_set_state (const XMLNode& node, bool call_base) } void -Route::_set_insert_states(const XMLNodeList &nlist) +Route::_set_processor_states(const XMLNodeList &nlist) { XMLNodeConstIterator niter; char buf[64]; - InsertList::iterator i, o; + ProcessorList::iterator i, o; - // Iterate through existing inserts, remove those which are not in the state list - for (i = _inserts.begin(); i != _inserts.end(); ) { - InsertList::iterator tmp = i; + // Iterate through existing processors, remove those which are not in the state list + for (i = _processors.begin(); i != _processors.end(); ) { + ProcessorList::iterator tmp = i; ++tmp; - bool insertInStateList = false; + bool processorInStateList = false; (*i)->id().print (buf, sizeof (buf)); for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - // legacy sessions (Redirect as a child of Insert, both is-a IO) - if (strncmp(buf,(*niter)->child(X_("Redirect"))->child(X_("IO"))->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) { - insertInStateList = true; + // legacy sessions (IOProcessor as a child of Processor, both is-a IO) + if (strncmp(buf,(*niter)->child(X_("IOProcessor"))->child(X_("IO"))->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) { + processorInStateList = true; break; } else if (strncmp(buf,(*niter)->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) { - insertInStateList = true; + processorInStateList = true; break; } } - if (!insertInStateList) { - remove_insert (*i); + if (!processorInStateList) { + remove_processor (*i); } @@ -1912,17 +1913,17 @@ Route::_set_insert_states(const XMLNodeList &nlist) } - // Iterate through state list and make sure all inserts are on the track and in the correct order, - // set the state of existing inserts according to the new state on the same go - i = _inserts.begin(); + // Iterate through state list and make sure all processors are on the track and in the correct order, + // set the state of existing processors according to the new state on the same go + i = _processors.begin(); for (niter = nlist.begin(); niter != nlist.end(); ++niter, ++i) { - // Check whether the next insert in the list + // Check whether the next processor in the list o = i; - while (o != _inserts.end()) { + while (o != _processors.end()) { (*o)->id().print (buf, sizeof (buf)); - if ( strncmp(buf, (*niter)->child(X_("Redirect"))->child(X_("IO"))->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) + if ( strncmp(buf, (*niter)->child(X_("IOProcessor"))->child(X_("IO"))->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) break; else if (strncmp(buf,(*niter)->property(X_("id"))->value().c_str(), sizeof(buf)) == 0) break; @@ -1930,50 +1931,50 @@ Route::_set_insert_states(const XMLNodeList &nlist) ++o; } - if (o == _inserts.end()) { - // If the insert (*niter) is not on the route, we need to create it + if (o == _processors.end()) { + // If the processor (*niter) is not on the route, we need to create it // and move it to the correct location - InsertList::iterator prev_last = _inserts.end(); + ProcessorList::iterator prev_last = _processors.end(); --prev_last; // We need this to check whether adding succeeded - add_insert_from_xml (**niter); + add_processor_from_xml (**niter); - InsertList::iterator last = _inserts.end(); + ProcessorList::iterator last = _processors.end(); --last; if (prev_last == last) { - cerr << "Could not fully restore state as some inserts were not possible to create" << endl; + cerr << "Could not fully restore state as some processors were not possible to create" << endl; continue; } - boost::shared_ptr tmp = (*last); - // remove the insert from the wrong location - _inserts.erase(last); - // insert the new insert at the current location - _inserts.insert(i, tmp); + boost::shared_ptr tmp = (*last); + // remove the processor from the wrong location + _processors.erase(last); + // processor the new processor at the current location + _processors.insert(i, tmp); - --i; // move pointer to the newly inserted insert + --i; // move pointer to the newly processored processor continue; } - // We found the insert (*niter) on the route, first we must make sure the insert + // We found the processor (*niter) on the route, first we must make sure the processor // is at the location provided in the XML state if (i != o) { - boost::shared_ptr tmp = (*o); + boost::shared_ptr tmp = (*o); // remove the old copy - _inserts.erase(o); - // insert the insert at the correct location - _inserts.insert(i, tmp); + _processors.erase(o); + // processor the processor at the correct location + _processors.insert(i, tmp); - --i; // move pointer so it points to the right insert + --i; // move pointer so it points to the right processor } (*i)->set_state( (**niter) ); } - inserts_changed (); + processors_changed (); } void @@ -1995,10 +1996,10 @@ Route::silence (nframes_t nframes, nframes_t offset) } { - Glib::RWLock::ReaderLock lm (insert_lock, Glib::TRY_LOCK); + Glib::RWLock::ReaderLock lm (_processor_lock, Glib::TRY_LOCK); if (lm.locked()) { - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { boost::shared_ptr pi; if (!_active && (pi = boost::dynamic_pointer_cast (*i)) != 0) { // skip plugins, they don't need anything when we're not active @@ -2020,7 +2021,7 @@ Route::silence (nframes_t nframes, nframes_t offset) int Route::set_control_outs (const vector& ports) { - Glib::Mutex::Lock lm (control_outs_lock); + Glib::Mutex::Lock lm (_control_outs_lock); vector::const_iterator i; size_t limit; @@ -2148,11 +2149,11 @@ Route::feeds (boost::shared_ptr other) } } - /* check Redirects which may also interconnect Routes */ + /* check IOProcessors which may also interconnect Routes */ - for (InsertList::iterator r = _inserts.begin(); r != _inserts.end(); r++) { + for (ProcessorList::iterator r = _processors.begin(); r != _processors.end(); r++) { - boost::shared_ptr redirect = boost::dynamic_pointer_cast(*r); + boost::shared_ptr redirect = boost::dynamic_pointer_cast(*r); if ( ! redirect) continue; @@ -2245,20 +2246,20 @@ Route::set_active (bool yn) } void -Route::handle_transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_inserts) +Route::handle_transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_processors) { nframes_t now = _session.transport_frame(); { - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); if (!did_locate) { automation_snapshot (now); } - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { - if (Config->get_plugins_stop_with_transport() && can_flush_inserts) { + if (Config->get_plugins_stop_with_transport() && can_flush_processors) { (*i)->deactivate (); (*i)->activate (); } @@ -2299,7 +2300,7 @@ Route::pans_required () const return 0; } - return max (n_inputs ().n_audio(), static_cast(insert_max_outs.n_audio())); + return max (n_inputs ().n_audio(), static_cast(processor_max_outs.n_audio())); } int @@ -2356,15 +2357,15 @@ Route::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nfra bool can_record, bool rec_monitors_input) { { - Glib::RWLock::ReaderLock lm (insert_lock, Glib::TRY_LOCK); + Glib::RWLock::ReaderLock lm (_processor_lock, Glib::TRY_LOCK); if (lm.locked()) { // automation snapshot can also be called from the non-rt context - // and it uses the insert list, so we take the lock out here + // and it uses the processor list, so we take the lock out here automation_snapshot (_session.transport_frame()); } } - if ((n_outputs().n_total() == 0 && _inserts.empty()) || n_inputs().n_total() == 0 || !_active) { + if ((n_outputs().n_total() == 0 && _processors.empty()) || n_inputs().n_total() == 0 || !_active) { silence (nframes, offset); return 0; } @@ -2420,7 +2421,7 @@ Route::has_external_redirects () const boost::shared_ptr pi; - for (InsertList::const_iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((pi = boost::dynamic_pointer_cast(*i)) != 0) { for (PortSet::const_iterator port = pi->io()->outputs().begin(); @@ -2442,15 +2443,15 @@ Route::has_external_redirects () const } void -Route::flush_inserts () +Route::flush_processors () { /* XXX shouldn't really try to take this lock, since this is called from the RT audio thread. */ - Glib::RWLock::ReaderLock lm (insert_lock); + Glib::RWLock::ReaderLock lm (_processor_lock); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->deactivate (); (*i)->activate (); } @@ -2471,7 +2472,7 @@ Route::update_total_latency () { _own_latency = 0; - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->active ()) { _own_latency += (*i)->latency (); } @@ -2506,7 +2507,7 @@ Route::automation_snapshot (nframes_t now) { IO::automation_snapshot (now); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->automation_snapshot (now); } } @@ -2556,7 +2557,7 @@ Route::ToggleControllable::get_value (void) const void Route::set_block_size (nframes_t nframes) { - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->set_block_size (nframes); } } @@ -2566,7 +2567,7 @@ Route::protect_automation () { Automatable::protect_automation(); - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) (*i)->protect_automation(); } diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc index 37867a2cfa..99589d2a8c 100644 --- a/libs/ardour/send.cc +++ b/libs/ardour/send.cc @@ -33,14 +33,14 @@ using namespace ARDOUR; using namespace PBD; Send::Send (Session& s, Placement p) - : Redirect (s, string_compose (_("send %1"), (bitslot = s.next_send_id()) + 1), p) + : IOProcessor (s, string_compose (_("send %1"), (bitslot = s.next_send_id()) + 1), p) { _metering = false; - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } Send::Send (Session& s, const XMLNode& node) - : Redirect (s, "send", PreFader) + : IOProcessor (s, "send", PreFader) { _metering = false; @@ -48,14 +48,14 @@ Send::Send (Session& s, const XMLNode& node) throw failed_constructor(); } - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } Send::Send (const Send& other) - : Redirect (other._session, string_compose (_("send %1"), (bitslot = other._session.next_send_id()) + 1), other.placement()) + : IOProcessor (other._session, string_compose (_("send %1"), (bitslot = other._session.next_send_id()) + 1), other.placement()) { _metering = false; - InsertCreated (this); /* EMIT SIGNAL */ + ProcessorCreated (this); /* EMIT SIGNAL */ } Send::~Send () @@ -72,7 +72,7 @@ Send::get_state(void) XMLNode& Send::state(bool full) { - XMLNode& node = Redirect::state(full); + XMLNode& node = IOProcessor::state(full); char buf[32]; node.add_property ("type", "send"); snprintf (buf, sizeof (buf), "%" PRIu32, bitslot); @@ -100,14 +100,14 @@ Send::set_state(const XMLNode& node) /* Send has regular IO automation (gain, pan) */ for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - if ((*niter)->name() == "Redirect") { + if ((*niter)->name() == "IOProcessor") { insert_node = *niter; } else if ((*niter)->name() == X_("Automation")) { _io->set_automation_state (*(*niter), ParamID(GainAutomation)); } } - Redirect::set_state (*insert_node); + IOProcessor::set_state (*insert_node); return 0; } @@ -201,7 +201,7 @@ Send::configure_io (ChanCount in, ChanCount out) bool success = _io->ensure_io (ChanCount::ZERO, in, false, this) == 0; if (success) { - Insert::configure_io(in, out); + Processor::configure_io(in, out); _io->reset_panner(); return true; } else { diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 6df71611ce..c40dd6fd7a 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -56,9 +56,9 @@ #include #include #include -#include +#include #include -#include +#include #include #include #include @@ -1890,7 +1890,7 @@ Session::add_routes (RouteList& new_routes, bool save) (*x)->solo_changed.connect (sigc::bind (mem_fun (*this, &Session::route_solo_changed), wpr)); (*x)->mute_changed.connect (mem_fun (*this, &Session::route_mute_changed)); (*x)->output_changed.connect (mem_fun (*this, &Session::set_worst_io_latencies_x)); - (*x)->inserts_changed.connect (bind (mem_fun (*this, &Session::update_latency_compensation), false, false)); + (*x)->processors_changed.connect (bind (mem_fun (*this, &Session::update_latency_compensation), false, false)); if ((*x)->master()) { _master_out = (*x); @@ -3532,44 +3532,44 @@ Session::record_enable_change_all (bool yn) } void -Session::add_insert (Insert* insert) +Session::add_processor (Processor* processor) { Send* send; PortInsert* port_insert; PluginInsert* plugin_insert; - if ((port_insert = dynamic_cast (insert)) != 0) { + if ((port_insert = dynamic_cast (processor)) != 0) { _port_inserts.insert (_port_inserts.begin(), port_insert); - } else if ((plugin_insert = dynamic_cast (insert)) != 0) { + } else if ((plugin_insert = dynamic_cast (processor)) != 0) { _plugin_inserts.insert (_plugin_inserts.begin(), plugin_insert); - } else if ((send = dynamic_cast (insert)) != 0) { + } else if ((send = dynamic_cast (processor)) != 0) { _sends.insert (_sends.begin(), send); } else { fatal << _("programming error: unknown type of Insert created!") << endmsg; /*NOTREACHED*/ } - insert->GoingAway.connect (sigc::bind (mem_fun (*this, &Session::remove_insert), insert)); + processor->GoingAway.connect (sigc::bind (mem_fun (*this, &Session::remove_processor), processor)); set_dirty(); } void -Session::remove_insert (Insert* insert) +Session::remove_processor (Processor* processor) { Send* send; PortInsert* port_insert; PluginInsert* plugin_insert; - if ((port_insert = dynamic_cast (insert)) != 0) { + if ((port_insert = dynamic_cast (processor)) != 0) { list::iterator x = find (_port_inserts.begin(), _port_inserts.end(), port_insert); if (x != _port_inserts.end()) { insert_bitset[port_insert->bit_slot()] = false; _port_inserts.erase (x); } - } else if ((plugin_insert = dynamic_cast (insert)) != 0) { + } else if ((plugin_insert = dynamic_cast (processor)) != 0) { _plugin_inserts.remove (plugin_insert); - } else if ((send = dynamic_cast (insert)) != 0) { + } else if ((send = dynamic_cast (processor)) != 0) { list::iterator x = find (_sends.begin(), _sends.end(), send); if (x != _sends.end()) { send_bitset[send->bit_slot()] = false; diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 446743796d..65c48a2296 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -78,9 +78,9 @@ #include #include #include -#include +#include #include -#include +#include #include #include #include @@ -260,7 +260,7 @@ Session::first_stage_init (string fullpath, string snapshot_name) RegionFactory::CheckNewRegion.connect (mem_fun (*this, &Session::add_region)); SourceFactory::SourceCreated.connect (mem_fun (*this, &Session::add_source)); PlaylistFactory::PlaylistCreated.connect (mem_fun (*this, &Session::add_playlist)); - Insert::InsertCreated.connect (mem_fun (*this, &Session::add_insert)); + Processor::ProcessorCreated.connect (mem_fun (*this, &Session::add_processor)); NamedSelection::NamedSelectionCreated.connect (mem_fun (*this, &Session::add_named_selection)); AutomationList::AutomationListCreated.connect (mem_fun (*this, &Session::add_automation_list)); diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 7deb40c161..de836b79da 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -581,7 +581,7 @@ Session::flush_all_inserts () boost::shared_ptr r = routes.reader (); for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { - (*i)->flush_inserts (); + (*i)->flush_processors (); } } diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index f84b53cacb..eac2ffd31a 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -23,11 +23,11 @@ #include #include #include -#include +#include #include #include #include -#include +#include #include #include #include @@ -92,7 +92,7 @@ Track::update_total_latency () { _own_latency = 0; - for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) { + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if ((*i)->active ()) { _own_latency += (*i)->latency (); } @@ -106,7 +106,7 @@ Track::update_total_latency () Track::FreezeRecord::~FreezeRecord () { - for (vector::iterator i = insert_info.begin(); i != insert_info.end(); ++i) { + for (vector::iterator i = processor_info.begin(); i != processor_info.end(); ++i) { delete *i; } } -- cgit v1.2.3