diff options
author | Taybin Rutkin <taybin@taybin.com> | 2006-08-03 17:17:38 +0000 |
---|---|---|
committer | Taybin Rutkin <taybin@taybin.com> | 2006-08-03 17:17:38 +0000 |
commit | 5fdfe49406db9de3431b099cd89a2233f43a6163 (patch) | |
tree | 6992819edab3e8bb1a355e9aa735255bb13a5d2f /libs/ardour/ardour | |
parent | e46924420fb60823b96cbe297c588a32fa5cce88 (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.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/audio_unit.h | 42 | ||||
-rw-r--r-- | libs/ardour/ardour/ladspa_plugin.h | 15 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin.h | 27 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_manager.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/vst_plugin.h | 10 |
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__ */ |