Browse Source

Continue cleanup

tags/1.9.4
falkTX 10 years ago
parent
commit
8b6b6b2ae2
12 changed files with 199 additions and 139 deletions
  1. +2
    -0
      source/backend/plugin/CarlaPlugin.cpp
  2. +10
    -4
      source/backend/plugin/CarlaPluginInternal.cpp
  3. +3
    -1
      source/backend/plugin/CarlaPluginInternal.hpp
  4. +55
    -33
      source/backend/plugin/DssiPlugin.cpp
  5. +34
    -42
      source/backend/plugin/FluidSynthPlugin.cpp
  6. +2
    -3
      source/backend/plugin/JucePlugin.cpp
  7. +5
    -1
      source/backend/plugin/LadspaPlugin.cpp
  8. +18
    -7
      source/backend/plugin/LinuxSamplerPlugin.cpp
  9. +28
    -30
      source/backend/plugin/Lv2Plugin.cpp
  10. +32
    -15
      source/backend/plugin/NativePlugin.cpp
  11. +4
    -0
      source/backend/plugin/ReWirePlugin.cpp
  12. +6
    -3
      source/backend/plugin/VstPlugin.cpp

+ 2
- 0
source/backend/plugin/CarlaPlugin.cpp View File

@@ -931,7 +931,9 @@ void CarlaPlugin::setOption(const uint option, const bool yesNo)
else
pData->options &= ~option;

#ifndef BUILD_BRIDGE
pData->saveSetting(option, yesNo);
#endif
}

void CarlaPlugin::setEnabled(const bool yesNo) noexcept


+ 10
- 4
source/backend/plugin/CarlaPluginInternal.cpp View File

@@ -473,11 +473,13 @@ CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx
extraHints(0x0),
transientTryCounter(0),
latency(0),
#ifndef BUILD_BRIDGE
latencyBuffers(nullptr),
#endif
name(nullptr),
filename(nullptr),
#ifndef BUILD_BRIDGE
iconName(nullptr),
#ifndef BUILD_BRIDGE
identifier(nullptr),
#endif
osc(eng, plug) {}
@@ -522,13 +524,13 @@ CarlaPlugin::ProtectedData::~ProtectedData() noexcept
filename = nullptr;
}

#ifndef BUILD_BRIDGE
if (iconName != nullptr)
{
delete[] iconName;
iconName = nullptr;
}

