/*
- Copyright (C) 2006 Paul Davis
-
+ Copyright (C) 2006 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.
class Delivery : public IOProcessor {
public:
enum Role {
- Insert = 0x1,
+ /* main outputs - delivers out-of-place to port buffers, and cannot be removed */
+ Main = 0x1,
+ /* send - delivers to port buffers, leaves input buffers untouched */
Send = 0x2,
- Listen = 0x4,
- Main = 0x8
+ /* insert - delivers to port buffers and receives in-place from port buffers */
+ Insert = 0x4,
+ /* listen - internal send used only to deliver to control/monitor bus */
+ Listen = 0x8,
+ /* aux - internal send used to deliver to any bus, by user request */
+ Aux = 0x10
};
+ static bool role_requires_output_ports (Role r) { return r == Main || r == Send || r == Insert; }
+
+ /* Delivery to an existing output */
+
Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<MuteMaster> mm, const std::string& name, Role);
+ Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<MuteMaster> mm, const XMLNode&);
+
+ /* Delivery to a new output owned by this object */
+
Delivery (Session& s, boost::shared_ptr<MuteMaster> mm, const std::string& name, Role);
Delivery (Session&, boost::shared_ptr<MuteMaster> mm, const XMLNode&);
bool set_name (const std::string& name);
- bool visible() const;
+ std::string display_name() const;
+
Role role() const { return _role; }
bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
bool configure_io (ChanCount in, ChanCount out);
- void run_in_place (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);
+ void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
- /* supplemental method use with MIDI */
+ /* supplemental method used with MIDI */
- void flush (nframes_t nframes);
+ void flush (nframes_t nframes, nframes64_t time);
+ void transport_stopped ();
void no_outs_cuz_we_no_monitor(bool);
- void mod_solo_level (int32_t);
- uint32_t solo_level() const { return _solo_level; }
- bool soloed () const { return (bool) _solo_level; }
-
- bool solo_isolated() const { return _solo_isolated; }
- void set_solo_isolated (bool);
+ void set_solo_level (int32_t sl) { _solo_level = sl; }
+ void set_solo_isolated (bool yn) { _solo_isolated = yn; }
void cycle_start (nframes_t);
void increment_output_offset (nframes_t);
static sigc::signal<void,nframes_t> CycleStart;
XMLNode& state (bool full);
- int set_state (const XMLNode&);
+ int set_state (const XMLNode&, int version);
/* Panning */