Plugin automation fixes from torbenh.
authorDavid Robillard <d@drobilla.net>
Mon, 29 Sep 2008 01:22:21 +0000 (01:22 +0000)
committerDavid Robillard <d@drobilla.net>
Mon, 29 Sep 2008 01:22:21 +0000 (01:22 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@3826 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/generic_pluginui.cc
libs/ardour/ardour/plugin_insert.h
libs/ardour/automatable.cc
libs/ardour/automation_list.cc
libs/ardour/meter.cc
libs/ardour/plugin_insert.cc

index c77f7e7d740e3e6e4062b5a3a2c5a1d7df8f6230..07573c145498ee80571a76423f1dfe8cde71abb2 100644 (file)
@@ -218,7 +218,7 @@ GenericPluginUI::build ()
                                continue;
                        }
                                
-                       if (cui->control || cui->clickbox || cui->combo) {
+                       if (cui->controller || cui->clickbox || cui->combo) {
 
                                box->pack_start (*cui, false, false);
 
@@ -461,9 +461,8 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                }
 
                /* create the controller */
-       
-               control_ui->controller = AutomationController::create(insert, mcontrol->parameter(), mcontrol);
 
+               control_ui->controller = AutomationController::create(insert, mcontrol->parameter(), mcontrol);
                /* XXX this code is not right yet, because it doesn't handle
                   the absence of bounds in any sensible fashion.
                */
@@ -664,7 +663,9 @@ GenericPluginUI::update_control_display (ControlUI* cui)
                }
        }
 
-       cui->controller->display_effective_value();
+       if( cui->controller ) {
+           cui->controller->display_effective_value();
+       }
 
 
        /*} else {
index 859c707c79f43740ad8df075b2f8e95ef1789c94..28c7718971c659985db4d3a55be1b6be5cf1ac53 100644 (file)
@@ -81,14 +81,14 @@ class PluginInsert : public Processor
        
        struct PluginControl : public AutomationControl 
        {
-           PluginControl (PluginInsert& p, boost::shared_ptr<AutomationList> list);
+           PluginControl (PluginInsert* p, const Parameter &param,
+                   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;
+               PluginInsert* _plugin;
                bool _logarithmic;
                bool _toggled;
        };
index ea14fa648bdd9b628bdcb699928631e252459286..c9f774d441554ced59553f0548faefaf05f3dfe7 100644 (file)
@@ -28,6 +28,7 @@
 #include <ardour/session.h>
 #include <ardour/automatable.h>
 #include <ardour/midi_track.h>
+#include <ardour/plugin_insert.h>
 
 #include "i18n.h"
 
@@ -394,6 +395,8 @@ Automatable::control_factory(const Evoral::Parameter& param)
        Evoral::Control* control = NULL;
        if (param.type() >= MidiCCAutomation && param.type() <= MidiChannelPressureAutomation) {
                control = new MidiTrack::MidiControl((MidiTrack*)this, param);
+       } else if (param.type() == PluginAutomation) {
+               control = new PluginInsert::PluginControl((PluginInsert*)this, param);
        } else {
                control = new AutomationControl(_a_session, param);
        }
index b9aeabb4b5e78d2471224e88628c6b2c3922c9de..c8a5ba7a39ce0e4e6f0080ac5eac9a2eb3597686 100644 (file)
@@ -388,7 +388,7 @@ AutomationList::set_state (const XMLNode& node)
        }
        
        if ((prop = node.property (X_("automation-id"))) != 0){ 
-               _parameter = Parameter(prop->value());
+               _parameter = Evoral::Parameter(prop->value());
        } else {
                warning << "Legacy session: automation list has no automation-id property.";
        }
index 8ad5e391a2c4304083d60c106a2a64b239bf7ff8..5b3b2e5f9eda4cd56663be7c442d3c4815c76da4 100644 (file)
@@ -37,7 +37,7 @@ PeakMeter::run_in_place (BufferSet& bufs, nframes_t start_frame, nframes_t end_f
 {
        uint32_t n = 0;
        uint32_t meterable = std::min(bufs.count().n_total(), (uint32_t)_peak_power.size());
-       uint32_t limit = std::min (meterable, bufs.count().n_midi());
+       uint32_t limit = std::min (meterable, (uint32_t)bufs.count().n_midi());
 
        // Meter what we have (midi)
        for ( ; n < limit; ++n) {
index e9956836b51630f2a6659a8ac1b546b87ba17cfe..bd1323b0f14d41d0693910d05d8b1c20a7213914 100644 (file)
@@ -80,7 +80,7 @@ PluginInsert::PluginInsert (Session& s, const XMLNode& node)
                throw failed_constructor();
        }
 
-       // set_automatable ();
+       set_automatable ();
 
        {
                Glib::Mutex::Lock em (_session.engine().process_lock());
@@ -229,7 +229,7 @@ PluginInsert::set_automatable ()
                        Parameter param(*i);
                        param.set_range(desc.lower, desc.upper, _plugins.front()->default_value(i->id()));
                        boost::shared_ptr<AutomationList> list(new AutomationList(param));
-                       add_control(boost::shared_ptr<AutomationControl>(new PluginControl(*this, list)));
+                       add_control(boost::shared_ptr<AutomationControl>(new PluginControl(this, *i, list)));
                }
        }
 }
@@ -852,13 +852,12 @@ PluginInsert::type ()
        }
 }
 
-PluginInsert::PluginControl::PluginControl (PluginInsert& p, boost::shared_ptr<AutomationList> list)
-       : AutomationControl (p.session(), list->parameter(), list, p.describe_parameter(list->parameter()))
+PluginInsert::PluginControl::PluginControl (PluginInsert* p, const Parameter &param, boost::shared_ptr<AutomationList> list)
+       : AutomationControl (p->session(), param, list, p->describe_parameter(param))
        , _plugin (p)
-       , _list (list)
 {
        Plugin::ParameterDescriptor desc;
-       p.plugin(0)->get_parameter_descriptor (list->parameter().id(), desc);
+       p->plugin(0)->get_parameter_descriptor (param.id(), desc);
        _logarithmic = desc.logarithmic;
        _toggled = desc.toggled;
 }
@@ -892,8 +891,8 @@ PluginInsert::PluginControl::set_value (float val)
 
        }
 
-       for (vector<boost::shared_ptr<Plugin> >::iterator i = _plugin._plugins.begin();
-                       i != _plugin._plugins.end(); ++i) {
+       for (vector<boost::shared_ptr<Plugin> >::iterator i = _plugin->_plugins.begin();
+                       i != _plugin->_plugins.end(); ++i) {
                (*i)->set_parameter (_list->parameter().id(), val);
        }
 
@@ -905,7 +904,7 @@ PluginInsert::PluginControl::get_value (void) const
 {
        /* FIXME: probably should be taking out some lock here.. */
        
-       float val = _plugin.get_parameter (_list->parameter());
+       float val = _plugin->get_parameter (_list->parameter());
 
        return val;