#ifndef BUILD_BRIDGE
if (identifier != nullptr)
{
delete[] identifier;
@@ -584,6 +586,7 @@ CarlaPlugin::ProtectedData::~ProtectedData() noexcept

void CarlaPlugin::ProtectedData::clearBuffers() noexcept
{
#ifndef BUILD_BRIDGE
if (latencyBuffers != nullptr)
{
CARLA_SAFE_ASSERT(audioIn.count > 0);
@@ -604,12 +607,13 @@ void CarlaPlugin::ProtectedData::clearBuffers() noexcept
{
if (latency != 0)
{
#ifndef BUILD_BRIDGE
carla_safe_assert_int("latency != 0", __FILE__, __LINE__, static_cast<int>(latency));
#endif
latency = 0;
}
}
#else
latency = 0;
#endif

audioIn.clear();
audioOut.clear();
@@ -714,6 +718,7 @@ void* CarlaPlugin::ProtectedData::uiLibSymbol(const char* const symbol) const no
return lib_symbol(uiLib, symbol);
}

#ifndef BUILD_BRIDGE
// -----------------------------------------------------------------------
// Settings functions

@@ -805,6 +810,7 @@ void CarlaPlugin::ProtectedData::tryTransient() noexcept
if (engine->getOptions().frontendWinId != 0)
transientTryCounter = 1;
}
#endif

// -----------------------------------------------------------------------



+ 3
- 1
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -243,8 +243,8 @@ struct CarlaPlugin::ProtectedData {
// data 1
const char* name;
const char* filename;
#ifndef BUILD_BRIDGE
const char* iconName;
#ifndef BUILD_BRIDGE
const char* identifier; // used for save/restore settings per plugin
#endif

@@ -348,6 +348,7 @@ struct CarlaPlugin::ProtectedData {
bool uiLibClose() noexcept;
void* uiLibSymbol(const char* const symbol) const noexcept;

#ifndef BUILD_BRIDGE
// -------------------------------------------------------------------
// Settings functions

@@ -358,6 +359,7 @@ struct CarlaPlugin::ProtectedData {
// Misc

void tryTransient() noexcept;
#endif

// -------------------------------------------------------------------



+ 55
- 33
source/backend/plugin/DssiPlugin.cpp View File

@@ -38,7 +38,7 @@ CARLA_BACKEND_START_NAMESPACE
class DssiPlugin : public CarlaPlugin
{
public:
DssiPlugin(CarlaEngine* const engine, const uint id)
DssiPlugin(CarlaEngine* const engine, const uint id) noexcept
: CarlaPlugin(engine, id),
fHandle(nullptr),
fHandle2(nullptr),
@@ -55,7 +55,7 @@ public:
pData->osc.thread.setMode(CarlaPluginThread::PLUGIN_THREAD_DSSI_GUI);
}

~DssiPlugin() override
~DssiPlugin() noexcept override
{
carla_debug("DssiPlugin::~DssiPlugin()");

@@ -87,9 +87,18 @@ public:
if (fDescriptor->cleanup != nullptr)
{
if (fHandle != nullptr)
fDescriptor->cleanup(fHandle);
{
try {
fDescriptor->cleanup(fHandle);
} catch(...) {}
}

if (fHandle2 != nullptr)
fDescriptor->cleanup(fHandle2);
{
try {
fDescriptor->cleanup(fHandle2);
} catch(...) {}
}
}

fHandle = nullptr;
@@ -166,18 +175,16 @@ public:
uint getOptionsAvailable() const noexcept override
{
#ifdef __USE_GNU
const bool isAmSynth(strcasestr(pData->filename, "amsynth"));
const bool isDssiVst(strcasestr(pData->filename, "dssi-vst"));
const bool isDssiVst(strcasestr(pData->filename, "dssi-vst") != nullptr);
#else
const bool isAmSynth(std::strstr(pData->filename, "amsynth"));
const bool isDssiVst(std::strstr(pData->filename, "dssi-vst"));
const bool isDssiVst(std::strstr(pData->filename, "dssi-vst") != nullptr);
#endif

uint options = 0x0;

options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;

if (! (isAmSynth || isDssiVst))
if (! isDssiVst)
{
options |= PLUGIN_OPTION_FIXED_BUFFERS;

@@ -218,9 +225,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->Label != nullptr)
{
std::strncpy(strBuf, fDescriptor->Label, STR_MAX);
else
CarlaPlugin::getLabel(strBuf);
return;
}

CarlaPlugin::getLabel(strBuf);
}

void getMaker(char* const strBuf) const noexcept override
@@ -228,9 +238,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->Maker != nullptr)
{
std::strncpy(strBuf, fDescriptor->Maker, STR_MAX);
else
CarlaPlugin::getMaker(strBuf);
return;
}

CarlaPlugin::getMaker(strBuf);
}

void getCopyright(char* const strBuf) const noexcept override
@@ -238,9 +251,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->Copyright != nullptr)
{
std::strncpy(strBuf, fDescriptor->Copyright, STR_MAX);
else
CarlaPlugin::getCopyright(strBuf);
return;
}

CarlaPlugin::getCopyright(strBuf);
}

void getRealName(char* const strBuf) const noexcept override
@@ -248,9 +264,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->Name != nullptr)
{
std::strncpy(strBuf, fDescriptor->Name, STR_MAX);
else
CarlaPlugin::getRealName(strBuf);
return;
}

CarlaPlugin::getRealName(strBuf);
}

void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
@@ -260,10 +279,13 @@ public:

const int32_t rindex(pData->param.data[parameterId].rindex);

if (rindex < static_cast<int32_t>(fDescriptor->PortCount))
if (rindex < static_cast<int32_t>(fDescriptor->PortCount) && fDescriptor->PortNames[rindex] != nullptr)
{
std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX);
else
CarlaPlugin::getParameterName(parameterId, strBuf);
return;
}

CarlaPlugin::getParameterName(parameterId, strBuf);
}

// -------------------------------------------------------------------
@@ -541,7 +563,7 @@ public:

