Merge with 2.0-ongoing R2885.
[ardour.git] / libs / ardour / ardour / ladspa_plugin.h
index aeac7f05c6b3d8b71b0660ec9bfe3367fef0623c..976584b68798494f959f8ef967c0baeeedc80a70 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __ardour_ladspa_plugin_h__
@@ -53,39 +52,48 @@ class LadspaPlugin : public ARDOUR::Plugin
 
        /* Plugin interface */
        
-       uint32_t unique_id() const                       { return descriptor->UniqueID; }
-       const char * label() const                       { return descriptor->Label; }
-       const char * name() const                        { return descriptor->Name; }
-       const char * maker() const                       { return descriptor->Maker; }
-       uint32_t parameter_count() const                 { return descriptor->PortCount; }
-       float default_value (uint32_t port);
-       nframes_t latency() const;
-       void set_parameter (uint32_t port, float val);
-       float get_parameter (uint32_t port) const;
-       int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
-       std::set<uint32_t> automatable() const;
-       uint32_t nth_parameter (uint32_t port, bool& ok) const;
+       std::string unique_id() const;
+       const char* label() const           { return _descriptor->Label; }
+       const char* name() const            { return _descriptor->Name; }
+       const char* maker() const           { return _descriptor->Maker; }
+       uint32_t    parameter_count() const { return _descriptor->PortCount; }
+       float       default_value (uint32_t port);
+       nframes_t   signal_latency() const;
+       void        set_parameter (uint32_t port, float val);
+       float       get_parameter (uint32_t port) const;
+       int         get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
+       uint32_t    nth_parameter (uint32_t port, bool& ok) const;
+       
+       std::set<Parameter> automatable() const;
+
        void activate () { 
-               if (descriptor->activate) {
-                       descriptor->activate (handle);
-               }
-               was_activated = true;
+               if (!_was_activated && _descriptor->activate)
+                       _descriptor->activate (_handle);
+
+               _was_activated = true;
        }
+
        void deactivate () {
-               if (descriptor->deactivate) 
-                       descriptor->deactivate (handle);
+               if (_was_activated && _descriptor->deactivate)
+                       _descriptor->deactivate (_handle);
+
+               _was_activated = false;
        }
+
        void cleanup () {
-               if (was_activated && descriptor->cleanup) {
-                       descriptor->cleanup (handle);
-               }
+               activate();
+               deactivate();
+
+               if (_descriptor->cleanup)
+                       _descriptor->cleanup (_handle);
        }
+
        void set_block_size (nframes_t nframes) {}
        
-       int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset);
-       string describe_parameter (uint32_t);
+       int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, nframes_t nframes, nframes_t offset);
+       string describe_parameter (Parameter);
        string state_node_name() const { return "ladspa"; }
-       void print_parameter (uint32_t, char*, uint32_t len) const;
+       void   print_parameter (uint32_t, char*, uint32_t len) const;
 
        bool parameter_is_audio(uint32_t) const;
        bool parameter_is_control(uint32_t) const;
@@ -94,8 +102,8 @@ class LadspaPlugin : public ARDOUR::Plugin
        bool parameter_is_toggled(uint32_t) const;
 
        XMLNode& get_state();
-       int set_state(const XMLNode& node);
-       bool save_preset(string name);
+       int      set_state(const XMLNode& node);
+       bool     save_preset(string name);
 
        bool has_editor() const { return false; }
 
@@ -103,35 +111,30 @@ class LadspaPlugin : public ARDOUR::Plugin
        
        /* LADSPA extras */
 
-       LADSPA_Properties properties() const             { return descriptor->Properties; }
-       uint32_t index() const                      { return _index; }
-       const char * copyright() const                   { return descriptor->Copyright; }
-       LADSPA_PortDescriptor port_descriptor(uint32_t i) const { return descriptor->PortDescriptors[i]; }
-       const LADSPA_PortRangeHint * port_range_hints() const { return descriptor->PortRangeHints; }
-       const char * const * port_names() const          { return descriptor->PortNames; }
-       void set_gain (float gain) {
-               descriptor->set_run_adding_gain (handle, gain);
-       }
-       void run_adding (uint32_t nsamples) {
-               descriptor->run_adding (handle, nsamples);
-       }
-       void connect_port (uint32_t port, float *ptr) {
-               descriptor->connect_port (handle, port, ptr);
-       }
+       LADSPA_Properties           properties() const                { return _descriptor->Properties; }
+       uint32_t                    index() const                     { return _index; }
+       const char *                copyright() const                 { return _descriptor->Copyright; }
+       LADSPA_PortDescriptor       port_descriptor(uint32_t i) const { return _descriptor->PortDescriptors[i]; }
+       const LADSPA_PortRangeHint* port_range_hints() const          { return _descriptor->PortRangeHints; }
+       const char * const *        port_names() const                { return _descriptor->PortNames; }
+       
+       void set_gain (float gain)                    { _descriptor->set_run_adding_gain (_handle, gain); }
+       void run_adding (uint32_t nsamples)           { _descriptor->run_adding (_handle, nsamples); }
+       void connect_port (uint32_t port, float *ptr) { _descriptor->connect_port (_handle, port, ptr); }
 
   private:
-       void                    *module;
-       const LADSPA_Descriptor *descriptor;
-       LADSPA_Handle            handle;
-       nframes_t           sample_rate;
-       LADSPA_Data             *control_data;
-       LADSPA_Data             *shadow_data;
-       LADSPA_Data             *latency_control_port;
-       uint32_t                _index;
-       bool                     was_activated;
+       void*                    _module;
+       const LADSPA_Descriptor* _descriptor;
+       LADSPA_Handle            _handle;
+       nframes_t                _sample_rate;
+       LADSPA_Data*             _control_data;
+       LADSPA_Data*             _shadow_data;
+       LADSPA_Data*             _latency_control_port;
+       uint32_t                 _index;
+       bool                     _was_activated;
 
        void init (void *mod, uint32_t index, nframes_t rate);
-       void run (nframes_t nsamples);
+       void run_in_place (nframes_t nsamples);
        void latency_compute_run ();
 };