X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fpanner_shell.h;h=02f80c7b28bc0db237c6d298593055270f407897;hb=e279b9892b467aa823e253d97b6e9504cca0e252;hp=4749cd4dcefe6f603ef647ec22db42c461de74e3;hpb=a473d630eb165272992e90f8d854b1d66ec0be63;p=ardour.git diff --git a/libs/ardour/ardour/panner_shell.h b/libs/ardour/ardour/panner_shell.h index 4749cd4dce..02f80c7b28 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; @@ -43,39 +45,63 @@ class Speakers; class Pannable; /** Class to manage panning by instantiating and controlling - * the appropriate specific PannerBase objects for a given - * in/out configuration. + * 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); - bool can_support_io_configuration (const ChanCount& /*in*/, ChanCount& /*out*/) const { return true; }; + bool can_support_io_configuration (const ChanCount& /*in*/, ChanCount& /*out*/) { return true; }; 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); - - XMLNode& get_state (void); - XMLNode& state (bool full); + XMLNode& get_state (); int set_state (const XMLNode&, int version); - PBD::Signal0 Changed; /* panner and/or outputs count changed */ + 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: + friend class Route; 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; - static float current_automation_version_number; + 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