if (LADSPA_IS_PORT_INPUT(portType))
{
uint32_t j = iAudioIn++;
const uint32_t j = iAudioIn++;
pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true);
pData->audioIn.ports[j].rindex = i;

@@ -554,7 +576,7 @@ public:
}
else if (LADSPA_IS_PORT_OUTPUT(portType))
{
uint32_t j = iAudioOut++;
const uint32_t j = iAudioOut++;
pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false);
pData->audioOut.ports[j].rindex = i;

@@ -570,13 +592,9 @@ public:
}
else if (LADSPA_IS_PORT_CONTROL(portType))
{
uint32_t j = iCtrl++;
pData->param.data[j].hints = 0x0;
const uint32_t j = iCtrl++;
pData->param.data[j].index = static_cast<int32_t>(j);
pData->param.data[j].rindex = static_cast<int32_t>(i);
pData->param.data[j].midiCC = -1;
pData->param.data[j].midiChannel = 0;
pData->param.special[j] = PARAMETER_SPECIAL_NULL;

float min, max, def, step, stepSmall, stepLarge;

@@ -823,7 +841,9 @@ public:
{
pData->latency = latency;
pData->client->setLatency(latency);
#ifndef BUILD_BRIDGE
pData->recreateLatencyBuffers();
#endif
}

break;
@@ -1023,11 +1043,13 @@ public:
}
}

#ifndef BUILD_BRIDGE
if (pData->latency > 0)
{
for (uint32_t i=0; i < pData->audioIn.count; ++i)
FLOAT_CLEAR(pData->latencyBuffers[i], pData->latency);
}
#endif

pData->needsReset = false;
}
@@ -1924,11 +1946,9 @@ public:

{
#ifdef __USE_GNU
const bool isAmSynth(strcasestr(pData->filename, "amsynth"));
const bool isDssiVst(strcasestr(pData->filename, "dssi-vst"));
const bool isDssiVst(strcasestr(pData->filename, "dssi-vst") != nullptr);
#else
const bool isAmSynth(std::strstr(pData->filename, "amsynth"));
const bool isDssiVst(std::strstr(pData->filename, "dssi-vst"));
const bool isDssiVst(std::strstr(pData->filename, "dssi-vst") != nullptr);
#endif

// set default options
@@ -1936,7 +1956,7 @@ public:

pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;

if (isAmSynth || isDssiVst)
if (isDssiVst)
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;

if (pData->engine->getOptions().forceStereo)
@@ -1956,6 +1976,7 @@ public:
carla_stderr("WARNING: Plugin can ONLY use run_multiple_synths!");
}

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("DSSI/");

@@ -1972,8 +1993,9 @@ public:
pData->options = pData->loadSettings(pData->options, getOptionsAvailable());

// ignore settings, we need this anyway
if (isAmSynth || isDssiVst)
if (isDssiVst)
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
#endif
}

return true;


+ 34
- 42
source/backend/plugin/FluidSynthPlugin.cpp View File

