/*
- 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 <vector>
#include <string>
-#include <sigc++/signal.h>
-#include <ardour/ardour.h>
-#include <ardour/types.h>
-#include <ardour/processor.h>
-#include <ardour/automation_list.h>
+#include <boost/weak_ptr.hpp>
+
+#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&, boost::shared_ptr<Plugin>);
PluginInsert (Session&, const XMLNode&);
- PluginInsert (const PluginInsert&);
~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;
- void set_parameter (Parameter param, float val);
- float get_parameter (Parameter param);
-
- float default_parameter_value (const Evoral::Parameter& param);
-
- struct PluginControl : public AutomationControl
+ struct PluginControl : public AutomationControl
{
- PluginControl (PluginInsert& p, boost::shared_ptr<AutomationList> list);
-
+ 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;
- boost::shared_ptr<AutomationList> _list;
+ 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 (Parameter param);
+ std::string describe_parameter (Evoral::Parameter param);
nframes_t signal_latency() const;
+ boost::shared_ptr<Plugin> get_impulse_analysis_plugin();
+
+ void collect_signal_for_analysis(nframes_t nframes);
+
+ 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);
+
+ 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_inputs;
+ BufferSet _signal_analysis_outputs;
- void parameter_changed (Parameter, float);
-
- std::vector<boost::shared_ptr<Plugin> > _plugins;
-
- void automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offset);
+ 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 (Parameter which);
+ 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;