'libs/panners' - Fix a typo in 'vbap/vbap.cc'
[ardour.git] / libs / panners / vbap / vbap.h
index aacff8894ce182bf5c33586e8e50744134424550..e90bbc6fb13ad5971b57e8275a7fc012f4fb13b7 100644 (file)
@@ -26,7 +26,8 @@
 
 #include "ardour/panner.h"
 #include "ardour/panner_shell.h"
-#include "ardour/vbap_speakers.h"
+
+#include "vbap_speakers.h"
 
 namespace ARDOUR {
 
@@ -36,51 +37,56 @@ class Pannable;
 class VBAPanner : public Panner 
 { 
 public:
-       VBAPanner (boost::shared_ptr<Pannable>, Speakers& s);
+       VBAPanner (boost::shared_ptr<Pannable>, boost::shared_ptr<Speakers>);
        ~VBAPanner ();
 
-        void configure_io (const ChanCount& in, const ChanCount& /* ignored - we use Speakers */);
+        void configure_io (ChanCount in, ChanCount /* ignored - we use Speakers */);
         ChanCount in() const;
         ChanCount out() const;
 
-       static Panner* factory (boost::shared_ptr<Pannable>, Speakers& s);
+        void set_position (double);
+        void set_width (double);
+
+        std::set<Evoral::Parameter> what_can_be_automated() const;
+
+       static Panner* factory (boost::shared_ptr<Pannable>, boost::shared_ptr<Speakers>);
 
-       void do_distribute (BufferSet& ibufs, BufferSet& obufs, gain_t gain_coeff, pframes_t nframes);
-       void do_distribute_automated (BufferSet& ibufs, BufferSet& obufs,
-                                     framepos_t start, framepos_t end, pframes_t nframes, pan_t** buffers);
+       void distribute (BufferSet& ibufs, BufferSet& obufs, gain_t gain_coeff, pframes_t nframes);
 
        void set_azimuth_elevation (double azimuth, double elevation);
 
-       XMLNode& state (bool full_state);
+        std::string describe_parameter (Evoral::Parameter);
+        std::string value_as_string (boost::shared_ptr<AutomationControl>) const;
+
        XMLNode& get_state ();
-       int set_state (const XMLNode&, int version);
 
-        boost::shared_ptr<AutomationControl> azimuth_control (uint32_t signal);
-        boost::shared_ptr<AutomationControl> evelation_control (uint32_t signal);
+        PBD::AngularVector signal_position (uint32_t n) const;
+        boost::shared_ptr<Speakers> get_speakers() const;
 
-        std::string describe_parameter (Evoral::Parameter param);
+       void reset ();
 
 private:
         struct Signal {
             PBD::AngularVector direction;
-            double gains[3];
-            double desired_gains[3];
-            int    outputs[3];
-            int    desired_outputs[3];
-            boost::shared_ptr<AutomationControl> azimuth_control;
-            boost::shared_ptr<AutomationControl> elevation_control;
-
-            Signal (Session&, VBAPanner&, uint32_t which);
+            std::vector<double> gains; /* most recently used gain for all speakers */
+
+            int outputs[3];  /* most recent set of outputs used (2 or 3, depending on dimension) */
+            int desired_outputs[3]; /* outputs to use the next time we distribute */
+            double desired_gains[3]; /* target gains for desired_outputs */
+
+            Signal (Session&, VBAPanner&, uint32_t which, uint32_t n_speakers);
+            void resize_gains (uint32_t n_speakers);
         };
 
         std::vector<Signal*> _signals;
-       bool                _dirty;
-        VBAPSpeakers&       _speakers;
+        boost::shared_ptr<VBAPSpeakers>  _speakers;
         
        void compute_gains (double g[3], int ls[3], int azi, int ele);
+        void update ();
+        void clear_signals ();
 
-       void do_distribute_one (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, pframes_t nframes, uint32_t which);
-       void do_distribute_one_automated (AudioBuffer& src, BufferSet& obufs,
+       void distribute_one (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, pframes_t nframes, uint32_t which);
+       void distribute_one_automated (AudioBuffer& src, BufferSet& obufs,
                                           framepos_t start, framepos_t end, pframes_t nframes, 
                                           pan_t** buffers, uint32_t which);
 };