@@ -41,7 +41,7 @@ CARLA_BACKEND_START_NAMESPACE
class FluidSynthPlugin : public CarlaPlugin
{
public:
FluidSynthPlugin(CarlaEngine* const engine, const unsigned int id, const bool use16Outs)
FluidSynthPlugin(CarlaEngine* const engine, const uint id, const bool use16Outs)
: CarlaPlugin(engine, id),
fUses16Outs(use16Outs),
fSettings(nullptr),
@@ -165,9 +165,9 @@ public:
// -------------------------------------------------------------------
// Information (per-plugin data)

unsigned int getOptionsAvailable() const noexcept override
uint getOptionsAvailable() const noexcept override
{
unsigned int options = 0x0;
uint options = 0x0;

options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;
options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES;
@@ -224,9 +224,12 @@ public:
void getLabel(char* const strBuf) const noexcept override
{
if (fLabel != nullptr)
{
std::strncpy(strBuf, fLabel, STR_MAX);
else
CarlaPlugin::getLabel(strBuf);
return;
}

CarlaPlugin::getLabel(strBuf);
}

void getMaker(char* const strBuf) const noexcept override
@@ -252,50 +255,49 @@ public:
{
case FluidSynthReverbOnOff:
std::strncpy(strBuf, "Reverb On/Off", STR_MAX);
break;
return;
case FluidSynthReverbRoomSize:
std::strncpy(strBuf, "Reverb Room Size", STR_MAX);
break;
return;
case FluidSynthReverbDamp:
std::strncpy(strBuf, "Reverb Damp", STR_MAX);
break;
return;
case FluidSynthReverbLevel:
std::strncpy(strBuf, "Reverb Level", STR_MAX);
break;
return;
case FluidSynthReverbWidth:
std::strncpy(strBuf, "Reverb Width", STR_MAX);
break;
return;
case FluidSynthChorusOnOff:
std::strncpy(strBuf, "Chorus On/Off", STR_MAX);
break;
return;
case FluidSynthChorusNr:
std::strncpy(strBuf, "Chorus Voice Count", STR_MAX);
break;
return;
case FluidSynthChorusLevel:
std::strncpy(strBuf, "Chorus Level", STR_MAX);
break;
return;
case FluidSynthChorusSpeedHz:
std::strncpy(strBuf, "Chorus Speed", STR_MAX);
break;
return;
case FluidSynthChorusDepthMs:
std::strncpy(strBuf, "Chorus Depth", STR_MAX);
break;
return;
case FluidSynthChorusType:
std::strncpy(strBuf, "Chorus Type", STR_MAX);
break;
return;
case FluidSynthPolyphony:
std::strncpy(strBuf, "Polyphony", STR_MAX);
break;
return;
case FluidSynthInterpolation:
std::strncpy(strBuf, "Interpolation", STR_MAX);
break;
return;
case FluidSynthVoiceCount:
std::strncpy(strBuf, "Voice Count", STR_MAX);
break;
default:
CarlaPlugin::getParameterName(parameterId, strBuf);
break;
return;
}

CarlaPlugin::getParameterName(parameterId, strBuf);
}

void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
@@ -306,14 +308,13 @@ public:
{
case FluidSynthChorusSpeedHz:
std::strncpy(strBuf, "Hz", STR_MAX);
break;
return;
case FluidSynthChorusDepthMs:
std::strncpy(strBuf, "ms", STR_MAX);
break;
default:
CarlaPlugin::getParameterUnit(parameterId, strBuf);
break;
return;
}

CarlaPlugin::getParameterUnit(parameterId, strBuf);
}

void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
@@ -373,7 +374,7 @@ public:

void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override
{
if (channel < MAX_MIDI_CHANNELS)
if (channel >= 0 && channel < MAX_MIDI_CHANNELS)
pData->midiprog.current = fCurMidiProgs[channel];

CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback);
@@ -687,7 +688,6 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 1.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthReverbRoomSize;
@@ -703,7 +703,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthReverbDamp;
@@ -719,7 +718,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthReverbLevel;
@@ -735,7 +733,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthReverbWidth;
@@ -751,7 +748,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthChorusOnOff;
@@ -767,7 +763,6 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 1.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthChorusNr;
@@ -783,7 +778,6 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 10.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthChorusLevel;
@@ -799,7 +793,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthChorusSpeedHz;
@@ -815,7 +808,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthChorusDepthMs;
@@ -831,7 +823,6 @@ public:
pData->param.ranges[j].step = 0.01f;
pData->param.ranges[j].stepSmall = 0.0001f;
pData->param.ranges[j].stepLarge = 0.1f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthChorusType;
@@ -847,7 +838,6 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 1.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthPolyphony;
@@ -863,7 +853,6 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 10.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthInterpolation;
@@ -879,7 +868,6 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 1.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

// ----------------------
j = FluidSynthVoiceCount;
@@ -895,7 +883,9 @@ public:
pData->param.ranges[j].step = 1.0f;
pData->param.ranges[j].stepSmall = 1.0f;
pData->param.ranges[j].stepLarge = 1.0f;
fParamBuffers[j] = pData->param.ranges[j].def;

for (j=0; j<FluidSynthParametersMax; ++j)
fParamBuffers[j] = pData->param.ranges[j].def;
}

// ---------------------------------------
@@ -1647,6 +1637,7 @@ public:
pData->options |= PLUGIN_OPTION_SEND_PITCHBEND;
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("SF2/");

