summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-01-23 18:02:22 +0000
committerCarl Hetherington <carl@carlh.net>2012-01-23 18:02:22 +0000
commit9b4f0f724222818173a4a74521d3b3f4af4e447a (patch)
treef6b7213993a3438ff58d5777224a8d793f51e63d /libs
parent9c6ef3788cb7e6836c6c81328cd63ef52fb3cd83 (diff)
Cache results of lilv_port_is_a(...) in various places.
git-svn-id: svn://localhost/ardour2/branches/3.0@11315 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/lv2_plugin.h4
-rw-r--r--libs/ardour/lv2_plugin.cc31
2 files changed, 24 insertions, 11 deletions
diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h
index 6396e30038..a627c2eb43 100644
--- a/libs/ardour/ardour/lv2_plugin.h
+++ b/libs/ardour/ardour/lv2_plugin.h
@@ -131,6 +131,10 @@ class LV2Plugin : public ARDOUR::Plugin
bool _was_activated;
bool _has_state_interface;
std::vector<bool> _port_is_input;
+ std::vector<bool> _port_is_output;
+ std::vector<bool> _port_is_midi;
+ std::vector<bool> _port_is_audio;
+ std::vector<bool> _port_is_control;
std::map<std::string,uint32_t> _port_indices;
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 46fcc2b4f2..4c288d32c3 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -218,6 +218,16 @@ LV2Plugin::init(void* c_plugin, framecnt_t rate)
_sample_rate = rate;
const uint32_t num_ports = this->num_ports();
+
+ for (uint32_t i = 0; i < num_ports; ++i) {
+ const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, i);
+ _port_is_control.push_back(lilv_port_is_a(_impl->plugin, port, _world.control_class));
+ _port_is_audio.push_back(lilv_port_is_a(_impl->plugin, port, _world.audio_class));
+ _port_is_midi.push_back(lilv_port_is_a(_impl->plugin, port, _world.event_class));
+ _port_is_output.push_back(lilv_port_is_a(_impl->plugin, port, _world.output_class));
+ _port_is_input.push_back(lilv_port_is_a(_impl->plugin, port, _world.input_class));
+ }
+
const bool latent = lilv_plugin_has_latency(plugin);
const uint32_t latency_port = (latent)
? lilv_plugin_get_latency_port_index(plugin)
@@ -1073,37 +1083,36 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
bool
LV2Plugin::parameter_is_control(uint32_t param) const
{
- const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, param);
- return lilv_port_is_a(_impl->plugin, port, _world.control_class);
+ assert(param < _port_is_control.size());
+ return _port_is_control[param];
}
bool
LV2Plugin::parameter_is_audio(uint32_t param) const
{
- const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, param);
- return lilv_port_is_a(_impl->plugin, port, _world.audio_class);
+ assert(param < _port_is_audio.size());
+ return _port_is_audio[param];
}
bool
LV2Plugin::parameter_is_midi(uint32_t param) const
{
- const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, param);
- return lilv_port_is_a(_impl->plugin, port, _world.event_class);
- // && lilv_port_supports_event(_impl->plugin, port, _world.midi_class);
+ assert(param < _port_is_midi.size());
+ return _port_is_midi[param];
}
bool
LV2Plugin::parameter_is_output(uint32_t param) const
{
- const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, param);
- return lilv_port_is_a(_impl->plugin, port, _world.output_class);
+ assert(param < _port_is_output.size());
+ return _port_is_output[param];
}
bool
LV2Plugin::parameter_is_input(uint32_t param) const
{
- const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, param);
- return lilv_port_is_a(_impl->plugin, port, _world.input_class);
+ assert(param < _port_is_input.size());
+ return _port_is_input[param];
}
void