X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fpanner_shell.h;h=59b0e7da81e0c91b12fb8fbe32f4bd8814bf1612;hb=88c82aeb56c62d9d0c0acff51e360492ad9b8d23;hp=dba5826370dbd65fe3a6a3c9bea6ff4c4e492dae;hpb=616f2a0370a10dcc7372a95f6bca9f5a45698980;p=ardour.git diff --git a/libs/ardour/ardour/panner_shell.h b/libs/ardour/ardour/panner_shell.h index dba5826370..59b0e7da81 100644 --- a/libs/ardour/ardour/panner_shell.h +++ b/libs/ardour/ardour/panner_shell.h @@ -30,12 +30,14 @@ #include "pbd/cartesian.h" +#include "ardour/libardour_visibility.h" #include "ardour/types.h" #include "ardour/session_object.h" namespace ARDOUR { class Session; +class Route; class Panner; class BufferSet; class AudioBuffer; @@ -45,10 +47,10 @@ class Pannable; /** Class to manage panning by instantiating and controlling * an appropriate Panner object for a given in/out configuration. */ -class PannerShell : public SessionObject +class LIBARDOUR_API PannerShell : public SessionObject { public: - PannerShell (std::string name, Session&, boost::shared_ptr); + PannerShell (std::string name, Session&, boost::shared_ptr, bool is_send = false); virtual ~PannerShell (); std::string describe_parameter (Evoral::Parameter param); @@ -57,24 +59,48 @@ public: void configure_io (ChanCount in, ChanCount out); /// The fundamental Panner function - void run (BufferSet& src, BufferSet& dest, framepos_t start_frame, framepos_t end_frames, pframes_t nframes); + void run (BufferSet& src, BufferSet& dest, samplepos_t start_sample, samplepos_t end_samples, pframes_t nframes); XMLNode& get_state (); int set_state (const XMLNode&, int version); + PBD::Signal0 PannableChanged; /* Pannable changed -- l*/ PBD::Signal0 Changed; /* panner and/or outputs count and/or bypass state changed */ boost::shared_ptr panner() const { return _panner; } - boost::shared_ptr pannable() const { return _pannable; } + boost::shared_ptr pannable() const { return _panlinked ? _pannable_route : _pannable_internal; } bool bypassed () const; void set_bypassed (bool); + bool is_send () const { return (_is_send); } + bool is_linked_to_route () const { return (_is_send && _panlinked); } + /* this function takes the process lock: */ + void set_linked_to_route (bool); + + std::string current_panner_uri() const { return _current_panner_uri; } + std::string user_selected_panner_uri() const { return _user_selected_panner_uri; } + std::string panner_gui_uri() const { return _panner_gui_uri; } + + /* this function takes the process lock: */ + bool select_panner_by_uri (std::string const uri); + private: void distribute_no_automation (BufferSet& src, BufferSet& dest, pframes_t nframes, gain_t gain_coeff); + bool set_user_selected_panner_uri (std::string const uri); + boost::shared_ptr _panner; - boost::shared_ptr _pannable; + + boost::shared_ptr _pannable_internal; + boost::shared_ptr _pannable_route; + bool _is_send; + bool _panlinked; bool _bypassed; + + std::string _current_panner_uri; + std::string _user_selected_panner_uri; + std::string _panner_gui_uri; + bool _force_reselect; }; } // namespace ARDOUR