@@ -1659,6 +1650,7 @@ public:

// load settings
pData->options = pData->loadSettings(pData->options, getOptionsAvailable());
#endif
}

return true;


+ 2
- 3
source/backend/plugin/JucePlugin.cpp View File

@@ -411,11 +411,8 @@ public:
for (uint32_t j=0; j < params; ++j)
{
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = 0x0;
pData->param.data[j].index = static_cast<int32_t>(j);
pData->param.data[j].rindex = static_cast<int32_t>(j);
pData->param.data[j].midiCC = -1;
pData->param.data[j].midiChannel = 0;

float min, max, def, step, stepSmall, stepLarge;

@@ -1122,6 +1119,7 @@ public:
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
}

#ifndef BUILD_BRIDGE
// set identifier string
String juceId(fDesc.createIdentifierString());

@@ -1134,6 +1132,7 @@ public:

// ignore settings, we need this anyway
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
#endif
}

return true;


+ 5
- 1
source/backend/plugin/LadspaPlugin.cpp View File

@@ -298,7 +298,7 @@ public:

const int32_t rindex(pData->param.data[parameterId].rindex);

if (rindex < static_cast<int32_t>(fDescriptor->PortCount))
if (rindex < static_cast<int32_t>(fDescriptor->PortCount) && fDescriptor->PortNames[rindex] != nullptr)
{
std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX);
return;
@@ -904,11 +904,13 @@ public:

if (pData->needsReset)
{
#ifndef BUILD_BRIDGE
if (pData->latency > 0)
{
for (uint32_t i=0; i < pData->audioIn.count; ++i)
FLOAT_CLEAR(pData->latencyBuffers[i], pData->latency);
}
#endif

pData->needsReset = false;
}
@@ -1485,6 +1487,7 @@ public:
if (pData->engine->getOptions().forceStereo)
pData->options |= PLUGIN_OPTION_FORCE_STEREO;

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("LADSPA/");
identifier += CarlaString(getUniqueId());
@@ -1498,6 +1501,7 @@ public:
// ignore settings, we need this anyway
if (isDssiVst)
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
#endif
}

return true;


+ 18
- 7
source/backend/plugin/LinuxSamplerPlugin.cpp View File

@@ -332,17 +332,23 @@ public:
void getLabel(char* const strBuf) const noexcept override
{
if (fLabel != nullptr)
{
std::strncpy(strBuf, fLabel, STR_MAX);
else
CarlaPlugin::getLabel(strBuf);
return;
}

CarlaPlugin::getLabel(strBuf);
}

void getMaker(char* const strBuf) const noexcept override
{
if (fMaker != nullptr)
{
std::strncpy(strBuf, fMaker, STR_MAX);
else
CarlaPlugin::getMaker(strBuf);
return;
}

CarlaPlugin::getMaker(strBuf);
}

void getCopyright(char* const strBuf) const noexcept override
@@ -353,9 +359,12 @@ public:
void getRealName(char* const strBuf) const noexcept override
{
if (fRealName != nullptr)
{
std::strncpy(strBuf, fRealName, STR_MAX);
else
CarlaPlugin::getRealName(strBuf);
return;
}

CarlaPlugin::getRealName(strBuf);
}

// -------------------------------------------------------------------
@@ -377,7 +386,7 @@ public:

void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override
{
if (channel < MAX_MIDI_CHANNELS)
if (channel >= 0 && channel < MAX_MIDI_CHANNELS)
pData->midiprog.current = fCurMidiProgs[channel];

CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback);
@@ -1305,6 +1314,7 @@ public:
pData->options |= PLUGIN_OPTION_SEND_PITCHBEND;
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier(fFormat);
identifier += "/";
@@ -1318,6 +1328,7 @@ public:

// load settings
pData->options = pData->loadSettings(pData->options, getOptionsAvailable());
#endif
}

return true;


+ 28
- 30
source/backend/plugin/Lv2Plugin.cpp View File

@@ -731,19 +731,16 @@ public:
{
CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, 0.0f);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f);
CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), 0.0f);

const int32_t rindex(pData->param.data[parameterId].rindex);

