From 97111b0ec2dd79d4fb4938f3c66cb86c59e7990d Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 7 Oct 2016 20:55:21 +0200 Subject: Clean up is_instrument vs needs-midi-in API The latter is only really relevant for Audio Units. This fixes an issue with vocoders or audio-plugins that simply have a MIDI input for other purposes to be wrongly categorized as Instruments.. .. and thereby override strict-i/o rules (prefer stereo) --- libs/ardour/ardour/plugin.h | 2 +- libs/ardour/ardour/plugin_insert.h | 2 +- libs/ardour/plugin.cc | 8 +++++++- libs/ardour/plugin_insert.cc | 10 +++++----- 4 files changed, 14 insertions(+), 8 deletions(-) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index df4b512ef7..09cd066527 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -395,7 +395,7 @@ class LIBARDOUR_API PluginInfo { virtual PluginPtr load (Session& session) = 0; virtual bool is_instrument() const; - virtual bool needs_midi_input() const { return is_instrument (); } + virtual bool needs_midi_input() const; virtual bool in_category (const std::string &) const { return false; } virtual std::vector get_presets (bool user_only) const = 0; diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index d38523a77d..a9a2ce6273 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -171,7 +171,7 @@ class LIBARDOUR_API PluginInsert : public Processor bool has_no_inputs() const; bool has_no_audio_inputs() const; - bool needs_midi_input() const; + bool is_instrument () const; bool has_output_presets ( ChanCount in = ChanCount (DataType::MIDI, 1), ChanCount out = ChanCount (DataType::AUDIO, 2) diff --git a/libs/ardour/plugin.cc b/libs/ardour/plugin.cc index 7d04c3f5d7..f76f96af7a 100644 --- a/libs/ardour/plugin.cc +++ b/libs/ardour/plugin.cc @@ -81,10 +81,16 @@ static bool seen_set_state_message = false; PBD::Signal2 Plugin::PresetsChanged; +bool +PluginInfo::needs_midi_input () const +{ + return (n_inputs.n_midi() != 0); +} + bool PluginInfo::is_instrument () const { - return (n_inputs.n_midi() != 0) && (n_outputs.n_audio() > 0); + return (n_inputs.n_midi() != 0) && (n_outputs.n_audio() > 0) && (n_inputs.n_audio() == 0); } Plugin::Plugin (AudioEngine& e, Session& s) diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 7b3aa60ba4..c3dae8b71f 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -394,13 +394,13 @@ PluginInsert::plugin_latency () const { } bool -PluginInsert::needs_midi_input() const +PluginInsert::is_instrument() const { PluginInfoPtr pip = _plugins[0]->get_info(); - if (pip->needs_midi_input ()) { + if (pip->is_instrument ()) { return true; } - return pip->n_inputs.n_midi() != 0 && pip->n_outputs.n_audio() != 0; + return pip->n_inputs.n_midi () != 0 && pip->n_outputs.n_audio () > 0 && pip->n_inputs.n_audio () == 0; } bool @@ -426,7 +426,7 @@ PluginInsert::has_output_presets (ChanCount in, ChanCount out) return false; } } - if (!needs_midi_input ()) { + if (!is_instrument ()) { return false; } return true; @@ -1994,7 +1994,7 @@ PluginInsert::internal_can_support_io_configuration (ChanCount const & inx, Chan m.strict_io = true; /* special case MIDI instruments */ - if (needs_midi_input ()) { + if (is_instrument ()) { // output = midi-bypass + at most master-out channels. ChanCount max_out (DataType::AUDIO, 2); // TODO use master-out max_out.set (DataType::MIDI, out.get(DataType::MIDI)); -- cgit v1.2.3