X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fladspa_plugin.h;h=00f00c99b6dd7737f305b74913cd7eb93e22952c;hb=9e0d03020ff47773f7d1c0414de1c74e6c9e0dac;hp=99fc8848984d440823847feb35b3a3fadb54eaff;hpb=5fdfe49406db9de3431b099cd89a2233f43a6163;p=ardour.git diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h index 99fc884898..00f00c99b6 100644 --- a/libs/ardour/ardour/ladspa_plugin.h +++ b/libs/ardour/ardour/ladspa_plugin.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2006 Paul Davis + Copyright (C) 2000-2006 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,31 +15,22 @@ 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__ #define __ardour_ladspa_plugin_h__ -#include #include #include #include #include -#include -#include +#include "pbd/stateful.h" #include -#include -#include -#include -#include - -using std::string; -using std::vector; -using std::list; +#include "ardour/ladspa.h" +#include "ardour/plugin.h" namespace ARDOUR { class AudioEngine; @@ -48,47 +39,57 @@ class Session; class LadspaPlugin : public ARDOUR::Plugin { public: - LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, jack_nframes_t sample_rate); + LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, nframes_t sample_rate); LadspaPlugin (const LadspaPlugin &); ~LadspaPlugin (); /* 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); - jack_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 automatable() const; - uint32_t nth_parameter (uint32_t port, bool& ok) const; - void activate () { - if (descriptor->activate) { - descriptor->activate (handle); - } - was_activated = true; + + 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 automatable() const; + + void activate () { + 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 (jack_nframes_t nframes) {} - - int connect_and_run (vector& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, jack_nframes_t nframes, jack_nframes_t offset); - void store_state (ARDOUR::PluginState&); - void restore_state (ARDOUR::PluginState&); - string describe_parameter (uint32_t); - string state_node_name() const { return "ladspa"; } - void print_parameter (uint32_t, char*, uint32_t len) const; + + void set_block_size (nframes_t /*nframes*/) {} + + int connect_and_run (BufferSet& bufs, + ChanMapping in, ChanMapping out, + nframes_t nframes, nframes_t offset); + + std::string describe_parameter (Evoral::Parameter); + std::string state_node_name() const { return "ladspa"; } + void print_parameter (uint32_t, char*, uint32_t len) const; bool parameter_is_audio(uint32_t) const; bool parameter_is_control(uint32_t) const; @@ -97,49 +98,45 @@ 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&, int version); + bool save_preset(std::string name); bool has_editor() const { return false; } int require_output_streams (uint32_t); - + /* 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; - jack_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, jack_nframes_t rate); - void run (jack_nframes_t nsamples); + 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_in_place (nframes_t nsamples); void latency_compute_run (); + int set_state_2X (const XMLNode&, int version); }; class LadspaPluginInfo : public PluginInfo { - public: + public: LadspaPluginInfo () { }; ~LadspaPluginInfo () { };