if (rindex < static_cast<int32_t>(fRdfDescriptor->PortCount))
{
const LV2_RDF_Port* const port(&fRdfDescriptor->Ports[rindex]);
CARLA_SAFE_ASSERT_RETURN(scalePointId < port->ScalePointCount, 0.0f);

if (scalePointId < port->ScalePointCount)
{
const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]);
return portScalePoint->Value;
}
const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]);
return portScalePoint->Value;
}

return 0.0f;
@@ -917,23 +914,20 @@ public:
{
CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId),);

const int32_t rindex(pData->param.data[parameterId].rindex);

if (rindex < static_cast<int32_t>(fRdfDescriptor->PortCount))
{
const LV2_RDF_Port* const port(&fRdfDescriptor->Ports[rindex]);
CARLA_SAFE_ASSERT_RETURN(scalePointId < port->ScalePointCount,);

if (scalePointId < port->ScalePointCount)
{
const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]);
const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]);

if (portScalePoint->Label != nullptr)
{
std::strncpy(strBuf, portScalePoint->Label, STR_MAX);
return;
}
if (portScalePoint->Label != nullptr)
{
std::strncpy(strBuf, portScalePoint->Label, STR_MAX);
return;
}
}

@@ -1249,14 +1243,18 @@ public:
else if (fExt.uishow != nullptr)
{
fExt.uishow->show(fUi.handle);
# ifndef BUILD_BRIDGE
pData->tryTransient();
# endif
}
}
else
#endif
{
LV2_EXTERNAL_UI_SHOW((LV2_External_UI_Widget*)fUi.widget);
#ifndef BUILD_BRIDGE
pData->tryTransient();
#endif
}
}
else
@@ -1574,7 +1572,7 @@ public:
{
if (LV2_IS_PORT_INPUT(portTypes))
{
uint32_t j = iAudioIn++;
const uint32_t j = iAudioIn++;
pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true);
pData->audioIn.ports[j].rindex = i;

@@ -1587,7 +1585,7 @@ public:
}
else if (LV2_IS_PORT_OUTPUT(portTypes))
{
uint32_t j = iAudioOut++;
const uint32_t j = iAudioOut++;
pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false);
pData->audioOut.ports[j].rindex = i;

@@ -1605,13 +1603,13 @@ public:
{
if (LV2_IS_PORT_INPUT(portTypes))
{
uint32_t j = iCvIn++;
const uint32_t j = iCvIn++;
fCvIn.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, true);
fCvIn.ports[j].rindex = i;
}
else if (LV2_IS_PORT_OUTPUT(portTypes))
{
uint32_t j = iCvOut++;
const uint32_t j = iCvOut++;
fCvOut.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, false);
fCvOut.ports[j].rindex = i;
}
@@ -1622,7 +1620,7 @@ public:
{
if (LV2_IS_PORT_INPUT(portTypes))
{
uint32_t j = iEvIn++;
const uint32_t j = iEvIn++;

fDescriptor->connect_port(fHandle, i, &fEventsIn.data[j].atom->atoms);

@@ -1660,7 +1658,7 @@ public:
}
else if (LV2_IS_PORT_OUTPUT(portTypes))
{
uint32_t j = iEvOut++;
const uint32_t j = iEvOut++;

fDescriptor->connect_port(fHandle, i, &fEventsOut.data[j].atom->atoms);

@@ -1703,7 +1701,7 @@ public:
{
if (LV2_IS_PORT_INPUT(portTypes))
{
uint32_t j = iEvIn++;
const uint32_t j = iEvIn++;

fDescriptor->connect_port(fHandle, i, fEventsIn.data[j].event);

@@ -1741,7 +1739,7 @@ public:
}
else if (LV2_IS_PORT_OUTPUT(portTypes))
{
uint32_t j = iEvOut++;
const uint32_t j = iEvOut++;

fDescriptor->connect_port(fHandle, i, fEventsOut.data[j].event);

@@ -1784,7 +1782,7 @@ public:
{
if (LV2_IS_PORT_INPUT(portTypes))
{
uint32_t j = iEvIn++;
const uint32_t j = iEvIn++;

fDescriptor->connect_port(fHandle, i, &fEventsIn.data[j].midi);

@@ -1813,7 +1811,7 @@ public:
}
else if (LV2_IS_PORT_OUTPUT(portTypes))
{
uint32_t j = iEvOut++;
const uint32_t j = iEvOut++;

fDescriptor->connect_port(fHandle, i, &fEventsOut.data[j].midi);

@@ -1849,13 +1847,9 @@ public:
const LV2_Property portDesignation(fRdfDescriptor->Ports[i].Designation);
const LV2_RDF_PortPoints portPoints(fRdfDescriptor->Ports[i].Points);

uint32_t j = iCtrl++;
pData->param.data[j].hints = 0x0;
const uint32_t j = iCtrl++;
pData->param.data[j].index = static_cast<int32_t>(j);
pData->param.data[j].rindex = static_cast<int32_t>(i);
pData->param.data[j].midiCC = -1;
pData->param.data[j].midiChannel = 0;
pData->param.special[j] = PARAMETER_SPECIAL_NULL;

float min, max, def, step, stepSmall, stepLarge;

@@ -2455,11 +2449,13 @@ public:
}
}

#ifndef BUILD_BRIDGE
if (pData->latency > 0)
{
for (uint32_t i=0; i < pData->audioIn.count; ++i)
FLOAT_CLEAR(pData->latencyBuffers[i], pData->latency);
}
#endif

pData->needsReset = false;
}
@@ -4637,6 +4633,7 @@ public:
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
}

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("LV2/");
identifier += uri;
@@ -4648,6 +4645,7 @@ public:
// ignore settings, we need this anyway
if (getMidiInCount() > 0 || needsFixedBuffer())
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
#endif
}

// ---------------------------------------------------------------


+ 32
- 15
source/backend/plugin/NativePlugin.cpp View File

@@ -333,11 +333,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, 0.0f);
CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0.0f);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f);
CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), 0.0f);

