X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fdelivery.h;h=63d423b8fb6320165f51a8b43909a71eaa1b85e1;hb=f27ca29d6c7e294a71c46d2e3390331aa72ad1d0;hp=e74d0cc52427406de02f6e4373fcc82505beb11b;hpb=9a0d7cafebcda82c4745b1db7d4d36aa37b8db4b;p=ardour.git diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h index e74d0cc524..63d423b8fb 100644 --- a/libs/ardour/ardour/delivery.h +++ b/libs/ardour/ardour/delivery.h @@ -21,6 +21,7 @@ #include +#include "ardour/libardour_visibility.h" #include "ardour/types.h" #include "ardour/chan_count.h" #include "ardour/io_processor.h" @@ -34,7 +35,7 @@ class PannerShell; class Panner; class Pannable; -class Delivery : public IOProcessor +class LIBARDOUR_API Delivery : public IOProcessor { public: enum Role { @@ -47,11 +48,15 @@ public: /* 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 + Aux = 0x10, + /* foldback - internal send used only to deliver to a personal monitor bus */ + Foldback = 0x20 }; static bool role_requires_output_ports (Role r) { return r == Main || r == Send || r == Insert; } + bool does_routing() const { return true; } + /* Delivery to an existing output */ Delivery (Session& s, boost::shared_ptr io, boost::shared_ptr, boost::shared_ptr mm, const std::string& name, Role); @@ -65,32 +70,28 @@ public: std::string display_name() const; Role role() const { return _role; } - bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const; + bool can_support_io_configuration (const ChanCount& in, ChanCount& out); bool configure_io (ChanCount in, ChanCount out); - void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool); + void run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample, double speed, pframes_t nframes, bool); /* supplemental method used with MIDI */ - void flush_buffers (framecnt_t nframes, framepos_t time); + void flush_buffers (samplecnt_t nframes); void no_outs_cuz_we_no_monitor(bool); - virtual void cycle_start (pframes_t); - void transport_stopped (framepos_t frame); + void non_realtime_transport_stop (samplepos_t now, bool flush); void realtime_locate (); BufferSet& output_buffers() { return *_output_buffers; } PBD::Signal0 MuteChange; - static PBD::Signal1 CycleStart; - - XMLNode& state (bool full); int set_state (const XMLNode&, int version); /* Panning */ static int disable_panners (void); - static int reset_panners (void); + static void reset_panners (); boost::shared_ptr panner_shell() const { return _panshell; } boost::shared_ptr panner() const; @@ -103,23 +104,28 @@ public: uint32_t pans_required() const { return _configured_input.n_audio(); } virtual uint32_t pan_outs() const; - protected: +protected: + XMLNode& state (); + Role _role; BufferSet* _output_buffers; gain_t _current_gain; + boost::shared_ptr _panshell; + + gain_t target_gain (); + +private: bool _no_outs_cuz_we_no_monitor; boost::shared_ptr _mute_master; - bool no_panner_reset; - boost::shared_ptr _panshell; static bool panners_legal; - static PBD::Signal0 PannersLegal; + static PBD::Signal0 PannersLegal; - int panners_became_legal (); + void panners_became_legal (); PBD::ScopedConnection panner_legal_c; void output_changed (IOChange, void*); - gain_t target_gain (); + bool _no_panner_reset; };