/*
- Copyright (C) 2000,2007 Paul Davis
+ Copyright (C) 2000,2007 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
#include <boost/weak_ptr.hpp>
-#include <sigc++/signal.h>
-#include <ardour/ardour.h>
-#include <ardour/types.h>
-#include <ardour/processor.h>
-#include <ardour/automation_list.h>
+#include "ardour/ardour.h"
+#include "ardour/types.h"
+#include "ardour/processor.h"
+#include "ardour/automation_control.h"
class XMLNode;
class PluginInsert : public Processor
{
public:
- PluginInsert (Session&, boost::shared_ptr<Plugin>, Placement);
- PluginInsert (Session&, const XMLNode&);
- PluginInsert (const PluginInsert&);
+ PluginInsert (Session&, boost::shared_ptr<Plugin> = boost::shared_ptr<Plugin>());
~PluginInsert ();
- static const string port_automation_node_name;
-
+ static const std::string port_automation_node_name;
+
XMLNode& state(bool);
XMLNode& get_state(void);
- int set_state(const XMLNode&);
+ int set_state(const XMLNode&, int version);
+
+ void run (BufferSet& in, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
+ void silence (nframes_t nframes);
- void run_in_place (BufferSet& in, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset);
- void silence (nframes_t nframes, nframes_t offset);
-
void activate ();
void deactivate ();
bool is_generator() const;
- struct PluginControl : public AutomationControl
+ struct PluginControl : public AutomationControl
{
- PluginControl (PluginInsert* p, const Evoral::Parameter ¶m,
- boost::shared_ptr<AutomationList> list = boost::shared_ptr<AutomationList>());
-
+ PluginControl (PluginInsert* p, const Evoral::Parameter ¶m,
+ boost::shared_ptr<AutomationList> list = boost::shared_ptr<AutomationList>());
+
void set_value (float val);
- float get_value (void) const;
-
- private:
- PluginInsert* _plugin;
+ float get_value (void) const;
+
+ private:
+ PluginInsert* _plugin;
bool _logarithmic;
bool _toggled;
};
boost::shared_ptr<Plugin> plugin(uint32_t num=0) const {
- if (num < _plugins.size()) {
+ if (num < _plugins.size()) {
return _plugins[num];
} else {
return _plugins[0]; // we always have one
PluginType type ();
- string describe_parameter (Evoral::Parameter param);
+ std::string describe_parameter (Evoral::Parameter param);
nframes_t signal_latency() const;
boost::shared_ptr<Plugin> get_impulse_analysis_plugin();
- sigc::signal<void, BufferSet*, BufferSet*> AnalysisDataGathered;
- void collect_signal_for_analysis(nframes_t nframes) {
- // called from outside the audio thread, so this should be safe
- _signal_analysis_input_bufferset.ensure_buffers(input_streams(), nframes);
- _signal_analysis_output_bufferset.ensure_buffers(output_streams(), nframes);
+ void collect_signal_for_analysis(nframes_t nframes);
- _signal_analysis_collect_nframes_max = nframes;
- _signal_analysis_collected_nframes = 0;
- }
+ PBD::Signal2<void,BufferSet*, BufferSet*> AnalysisDataGathered;
private:
+ /* disallow copy construction */
+ PluginInsert (const PluginInsert&);
void parameter_changed (Evoral::Parameter, float);
-
+
void set_parameter (Evoral::Parameter param, float val);
float get_parameter (Evoral::Parameter param);
float default_parameter_value (const Evoral::Parameter& param);
-
- std::vector<boost::shared_ptr<Plugin> > _plugins;
+
+ typedef std::vector<boost::shared_ptr<Plugin> > Plugins;
+ Plugins _plugins;
boost::weak_ptr<Plugin> _impulseAnalysisPlugin;
nframes_t _signal_analysis_collected_nframes;
nframes_t _signal_analysis_collect_nframes_max;
- BufferSet _signal_analysis_input_bufferset;
- BufferSet _signal_analysis_output_bufferset;
-
- void automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offset);
+ BufferSet _signal_analysis_inputs;
+ BufferSet _signal_analysis_outputs;
+
+ void automation_run (BufferSet& bufs, nframes_t nframes);
void connect_and_run (BufferSet& bufs, nframes_t nframes, nframes_t offset, bool with_auto, nframes_t now = 0);
- void init ();
void set_automatable ();
void auto_state_changed (Evoral::Parameter which);
+ void set_parameter_state (const XMLNode& node, int version);
+ void set_parameter_state_2X (const XMLNode& node, int version);
int32_t count_for_configuration (ChanCount in, ChanCount out) const;