summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-08-10 01:22:45 +0000
committerDavid Robillard <d@drobilla.net>2006-08-10 01:22:45 +0000
commitab6f1ed9bafa869648b6e94ee5186ff317b32c3e (patch)
treed61dba7f9b6f1ae755803afc4b79bcff06a36005 /libs/ardour/ardour
parent38c7d34d8c449c7ce5f7da9575c24e60c6b31b1a (diff)
Merged with trunk R776
git-svn-id: svn://localhost/ardour2/branches/midi@777 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.h76
-rw-r--r--libs/ardour/ardour/automation_event.h8
-rw-r--r--libs/ardour/ardour/ladspa_plugin.h15
-rw-r--r--libs/ardour/ardour/location.h6
-rw-r--r--libs/ardour/ardour/playlist.h3
-rw-r--r--libs/ardour/ardour/plugin.h30
-rw-r--r--libs/ardour/ardour/plugin_manager.h12
-rw-r--r--libs/ardour/ardour/route.h2
-rw-r--r--libs/ardour/ardour/session.h75
-rw-r--r--libs/ardour/ardour/state_manager.h2
-rw-r--r--libs/ardour/ardour/tempo.h3
-rw-r--r--libs/ardour/ardour/track.h2
-rw-r--r--libs/ardour/ardour/vst_plugin.h11
14 files changed, 190 insertions, 57 deletions
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h
index ba92416339..c138cbf32f 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 (AudioEngine& engine, 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 ec437109a4..1c8d6cbc2d 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -21,36 +21,93 @@
#ifndef __ardour_audio_unit_h__
#define __ardour_audio_unit_h__
+#include <stdint.h>
+
#include <list>
+#include <set>
+#include <string>
+#include <vector>
#include <ardour/plugin.h>
#include <boost/shared_ptr.hpp>
-struct ComponentDescription;
+class CAComponent;
+class CAAudioUnit;
+class CAComponentDescription;
+struct AudioBufferList;
namespace ARDOUR {
+class AudioEngine;
+class Session;
+
class AUPlugin : public ARDOUR::Plugin
{
public:
- AUPlugin (AudioEngine& engine, Session& session) : Plugin(engine, session) {};
- virtual ~AUPlugin () {};
+ AUPlugin (AudioEngine& engine, Session& session, CAComponent* comp);
+ 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 { return "audiounit"; }
+ 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;
+
+ XMLNode& get_state();
+ int set_state(const XMLNode& node);
+
+ bool save_preset (string name);
+ bool load_preset (const string preset_label);
+ std::vector<std::string> get_presets ();
+
+ bool has_editor () const;
+
+ private:
+ CAComponent* comp;
+ CAAudioUnit* unit;
+
+ AudioBufferList* in_list;
+ AudioBufferList* out_list;
+
+ std::vector<std::pair<uint32_t, uint32_t> > parameter_map;
};
class AUPluginInfo : public PluginInfo {
- public:
- typedef boost::shared_ptr<ComponentDescription> CompDescPtr;
-
+ public:
AUPluginInfo () { };
- ~AUPluginInfo () { };
+ ~AUPluginInfo ();
- CompDescPtr desc;
+ CAComponentDescription* desc;
static PluginInfoList discover ();
+ PluginPtr load (Session& session);
private:
- friend class PluginManager;
+ static std::string get_name (CAComponentDescription&);
};
typedef boost::shared_ptr<AUPluginInfo> AUPluginInfoPtr;
@@ -58,4 +115,3 @@ typedef boost::shared_ptr<AUPluginInfo> AUPluginInfoPtr;
} // namespace ARDOUR
#endif // __ardour_audio_unit_h__
-
diff --git a/libs/ardour/ardour/automation_event.h b/libs/ardour/ardour/automation_event.h
index 78daa531dd..5864de73c6 100644
--- a/libs/ardour/ardour/automation_event.h
+++ b/libs/ardour/ardour/automation_event.h
@@ -51,7 +51,7 @@ struct ControlEvent {
};
-class AutomationList : public StateManager
+class AutomationList : public StateManager, public Stateful
{
public:
typedef std::list<ControlEvent*> AutomationEventList;
@@ -153,6 +153,11 @@ class AutomationList : public StateManager
virtual void store_state (XMLNode& node) const;
virtual void load_state (const XMLNode&);
+ XMLNode &get_state(void);
+ int set_state (const XMLNode &s);
+
+ PBD::ID id() { return _id; }
+
void set_max_xval (double);
double get_max_xval() const { return max_xval; }
@@ -179,6 +184,7 @@ class AutomationList : public StateManager
};
protected:
+ PBD::ID _id;
struct State : public ARDOUR::StateManager::State {
AutomationEventList events;
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/location.h b/libs/ardour/ardour/location.h
index 30c02a80a1..ff953d1d78 100644
--- a/libs/ardour/ardour/location.h
+++ b/libs/ardour/ardour/location.h
@@ -119,7 +119,10 @@ class Location : public Stateful, public sigc::trackable
XMLNode& get_state (void);
int set_state (const XMLNode&);
+ PBD::ID id() { return _id; }
+
private:
+ PBD::ID _id;
string _name;
jack_nframes_t _start;
jack_nframes_t _end;
@@ -145,6 +148,7 @@ class Locations : public Stateful, public StateManager
XMLNode& get_state (void);
int set_state (const XMLNode&);
+ PBD::ID id() { return _id; }
Location* auto_loop_location () const;
Location* auto_punch_location () const;
@@ -197,6 +201,8 @@ class Locations : public Stateful, public StateManager
Change restore_state (StateManager::State&);
StateManager::State* state_factory (std::string why) const;
+
+ PBD::ID _id;
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h
index 9fb5b0eb2b..b389258860 100644
--- a/libs/ardour/ardour/playlist.h
+++ b/libs/ardour/ardour/playlist.h
@@ -76,6 +76,7 @@ class Playlist : public Stateful, public StateManager {
EditMode get_edit_mode() const { return _edit_mode; }
void set_edit_mode (EditMode);
+ PBD::ID id() { return _id; }
/* Editing operations */
void add_region (const Region&, jack_nframes_t position, float times = 1, bool with_save = true);
@@ -273,6 +274,8 @@ class Playlist : public Stateful, public StateManager {
void unset_freeze_child (Playlist*);
void timestamp_layer_op (Region&);
+
+ PBD::ID _id;
};
} /* namespace ARDOUR */
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 86666c19af..6b11a975ca 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. */);
@@ -181,9 +187,7 @@ class Plugin : public Stateful, public sigc::trackable
vector<PortControllable*> controls;
};
-/* this is actually defined in plugin_manager.cc */
-
-boost::shared_ptr<Plugin> find_plugin(ARDOUR::Session&, string name, long unique_id, PluginInfo::Type);
+PluginPtr 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 8543ad5285..8e6c0bd1c7 100644
--- a/libs/ardour/ardour/plugin_manager.h
+++ b/libs/ardour/ardour/plugin_manager.h
@@ -5,42 +5,34 @@
#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; }
ARDOUR::PluginInfoList &ladspa_plugin_info () { return _ladspa_plugin_info; }
- ARDOUR::PluginInfoList &au_plugin_info () { return _au_plugin_info; }
void refresh ();
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;
- ARDOUR::PluginInfoList _au_plugin_info;
std::map<uint32_t, std::string> rdf_type;
std::string ladspa_path;
@@ -60,8 +52,6 @@ class PluginManager {
int ladspa_discover_from_path (std::string path);
int ladspa_discover (std::string path);
- int au_discover ();
-
std::string get_ladspa_category (uint32_t id);
static PluginManager* _manager; // singleton
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 8271c1cf6a..d1db818e40 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -97,7 +97,7 @@ class Route : public IO
virtual int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
jack_nframes_t offset, bool can_record, bool rec_monitors_input);
virtual void toggle_monitor_input ();
- virtual bool can_record() const { return false; }
+ virtual bool can_record() { return false; }
virtual void set_record_enable (bool yn, void *src) {}
virtual bool record_enabled() const { return false; }
virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_redirects);
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index d39807be3f..6eb025f076 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -489,6 +489,7 @@ class Session : public sigc::trackable, public Stateful
int save_state (string snapshot_name, bool pending = false);
int restore_state (string snapshot_name);
int save_template (string template_name);
+ int save_history ();
static int rename_template (string old_name, string new_name);
@@ -501,7 +502,7 @@ class Session : public sigc::trackable, public Stateful
static vector<string*>* possible_states(string path);
XMLNode& get_state();
- int set_state(const XMLNode& node);
+ int set_state(const XMLNode& node); // not idempotent
XMLNode& get_template();
void add_instant_xml (XMLNode&, const std::string& dir);
@@ -844,23 +845,65 @@ class Session : public sigc::trackable, public Stateful
string next_undo() const { return history.next_undo(); }
string next_redo() const { return history.next_redo(); }
- void begin_reversible_command (string cmd_name, UndoAction *private_undo = 0);
- void commit_reversible_command (UndoAction* private_redo = 0);
+ void begin_reversible_command (string cmd_name);
+ void commit_reversible_command (Command* cmd = 0);
- void add_undo (const UndoAction& ua) {
- current_cmd.add_undo (ua);
- }
- void add_redo (const UndoAction& ua) {
- current_cmd.add_redo (ua);
- }
- void add_redo_no_execute (const UndoAction& ua) {
- current_cmd.add_redo_no_execute (ua);
+ void add_command (Command *const cmd) {
+ current_trans.add_command (cmd);
}
- UndoAction global_solo_memento (void *src);
- UndoAction global_mute_memento (void *src);
- UndoAction global_record_enable_memento (void *src);
- UndoAction global_metering_memento (void *src);
+ // these commands are implemented in libs/ardour/session_command.cc
+ class GlobalSoloStateCommand : public Command
+ {
+ GlobalRouteBooleanState before, after;
+ Session &sess;
+ void *src;
+ public:
+ GlobalSoloStateCommand(Session &, void *src);
+ void operator()();
+ void undo();
+ XMLNode &get_state();
+ void mark();
+ };
+
+ class GlobalMuteStateCommand : public Command
+ {
+ GlobalRouteBooleanState before, after;
+ Session &sess;
+ void *src;
+ public:
+ GlobalMuteStateCommand(Session &, void *src);
+ void operator()();
+ void undo();
+ XMLNode &get_state();
+ void mark();
+ };
+
+ class GlobalRecordEnableStateCommand : public Command
+ {
+ GlobalRouteBooleanState before, after;
+ Session &sess;
+ void *src;
+ public:
+ GlobalRecordEnableStateCommand(Session &, void *src);
+ void operator()();
+ void undo();
+ XMLNode &get_state();
+ void mark();
+ };
+
+ class GlobalMeteringStateCommand : public Command
+ {
+ GlobalRouteMeterState before, after;
+ Session &sess;
+ void *src;
+ public:
+ GlobalMeteringStateCommand(Session &, void *src);
+ void operator()();
+ void undo();
+ XMLNode &get_state();
+ void mark();
+ };
/* edit mode */
@@ -1635,7 +1678,7 @@ class Session : public sigc::trackable, public Stateful
void reverse_diskstream_buffers ();
UndoHistory history;
- UndoCommand current_cmd;
+ UndoTransaction current_trans;
GlobalRouteBooleanState get_global_route_boolean (bool (Route::*method)(void) const);
GlobalRouteMeterState get_global_route_metering ();
diff --git a/libs/ardour/ardour/state_manager.h b/libs/ardour/ardour/state_manager.h
index 19ee2e624a..99bfcfc3ce 100644
--- a/libs/ardour/ardour/state_manager.h
+++ b/libs/ardour/ardour/state_manager.h
@@ -35,6 +35,8 @@ class StateManager : public sigc::trackable
state_id_t _current_state_id;
+ virtual bool should_save_state () const { return true; }
+
static void prohibit_save ();
static void allow_save (const char* why, bool dosave);
diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h
index db06894607..bfd3e429c3 100644
--- a/libs/ardour/ardour/tempo.h
+++ b/libs/ardour/ardour/tempo.h
@@ -238,6 +238,7 @@ class TempoMap : public Stateful, public StateManager {
XMLNode& get_state (void);
int set_state (const XMLNode&);
+ PBD::ID id() { return _id; }
void dump (std::ostream&) const;
void clear ();
@@ -315,6 +316,8 @@ class TempoMap : public Stateful, public StateManager {
void save_state (std::string why);
+ PBD::ID _id;
+
};
}; /* namespace ARDOUR */
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index f16e9d29d9..4e2af5c80e 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -48,7 +48,7 @@ class Track : public Route
void toggle_monitor_input ();
- bool can_record() const { return true; }
+ virtual bool can_record();
Diskstream& diskstream() const { return *_diskstream; }
diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h
index 3cb10d1779..5253da7b0a 100644
--- a/libs/ardour/ardour/vst_plugin.h
+++ b/libs/ardour/ardour/vst_plugin.h
@@ -104,6 +104,15 @@ class VSTPlugin : public ARDOUR::Plugin
bool been_resumed;
};
-}
+class VSTPluginInfo : public PluginInfo
+{
+ public:
+ VSTPluginInfo () {}
+ ~VSTPluginInfo () {}
+
+ PluginPtr load (Session& session);
+};
+
+} // namespace ARDOUR
#endif /* __ardour_vst_plugin_h__ */