diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 25f700b7ca..996d3d7dbf 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -934,9 +934,9 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version) XMLNode *child; const char *port; uint32_t port_id; - + cnodes = (*niter)->children ("port"); - + for (iter = cnodes.begin(); iter != cnodes.end(); ++iter){ child = *iter; @@ -961,6 +961,30 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version) if (c) { if (!child->children().empty()) { c->alist()->set_state (*child->children().front(), version); + + /* In some cases 2.X saves lists with min_yval and max_yval + being FLT_MIN and FLT_MAX respectively. This causes problems + in A3 because these min/max values are used to compute + where GUI control points should be drawn. If we see such + values, `correct' them to the min/max of the appropriate + parameter. + */ + + float min_y = c->alist()->get_min_y (); + float max_y = c->alist()->get_max_y (); + + Plugin::ParameterDescriptor desc; + _plugins.front()->get_parameter_descriptor (port_id, desc); + + if (min_y == FLT_MIN) { + min_y = desc.lower; + } + + if (max_y == FLT_MAX) { + max_y = desc.upper; + } + + c->alist()->set_yrange (min_y, max_y); } } else { error << string_compose (_("PluginInsert: automatable control %1 not found - ignored"), port_id) << endmsg;