diff options
Diffstat (limited to 'libs/ardour/ardour/delivery.h')
-rw-r--r-- | libs/ardour/ardour/delivery.h | 85 |
1 files changed, 64 insertions, 21 deletions
diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h index 8d083695b1..645b601251 100644 --- a/libs/ardour/ardour/delivery.h +++ b/libs/ardour/ardour/delivery.h @@ -28,48 +28,91 @@ namespace ARDOUR { class BufferSet; class IO; +class MuteMaster; +class Panner; class Delivery : public IOProcessor { public: enum Role { - Send = 0x1, - Solo = 0x2, + Insert = 0x1, + Send = 0x2, Listen = 0x4, Main = 0x8 }; - Delivery (Session& s, IO* io, const std::string& name, Role); - Delivery (Session& s, const std::string& name, Role); - Delivery (Session&, const XMLNode&); + Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<MuteMaster> mm, const std::string& name, Role); + 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; - 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 set_metering (bool yn); - - bool muted_by_self() const { return _muted_by_self; } - bool muted_by_others() const { return _muted_by_others; } + /* supplemental method use with MIDI */ + + void flush (nframes_t nframes); + + 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 cycle_start (nframes_t); + void increment_output_offset (nframes_t); + void transport_stopped (sframes_t frame); + + BufferSet& output_buffers() { return *_output_buffers; } + + sigc::signal<void> MuteChange; - void set_self_mute (bool); - void set_nonself_mute (bool); - - sigc::signal<void> SelfMuteChange; - sigc::signal<void> OtherMuteChange; + static sigc::signal<void,nframes_t> CycleStart; XMLNode& state (bool full); int set_state (const XMLNode&); -private: - Role _role; - bool _metering; - bool _muted_by_self; - bool _muted_by_others; + /* Panning */ + + static int disable_panners (void); + static int reset_panners (void); + + boost::shared_ptr<Panner> panner() const { return _panner; } + + void reset_panner (); + void defer_pan_reset (); + void allow_pan_reset (); + + uint32_t pans_required() const { return _configured_input.n_audio(); } + void start_pan_touch (uint32_t which); + void end_pan_touch (uint32_t which); + + protected: + Role _role; + BufferSet* _output_buffers; + gain_t _current_gain; + nframes_t _output_offset; + bool _no_outs_cuz_we_no_monitor; + uint32_t _solo_level; + bool _solo_isolated; + boost::shared_ptr<MuteMaster> _mute_master; + bool no_panner_reset; + boost::shared_ptr<Panner> _panner; + + static bool panners_legal; + static sigc::signal<int> PannersLegal; + + int panners_became_legal (); + sigc::connection panner_legal_c; + void output_changed (IOChange, void*); + + gain_t target_gain (); }; |