// FIXME - try
if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId))
{
CARLA_SAFE_ASSERT_RETURN(scalePointId < param->scalePointCount, 0.0f);

const NativeParameterScalePoint* scalePoint(&param->scalePoints[scalePointId]);
return scalePoint->value;
}
@@ -351,9 +352,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->label != nullptr)
{
std::strncpy(strBuf, fDescriptor->label, STR_MAX);
else
CarlaPlugin::getLabel(strBuf);
return;
}

CarlaPlugin::getLabel(strBuf);
}

void getMaker(char* const strBuf) const noexcept override
@@ -361,9 +365,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->maker != nullptr)
{
std::strncpy(strBuf, fDescriptor->maker, STR_MAX);
else
CarlaPlugin::getMaker(strBuf);
return;
}

CarlaPlugin::getMaker(strBuf);
}

void getCopyright(char* const strBuf) const noexcept override
@@ -371,9 +378,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->copyright != nullptr)
{
std::strncpy(strBuf, fDescriptor->copyright, STR_MAX);
else
CarlaPlugin::getCopyright(strBuf);
return;
}

CarlaPlugin::getCopyright(strBuf);
}

void getRealName(char* const strBuf) const noexcept override
@@ -381,9 +391,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);

if (fDescriptor->name != nullptr)
{
std::strncpy(strBuf, fDescriptor->name, STR_MAX);
else
CarlaPlugin::getRealName(strBuf);
return;
}

CarlaPlugin::getRealName(strBuf);
}

void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
@@ -401,6 +414,7 @@ public:
std::strncpy(strBuf, param->name, STR_MAX);
return;
}

carla_safe_assert("param->name != nullptr", __FILE__, __LINE__);
return CarlaPlugin::getParameterName(parameterId, strBuf);
}
@@ -443,6 +457,7 @@ public:
std::strncpy(strBuf, param->unit, STR_MAX);
return;
}

return CarlaPlugin::getParameterUnit(parameterId, strBuf);
}

@@ -456,11 +471,12 @@ public:
CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr,);
CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId),);

// FIXME - try
if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId))
{
CARLA_SAFE_ASSERT_RETURN(scalePointId < param->scalePointCount,);

const NativeParameterScalePoint* scalePoint(&param->scalePoints[scalePointId]);

if (scalePoint->label != nullptr)
@@ -468,6 +484,7 @@ public:
std::strncpy(strBuf, scalePoint->label, STR_MAX);
return;
}

