Browse Source

Update checks for vst param bounds

tags/1.9.4
falkTX 10 years ago
parent
commit
d921b0d356
1 changed files with 25 additions and 18 deletions
  1. +25
    -18
      source/backend/plugin/VstPlugin.cpp

+ 25
- 18
source/backend/plugin/VstPlugin.cpp View File

@@ -631,6 +631,7 @@ public:
if (pData->hints & PLUGIN_HAS_COCKOS_EXTENSIONS)
{
double vrange[2] = { 0.0, 1.0 };
bool isInteger = false;

if (static_cast<uintptr_t>(dispatcher(effVendorSpecific, static_cast<int32_t>(0xdeadbef0), static_cast<int32_t>(j), vrange, 0.0f)) >= 0xbeef)
{
@@ -638,13 +639,19 @@ public:
max = static_cast<float>(vrange[1]);

if (min > max)
max = min;

if (max - min == 0.0f)
{
carla_stderr2("WARNING - Broken plugin parameter: max - min == 0.0f (with cockos extensions)");
carla_stderr2("WARNING - Broken plugin parameter min > max (with cockos extensions)");
min = max - 0.1f;
}
else if (min == max)
{
carla_stderr2("WARNING - Broken plugin parameter min == max (with cockos extensions)");
max = min + 0.1f;
}

// only use values as integer if we have a proper range
if (max - min >= 1.0f)
isInteger = dispatcher(effVendorSpecific, kVstParameterUsesIntStep, static_cast<int32_t>(j), nullptr, 0.0f) >= 0xbeef;
}
else
{
@@ -652,7 +659,7 @@ public:
max = 1.0f;
}

if (dispatcher(effVendorSpecific, kVstParameterUsesIntStep, static_cast<int32_t>(j), nullptr, 0.0f) >= 0xbeef)
if (isInteger)
{
step = 1.0f;
stepSmall = 1.0f;
@@ -660,7 +667,7 @@ public:
}
else
{
float range = max - min;
const float range = max - min;
step = range/100.0f;
stepSmall = range/1000.0f;
stepLarge = range/10.0f;
@@ -670,17 +677,17 @@ public:
{
if (prop.flags & kVstParameterUsesIntegerMinMax)
{
min = float(prop.minInteger);
max = float(prop.maxInteger);
min = static_cast<float>(prop.minInteger);
max = static_cast<float>(prop.maxInteger);

if (min > max)
max = min;
else if (max < min)
min = max;

if (max - min == 0.0f)
{
carla_stderr2("WARNING - Broken plugin parameter: max - min == 0.0f");
carla_stderr2("WARNING - Broken plugin parameter min > max");
min = max - 0.1f;
}
else if (min == max)
{
carla_stderr2("WARNING - Broken plugin parameter min == max");
max = min + 0.1f;
}
}
@@ -699,9 +706,9 @@ public:
}
else if (prop.flags & kVstParameterUsesIntStep)
{
step = float(prop.stepInteger);
stepSmall = float(prop.stepInteger)/10;
stepLarge = float(prop.largeStepInteger);
step = static_cast<float>(prop.stepInteger);
stepSmall = static_cast<float>(prop.stepInteger)/10.0f;
stepLarge = static_cast<float>(prop.largeStepInteger);
pData->param.data[j].hints |= PARAMETER_IS_INTEGER;
}
else if (prop.flags & kVstParameterUsesFloatStep)
@@ -712,7 +719,7 @@ public:
}
else
{
float range = max - min;
const float range = max - min;
step = range/100.0f;
stepSmall = range/1000.0f;
stepLarge = range/10.0f;


Loading…
Cancel
Save