summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-10-07 20:55:21 +0200
committerRobin Gareus <robin@gareus.org>2016-10-07 20:55:21 +0200
commit97111b0ec2dd79d4fb4938f3c66cb86c59e7990d (patch)
tree7bf729073848ddeaae89a9a4de614f2e481609f6 /libs/ardour
parentb497bb9db42a4a7087168e4a153780d702d262de (diff)
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)
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/plugin.h2
-rw-r--r--libs/ardour/ardour/plugin_insert.h2
-rw-r--r--libs/ardour/plugin.cc8
-rw-r--r--libs/ardour/plugin_insert.cc10
4 files changed, 14 insertions, 8 deletions
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<Plugin::PresetRecord> 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
@@ -82,9 +82,15 @@ static bool seen_set_state_message = false;
PBD::Signal2<void, std::string, Plugin*> 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));