X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fpanner.h;h=947baca73382cb26a68a05ef796f4d59590fcf72;hb=30b087ab3d28f1585987fa3f6ae006562ae192e3;hp=51d75ebf03286c0d0ed10bd2b82e949fb157bebd;hpb=8f7fa7d93b47665c14e452b06e0fb017d0dd653d;p=ardour.git diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h index 51d75ebf03..947baca733 100644 --- a/libs/ardour/ardour/panner.h +++ b/libs/ardour/ardour/panner.h @@ -30,10 +30,23 @@ #include "pbd/signals.h" #include "pbd/stateful.h" +#include "ardour/libardour_visibility.h" #include "ardour/types.h" #include "ardour/automation_control.h" #include "ardour/automatable.h" + +/* This section is for actual panners to use. They will include this file, + * declare ARDOURPANNER_DLL_EXPORTS during compilation, and ... voila. + */ + +#ifdef ARDOURPANNER_DLL_EXPORTS // defined if we are building a panner implementation + #define ARDOURPANNER_API LIBARDOUR_DLL_EXPORT + #else + #define ARDOURPANNER_API LIBARDOUR_DLL_IMPORT + #endif +#define ARDOURPANNER_LOCAL LIBARDOUR_DLL_LOCAL + namespace ARDOUR { class Session; @@ -42,7 +55,7 @@ class BufferSet; class AudioBuffer; class Speakers; -class Panner : public PBD::Stateful, public PBD::ScopedConnectionList +class LIBARDOUR_API Panner : public PBD::Stateful, public PBD::ScopedConnectionList { public: Panner (boost::shared_ptr); @@ -71,6 +84,10 @@ public: virtual bool clamp_width (double&) { return true; } virtual bool clamp_elevation (double&) { return true; } + virtual std::pair position_range () const { return std::make_pair (-DBL_MAX, DBL_MAX); } + virtual std::pair width_range () const { return std::make_pair (-DBL_MAX, DBL_MAX); } + virtual std::pair elevation_range () const { return std::make_pair (-DBL_MAX, DBL_MAX); } + virtual void set_position (double) { } virtual void set_width (double) { } virtual void set_elevation (double) { } @@ -83,14 +100,15 @@ public: virtual void reset () = 0; + /* azimut, width or elevation updated -> recalc signal_position -> emit Changed */ + PBD::Signal0 SignalPositionChanged; + void set_automation_state (AutoState); AutoState automation_state() const; - void set_automation_style (AutoStyle); - AutoStyle automation_style() const; virtual std::set what_can_be_automated() const; virtual std::string describe_parameter (Evoral::Parameter); - virtual std::string value_as_string (boost::shared_ptr) const; + virtual std::string value_as_string (boost::shared_ptr) const; bool touching() const; @@ -122,7 +140,7 @@ public: * @param ibufs Input buffers (one per panner input) * @param obufs Output buffers (one per panner output). * @param gain_coeff fixed, additional gain coefficient to apply to output samples. - * @param nframes Number of frames in the input. + * @param nframes Number of samples in the input. * * Derived panners can choose to implement these if they need to gain more * control over the panning algorithm. The default is to call @@ -134,12 +152,12 @@ public: */ virtual void distribute (BufferSet& ibufs, BufferSet& obufs, gain_t gain_coeff, pframes_t nframes); virtual void distribute_automated (BufferSet& ibufs, BufferSet& obufs, - framepos_t start, framepos_t end, pframes_t nframes, + samplepos_t start, samplepos_t end, pframes_t nframes, pan_t** buffers); int set_state (const XMLNode&, int version); XMLNode& get_state (); - + boost::shared_ptr pannable() const { return _pannable; } static bool equivalent (pan_t a, pan_t b) { @@ -151,22 +169,30 @@ public: return fabs (a.azi - b.azi) < 1.0; } + virtual void freeze (); + virtual void thaw (); + protected: boost::shared_ptr _pannable; virtual void distribute_one (AudioBuffer&, BufferSet& obufs, gain_t gain_coeff, pframes_t nframes, uint32_t which) = 0; virtual void distribute_one_automated (AudioBuffer&, BufferSet& obufs, - framepos_t start, framepos_t end, pframes_t nframes, + samplepos_t start, samplepos_t end, pframes_t nframes, pan_t** buffers, uint32_t which) = 0; + + int32_t _frozen; }; } // namespace extern "C" { -struct PanPluginDescriptor { +struct LIBARDOUR_API PanPluginDescriptor { std::string name; + std::string panner_uri; + std::string gui_uri; int32_t in; int32_t out; + uint32_t priority; ARDOUR::Panner* (*factory)(boost::shared_ptr, boost::shared_ptr); }; }