Add a dedicated export method to MidiRegion
[ardour.git] / libs / ardour / ardour / ladspa_plugin.h
index 457921cf36715baa0e812fc6989fd3cac6fa80d1..dbb635fd91132fe3e80a1e36501a090c5b9d6ea5 100644 (file)
 #include <set>
 #include <vector>
 #include <string>
-#include <dlfcn.h>
 
+#include <glibmm/module.h>
 
 #include "pbd/stateful.h"
 
-#include <jack/types.h>
 #include "ardour/ladspa.h"
 #include "ardour/plugin.h"
 
@@ -36,10 +35,10 @@ namespace ARDOUR {
 class AudioEngine;
 class Session;
 
-class LadspaPlugin : public ARDOUR::Plugin
+class LIBARDOUR_API LadspaPlugin : public ARDOUR::Plugin
 {
   public:
-       LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, framecnt_t sample_rate);
+       LadspaPlugin (std::string module_path, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, framecnt_t sample_rate);
        LadspaPlugin (const LadspaPlugin &);
        ~LadspaPlugin ();
 
@@ -50,7 +49,7 @@ class LadspaPlugin : public ARDOUR::Plugin
        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);
+       float       default_value (uint32_t port) { return _default_value (port); }
        framecnt_t  signal_latency() const;
        void        set_parameter (uint32_t port, float val);
        float       get_parameter (uint32_t port) const;
@@ -84,6 +83,7 @@ class LadspaPlugin : public ARDOUR::Plugin
        int set_block_size (pframes_t /*nframes*/) { return 0; }
 
        int connect_and_run (BufferSet& bufs,
+                       framepos_t start, framepos_t end, double speed,
                        ChanMapping in, ChanMapping out,
                        pframes_t nframes, framecnt_t offset);
 
@@ -97,20 +97,21 @@ class LadspaPlugin : public ARDOUR::Plugin
        bool parameter_is_output(uint32_t) const;
        bool parameter_is_toggled(uint32_t) const;
 
-       int      set_state (const XMLNode&, int version);
+       boost::shared_ptr<ScalePoints>
+       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]; }
+       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; }
 
@@ -119,7 +120,9 @@ class LadspaPlugin : public ARDOUR::Plugin
        void connect_port (uint32_t port, float *ptr) { _descriptor->connect_port (_handle, port, ptr); }
 
   private:
-       void*                    _module;
+       float                    _default_value (uint32_t port) const;
+       std::string              _module_path;
+       Glib::Module*            _module;
        const LADSPA_Descriptor* _descriptor;
        LADSPA_Handle            _handle;
        framecnt_t               _sample_rate;
@@ -130,8 +133,8 @@ class LadspaPlugin : public ARDOUR::Plugin
        bool                     _was_activated;
 
        void find_presets ();
-       
-       void init (void *mod, uint32_t index, framecnt_t rate);
+
+       void init (std::string module_path, 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);
@@ -143,12 +146,13 @@ class LadspaPlugin : public ARDOUR::Plugin
        void add_state (XMLNode *) const;
 };
 
-class LadspaPluginInfo : public PluginInfo {
+class LIBARDOUR_API LadspaPluginInfo : public PluginInfo {
   public:
        LadspaPluginInfo ();
        ~LadspaPluginInfo () { };
 
        PluginPtr load (Session& session);
+       std::vector<Plugin::PresetRecord> get_presets (bool user_only) const;
 };
 
 typedef boost::shared_ptr<LadspaPluginInfo> LadspaPluginInfoPtr;