summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2006-08-03 17:17:38 +0000
committerTaybin Rutkin <taybin@taybin.com>2006-08-03 17:17:38 +0000
commit5fdfe49406db9de3431b099cd89a2233f43a6163 (patch)
tree6992819edab3e8bb1a355e9aa735255bb13a5d2f /libs/ardour/ardour
parente46924420fb60823b96cbe297c588a32fa5cce88 (diff)
Most PluginManager refactoring is out of the way. Time to begin on AudioUnit support for real.
git-svn-id: svn://localhost/ardour2/trunk@752 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/ardour.h2
-rw-r--r--libs/ardour/ardour/audio_unit.h42
-rw-r--r--libs/ardour/ardour/ladspa_plugin.h15
-rw-r--r--libs/ardour/ardour/plugin.h27
-rw-r--r--libs/ardour/ardour/plugin_manager.h8
-rw-r--r--libs/ardour/ardour/vst_plugin.h10
6 files changed, 81 insertions, 23 deletions
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h
index ba92416339..e3b7cf2313 100644
--- a/libs/ardour/ardour/ardour.h
+++ b/libs/ardour/ardour/ardour.h
@@ -45,7 +45,7 @@ namespace ARDOUR {
static const jack_nframes_t max_frames = JACK_MAX_FRAMES;
- int init (AudioEngine&, bool with_vst, bool try_optimization);
+ int init (bool with_vst, bool try_optimization);
int cleanup ();
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index 51ef00c592..0d64e38ffc 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -31,11 +31,51 @@ struct ComponentDescription;
namespace ARDOUR {
+class CAAudioUnit;
+
class AUPlugin : public ARDOUR::Plugin
{
public:
AUPlugin (AudioEngine& engine, Session& session) : Plugin(engine, session) {};
virtual ~AUPlugin () {};
+
+ uint32_t unique_id () const;
+ const char * label () const;
+ const char * name () const { return _info->name.c_str(); }
+ const char * maker () const;
+ uint32_t parameter_count () const;
+ float default_value (uint32_t port);
+ jack_nframes_t latency () const;
+ void set_parameter (uint32_t which, float val);
+ float get_parameter (uint32_t which) const;
+
+ int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
+ uint32_t nth_parameter (uint32_t which, bool& ok) const;
+ void activate ();
+ void deactivate ();
+ void set_block_size (jack_nframes_t nframes);
+
+ int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, jack_nframes_t nframes, jack_nframes_t offset);
+ std::set<uint32_t> automatable() const;
+ void store_state (ARDOUR::PluginState&);
+ void restore_state (ARDOUR::PluginState&);
+ string describe_parameter (uint32_t);
+ string state_node_name () 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;
+ bool parameter_is_input (uint32_t) const;
+ bool parameter_is_output (uint32_t) const;
+
+ bool save_preset (string name);
+ bool load_preset (const string preset_label);
+ std::vector<std::string> get_presets ();
+
+ bool has_editor () const;
+
+ private:
+ boost::shared_ptr<CAAudioUnit> unit;
};
class AUPluginInfo : public PluginInfo {
@@ -48,6 +88,7 @@ class AUPluginInfo : public PluginInfo {
CompDescPtr desc;
static PluginInfoList discover ();
+ PluginPtr load (Session& session);
private:
static std::string get_name (ComponentDescription&);
@@ -58,4 +99,3 @@ typedef boost::shared_ptr<AUPluginInfo> AUPluginInfoPtr;
} // namespace ARDOUR
#endif // __ardour_audio_unit_h__
-
diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h
index e4aba93ef6..99fc884898 100644
--- a/libs/ardour/ardour/ladspa_plugin.h
+++ b/libs/ardour/ardour/ladspa_plugin.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2000 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
@@ -137,6 +137,17 @@ class LadspaPlugin : public ARDOUR::Plugin
void run (jack_nframes_t nsamples);
void latency_compute_run ();
};
-}
+
+class LadspaPluginInfo : public PluginInfo {
+ public:
+ LadspaPluginInfo () { };
+ ~LadspaPluginInfo () { };
+
+ PluginPtr load (Session& session);
+};
+
+typedef boost::shared_ptr<LadspaPluginInfo> LadspaPluginInfoPtr;
+
+} // namespace ARDOUR
#endif /* __ardour_ladspa_plugin_h__ */
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 86666c19af..c0c8663244 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2000 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
@@ -18,8 +18,8 @@
$Id$
*/
-#ifndef __ardour_ladspa_h__
-#define __ardour_ladspa_h__
+#ifndef __ardour_plugin_h__
+#define __ardour_plugin_h__
#include <boost/shared_ptr.hpp>
#include <sigc++/signal.h>
@@ -46,6 +46,9 @@ namespace ARDOUR {
class AudioEngine;
class Session;
+class Plugin;
+typedef boost::shared_ptr<Plugin> PluginPtr;
+
class PluginInfo {
public:
enum Type {
@@ -54,11 +57,12 @@ class PluginInfo {
VST
};
- PluginInfo () { };
+ PluginInfo () { }
PluginInfo (const PluginInfo &o)
: name(o.name), n_inputs(o.n_inputs), n_outputs(o.n_outputs),
unique_id(o.unique_id), path (o.path), index(o.index) {}
- ~PluginInfo () { };
+ virtual ~PluginInfo () { }
+
string name;
string category;
uint32_t n_inputs;
@@ -67,7 +71,9 @@ class PluginInfo {
long unique_id;
- private:
+ virtual PluginPtr load (Session& session) = 0;
+
+ protected:
friend class PluginManager;
string path;
uint32_t index;
@@ -82,7 +88,7 @@ class Plugin : public Stateful, public sigc::trackable
public:
Plugin (ARDOUR::AudioEngine&, ARDOUR::Session&);
Plugin (const Plugin&);
- ~Plugin ();
+ virtual ~Plugin ();
struct ParameterDescriptor {
@@ -143,8 +149,8 @@ class Plugin : public Stateful, public sigc::trackable
PBD::Controllable *get_nth_control (uint32_t);
- PluginInfo & get_info() { return _info; }
- void set_info (const PluginInfo &inf) { _info = inf; }
+ PluginInfoPtr get_info() { return _info; }
+ void set_info (const PluginInfoPtr inf) { _info = inf; }
ARDOUR::AudioEngine& engine() const { return _engine; }
ARDOUR::Session& session() const { return _session; }
@@ -155,7 +161,7 @@ class Plugin : public Stateful, public sigc::trackable
protected:
ARDOUR::AudioEngine& _engine;
ARDOUR::Session& _session;
- PluginInfo _info;
+ PluginInfoPtr _info;
uint32_t _cycles;
map<string,string> presets;
bool save_preset(string name, string domain /* vst, ladspa etc. */);
@@ -182,7 +188,6 @@ class Plugin : public Stateful, public sigc::trackable
};
/* this is actually defined in plugin_manager.cc */
-
boost::shared_ptr<Plugin> find_plugin(ARDOUR::Session&, string name, long unique_id, PluginInfo::Type);
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h
index e051eb2a58..8e6c0bd1c7 100644
--- a/libs/ardour/ardour/plugin_manager.h
+++ b/libs/ardour/ardour/plugin_manager.h
@@ -5,22 +5,19 @@
#include <map>
#include <string>
-#include <boost/shared_ptr.hpp>
-
#include <ardour/types.h>
#include <ardour/plugin.h>
#include <ardour/audio_unit.h>
namespace ARDOUR {
-class PluginInfo;
class Plugin;
class Session;
class AudioEngine;
class PluginManager {
public:
- PluginManager (ARDOUR::AudioEngine&);
+ PluginManager ();
~PluginManager ();
ARDOUR::PluginInfoList &vst_plugin_info () { return _vst_plugin_info; }
@@ -31,12 +28,9 @@ class PluginManager {
int add_ladspa_directory (std::string dirpath);
int add_vst_directory (std::string dirpath);
- boost::shared_ptr<Plugin> load (ARDOUR::Session& s, PluginInfoPtr info);
-
static PluginManager* the_manager() { return _manager; }
private:
- ARDOUR::AudioEngine& _engine;
ARDOUR::PluginInfoList _vst_plugin_info;
ARDOUR::PluginInfoList _ladspa_plugin_info;
std::map<uint32_t, std::string> rdf_type;
diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h
index 3cb10d1779..3636fe275a 100644
--- a/libs/ardour/ardour/vst_plugin.h
+++ b/libs/ardour/ardour/vst_plugin.h
@@ -104,6 +104,14 @@ class VSTPlugin : public ARDOUR::Plugin
bool been_resumed;
};
-}
+class VSTPluginInfo : public PluginInfo
+{
+ VSTPluginInfo () {}
+ ~VSTPluginInfo () {}
+
+ PluginPtr load (Session& session);
+};
+
+} // namespace ARDOUR
#endif /* __ardour_vst_plugin_h__ */