carla_safe_assert("scalePoint->label != nullptr", __FILE__, __LINE__);
return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
}
@@ -532,7 +549,7 @@ public:

void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override
{
if (channel < MAX_MIDI_CHANNELS && pData->midiprog.count > 0)
if (channel >= 0 && channel < MAX_MIDI_CHANNELS && pData->midiprog.count > 0)
pData->midiprog.current = fCurMidiProgs[channel];

CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback);
@@ -694,8 +711,10 @@ public:
return;
}

#ifndef BUILD_BRIDGE
if ((fDescriptor->hints & ::PLUGIN_USES_PARENT_ID) == 0)
pData->tryTransient();
#endif

if (fDescriptor->ui_set_custom_data != nullptr)
{
@@ -949,12 +968,8 @@ public:
CARLA_SAFE_ASSERT_CONTINUE(paramInfo != nullptr);

pData->param.data[j].type = PARAMETER_UNKNOWN;
pData->param.data[j].hints = 0x0;
pData->param.data[j].index = static_cast<int32_t>(j);
pData->param.data[j].rindex = static_cast<int32_t>(j);
pData->param.data[j].midiCC = -1;
pData->param.data[j].midiChannel = 0;
pData->param.special[j] = PARAMETER_SPECIAL_NULL;

float min, max, def, step, stepSmall, stepLarge;

@@ -2341,6 +2356,7 @@ public:
if (fDescriptor->supports & ::PLUGIN_SUPPORTS_ALL_SOUND_OFF)
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("Native/");
identifier += label;
@@ -2352,6 +2368,7 @@ public:
// ignore settings, we need this anyway
if (getMidiInCount() > 0 || (fDescriptor->hints & ::PLUGIN_NEEDS_FIXED_BUFFERS) != 0)
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
#endif
}

return true;


+ 4
- 0
source/backend/plugin/ReWirePlugin.cpp View File

@@ -700,11 +700,13 @@ public:

if (pData->needsReset)
{
#ifndef BUILD_BRIDGE
if (pData->latency > 0)
{
for (uint32_t i=0; i < pData->audioIn.count; ++i)
FLOAT_CLEAR(pData->latencyBuffers[i], pData->latency);
}
#endif

pData->needsReset = false;
}
@@ -1033,6 +1035,7 @@ public:
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
}

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("ReWire/");
identifier += fLabel;
@@ -1044,6 +1047,7 @@ public:
// ignore settings, we need this anyway
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
pData->options |= PLUGIN_OPTION_USE_CHUNKS;
#endif
}

return true;


+ 6
- 3
source/backend/plugin/VstPlugin.cpp View File

@@ -620,11 +620,8 @@ public:
for (uint32_t j=0; j < params; ++j)
{
pData->param.data[j].type = PARAMETER_INPUT;
pData->param.data[j].hints = 0x0;
pData->param.data[j].index = static_cast<int32_t>(j);
pData->param.data[j].rindex = static_cast<int32_t>(j);
pData->param.data[j].midiCC = -1;
pData->param.data[j].midiChannel = 0;

float min, max, def, step, stepSmall, stepLarge;

@@ -853,7 +850,9 @@ public:
#endif

pData->client->setLatency(pData->latency);
#ifndef BUILD_BRIDGE
pData->recreateLatencyBuffers();
#endif
}

// special plugin fixes
@@ -1056,11 +1055,13 @@ public:
}
}

#ifndef BUILD_BRIDGE
if (pData->latency > 0)
{
for (uint32_t i=0; i < pData->audioIn.count; ++i)
FLOAT_CLEAR(pData->latencyBuffers[i], pData->latency);
}
#endif

pData->needsReset = false;
}
@@ -2256,6 +2257,7 @@ public:
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
}

#ifndef BUILD_BRIDGE
// set identifier string
CarlaString identifier("VST/");

@@ -2274,6 +2276,7 @@ public:
// ignore settings, we need this anyway
if (getMidiInCount() > 0)
pData->options |= PLUGIN_OPTION_FIXED_BUFFERS;
#endif
}

return true;


Loading…
Cancel
Save