Changed send/deliver role "Personal" to "Foldback" so bus type can match
[ardour.git] / libs / ardour / ardour / delivery.h
index 0e55356928fc259f640b93d7859e8c58b082fea0..63d423b8fb6320165f51a8b43909a71eaa1b85e1 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <string>
 
+#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> io, boost::shared_ptr<Pannable>, boost::shared_ptr<MuteMaster> mm, const std::string& name, Role);
@@ -65,60 +70,62 @@ 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);
-       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<void> MuteChange;
 
-       static PBD::Signal1<void, pframes_t> 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<PannerShell> panner_shell() const { return _panshell; }
        boost::shared_ptr<Panner> panner() const;
 
+       void unpan ();
        void reset_panner ();
        void defer_pan_reset ();
        void allow_pan_reset ();
 
        uint32_t pans_required() const { return _configured_input.n_audio(); }
+       virtual uint32_t pan_outs() const;
+
+protected:
+       XMLNode& state ();
 
-  protected:
        Role        _role;
        BufferSet*  _output_buffers;
        gain_t      _current_gain;
+       boost::shared_ptr<PannerShell> _panshell;
+
+       gain_t target_gain ();
+
+private:
        bool        _no_outs_cuz_we_no_monitor;
        boost::shared_ptr<MuteMaster> _mute_master;
-       bool         no_panner_reset;
-       boost::shared_ptr<PannerShell> _panshell;
-       framecnt_t   scnt;
 
        static bool panners_legal;
-       static PBD::Signal0<int>            PannersLegal;
+       static PBD::Signal0<void> 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;
 };