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
This commit is contained in:
Carl Hetherington 2012-01-23 18:02:22 +00:00
parent 9c6ef3788c
commit 9b4f0f7242
2 changed files with 24 additions and 11 deletions

View File

@ -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;

View File

@ -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