X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fladspa_plugin.h;h=6853a1dc367f38c31c6749f1c1035cd96064bf8e;hb=97d920593ffc796986107e16d7bbf88cc3184043;hp=aeac7f05c6b3d8b71b0660ec9bfe3367fef0623c;hpb=5695b1790e3fdee4f15a45ed507e41ac866917cd;p=ardour.git diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h index aeac7f05c6..6853a1dc36 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,30 +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 - -using std::string; -using std::vector; -using std::list; +#include "ardour/ladspa.h" +#include "ardour/plugin.h" namespace ARDOUR { class AudioEngine; @@ -47,45 +39,57 @@ class Session; class LadspaPlugin : public ARDOUR::Plugin { public: - LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, nframes_t sample_rate); + LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, framecnt_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); - 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); + framecnt_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 (nframes_t nframes) {} - - int connect_and_run (vector& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset); - string describe_parameter (uint32_t); - string state_node_name() const { return "ladspa"; } - void print_parameter (uint32_t, char*, uint32_t len) const; + + int set_block_size (pframes_t /*nframes*/) { return 0; } + + int connect_and_run (BufferSet& bufs, + ChanMapping in, ChanMapping out, + pframes_t nframes, framecnt_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; @@ -93,51 +97,58 @@ class LadspaPlugin : public ARDOUR::Plugin bool parameter_is_output(uint32_t) const; bool parameter_is_toggled(uint32_t) const; - XMLNode& get_state(); - int set_state(const XMLNode& node); - bool save_preset(string name); + boost::shared_ptr + get_scale_points(uint32_t port_index) const; + + int set_state (const XMLNode&, int version); + + bool load_preset (PresetRecord); 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; + 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 init (void *mod, uint32_t index, nframes_t rate); - void run (nframes_t nsamples); + void* _module; + const LADSPA_Descriptor* _descriptor; + LADSPA_Handle _handle; + framecnt_t _sample_rate; + LADSPA_Data* _control_data; + LADSPA_Data* _shadow_data; + LADSPA_Data* _latency_control_port; + uint32_t _index; + bool _was_activated; + + void find_presets (); + + void init (void *mod, uint32_t index, framecnt_t rate); + void run_in_place (pframes_t nsamples); void latency_compute_run (); + int set_state_2X (const XMLNode&, int version); + std::string do_save_preset (std::string name); + void do_remove_preset (std::string name); + std::string preset_envvar () const; + std::string preset_source (std::string) const; + bool write_preset_file (std::string); + void add_state (XMLNode *) const; }; class LadspaPluginInfo : public PluginInfo { - public: - LadspaPluginInfo () { }; + public: + LadspaPluginInfo (); ~LadspaPluginInfo () { }; PluginPtr load (Session& session);