13
0

Cache instrument plugin MIDNAM model & mode

This commit is contained in:
Robin Gareus 2020-04-01 23:24:45 +02:00
parent a6c9c04fd6
commit 37bbc70179
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 32 additions and 15 deletions

View File

@ -78,8 +78,17 @@ private:
std::string get_patch_name (uint16_t bank, uint8_t program, uint8_t channel, bool with_extra) const;
std::string external_instrument_model;
std::string external_instrument_mode;
void invalidate_cached_plugin_model ()
{
_plugin_model = "";
_plugin_mode = "";
}
std::string _external_instrument_model;
std::string _external_instrument_mode;
mutable std::string _plugin_model;
mutable std::string _plugin_mode;
boost::weak_ptr<ARDOUR::Processor> internal_instrument;
};

View File

@ -38,7 +38,7 @@ using namespace MIDI::Name;
using std::string;
InstrumentInfo::InstrumentInfo ()
: external_instrument_model (_("Unknown"))
: _external_instrument_model (_("Unknown"))
{
}
@ -49,26 +49,28 @@ InstrumentInfo::~InstrumentInfo ()
void
InstrumentInfo::set_external_instrument (const string& model, const string& mode)
{
if (external_instrument_model == model && external_instrument_mode == mode) {
invalidate_cached_plugin_model ();
if (_external_instrument_model == model && _external_instrument_mode == mode) {
//std::cerr << "InstrumentInfo::set_external_instrument '" << model << "' '" << mode << "' -- no change\n";
return;
}
//std::cerr << "InstrumentInfo::set_external_instrument '" << model << "' '" << mode << "'\n";
external_instrument_model = model;
external_instrument_mode = mode;
_external_instrument_model = model;
_external_instrument_mode = mode;
Changed (); /* EMIT SIGNAL */
}
void
InstrumentInfo::set_internal_instrument (boost::shared_ptr<Processor> p)
{
invalidate_cached_plugin_model ();
if (p == internal_instrument.lock ()) {
//std::cerr << "InstrumentInfo::set_internal_instrument -- NO CHANGE\n";
return;
}
//std::cerr << "InstrumentInfo::set_internal_instrument -> '" << (p ? p->name () : "(NULL)") << "'\n";
internal_instrument = p;
if (external_instrument_model.empty () || external_instrument_model == _("Unknown")) {
if (_external_instrument_model.empty () || _external_instrument_model == _("Unknown")) {
Changed (); /* EMIT SIGNAL */
}
}
@ -92,14 +94,17 @@ InstrumentInfo::have_custom_plugin_info () const
std::string
InstrumentInfo::model () const
{
if (!external_instrument_model.empty ()) {
return external_instrument_model;
if (!_external_instrument_model.empty ()) {
return _external_instrument_model;
}
if (!_plugin_model.empty ()) {
return _plugin_model;
}
// TODO: cache plugin model
boost::shared_ptr<Processor> p = internal_instrument.lock ();
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (p);
if (pi && pi->plugin ()->has_midnam ()) {
return pi->plugin ()->midnam_model ();
_plugin_model = pi->plugin ()->midnam_model ();
return _plugin_model;
}
return "";
}
@ -107,16 +112,19 @@ InstrumentInfo::model () const
std::string
InstrumentInfo::mode () const
{
if (!external_instrument_model.empty ()) {
return external_instrument_mode;
if (!_external_instrument_model.empty ()) {
return _external_instrument_mode;
}
if (!_plugin_mode.empty ()) {
return _plugin_mode;
}
// TODO: cache plugin mode
boost::shared_ptr<Processor> p = internal_instrument.lock ();
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (p);
if (pi && pi->plugin ()->has_midnam ()) {
const std::list<std::string> device_modes = MidiPatchManager::instance ().custom_device_mode_names_by_model (model ());
if (device_modes.size () > 0) {
return device_modes.front ();
_plugin_mode = device_modes.front ();
return _plugin_mode;
}
}
return "";