Browse Source

Cleanup options/hints flags code

tags/1.9.4
falkTX 12 years ago
parent
commit
4d0d24f500
10 changed files with 120 additions and 100 deletions
  1. +6
    -0
      source/backend/plugin/CarlaPluginInternal.hpp
  2. +34
    -29
      source/backend/plugin/DssiPlugin.cpp
  3. +11
    -10
      source/backend/plugin/FluidSynthPlugin.cpp
  4. +10
    -7
      source/backend/plugin/LadspaPlugin.cpp
  5. +16
    -15
      source/backend/plugin/LinuxSamplerPlugin.cpp
  6. +4
    -7
      source/backend/plugin/Lv2Plugin.cpp
  7. +31
    -21
      source/backend/plugin/NativePlugin.cpp
  8. +4
    -7
      source/backend/plugin/VstPlugin.cpp
  9. +3
    -3
      source/backend/standalone/CarlaStandalone.cpp
  10. +1
    -1
      source/bridges/CarlaBridgePlugin.cpp

+ 6
- 0
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -50,6 +50,7 @@ const unsigned short MAX_MIDI_EVENTS = 512;

const unsigned int PLUGIN_HINT_HAS_MIDI_IN = 0x1;
const unsigned int PLUGIN_HINT_HAS_MIDI_OUT = 0x2;
const unsigned int PLUGIN_HINT_CAN_RUN_RACK = 0x4;

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

@@ -548,6 +549,11 @@ struct CarlaPluginProtectedData {
return plugin->kData->audioOut.ports[index].port;
}

static bool canRunInRack(CarlaPlugin* const plugin)
{
return (plugin->kData->extraHints & PLUGIN_HINT_CAN_RUN_RACK);
}

CARLA_LEAK_DETECTOR(CarlaPluginProtectedData)
};



+ 34
- 29
source/backend/plugin/DssiPlugin.cpp View File

@@ -120,7 +120,7 @@ public:

int32_t chunkData(void** const dataPtr)
{
CARLA_ASSERT(fHints & PLUGIN_USES_CHUNKS);
CARLA_ASSERT(fOptions & PLUGIN_OPTION_USE_CHUNKS);
CARLA_ASSERT(fDssiDescriptor != nullptr);
CARLA_ASSERT(fDssiDescriptor->get_custom_data != nullptr);
CARLA_ASSERT(fHandle != nullptr);
@@ -255,7 +255,7 @@ public:

void setChunkData(const char* const stringData)
{
CARLA_ASSERT(fHints & PLUGIN_USES_CHUNKS);
CARLA_ASSERT(fOptions & PLUGIN_OPTION_USE_CHUNKS);
CARLA_ASSERT(fDssiDescriptor != nullptr);
CARLA_ASSERT(fDssiDescriptor->set_custom_data != nullptr);
CARLA_ASSERT(fHandle != nullptr);
@@ -668,8 +668,14 @@ public:
kData->event.portOut = (CarlaEngineEventPort*)kData->client->addPort(kEnginePortTypeEvent, portName, false);
}

// plugin checks
fHints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO);
// plugin hints
const bool haveGUI = (fHints & PLUGIN_HAS_GUI);
const bool isDssiVst = QString(fFilename).endsWith("dssi-vst.so", Qt::CaseInsensitive);

fHints = 0x0;

if (haveGUI)
fHints |= PLUGIN_HAS_GUI;

if (mIns == 1 && aIns == 0 && aOuts > 0)
fHints |= PLUGIN_IS_SYNTH;
@@ -683,38 +689,37 @@ public:
if (aOuts >= 2 && aOuts % 2 == 0)
fHints |= PLUGIN_CAN_BALANCE;

// extra plugin hints
kData->extraHints = 0x0;

if (mIns > 0)
kData->extraHints |= PLUGIN_HINT_HAS_MIDI_IN;

if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0))
fHints |= PLUGIN_CAN_FORCE_STEREO;
kData->extraHints |= PLUGIN_HINT_CAN_RUN_RACK;

// plugin options
kData->availOptions &= ~(PLUGIN_OPTION_FIXED_BUFFER | PLUGIN_OPTION_SELF_AUTOMATION | PLUGIN_OPTION_SEND_ALL_SOUND_OFF | PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH | PLUGIN_OPTION_SEND_PITCHBEND);
fOptions = 0x0;

// always available if needed
kData->availOptions |= PLUGIN_OPTION_SELF_AUTOMATION;
fOptions |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;

// dssi-vst can do chunks, but needs fixed buffers
if (QString(fFilename).endsWith("dssi-vst.so", Qt::CaseInsensitive))
if (forcedStereoIn || forcedStereoOut)
fOptions |= PLUGIN_OPTION_FORCE_STEREO;

if (isDssiVst)
{
carla_stdout("dssi-vst detected, disabling sample accurate events (ie, fixed buffer)");
fOptions |= PLUGIN_OPTION_FIXED_BUFFER;

if (fOptions & PLUGIN_OPTION_USE_CHUNKS)
{
if (fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr)
fHints |= PLUGIN_USES_CHUNKS;
}
}
else
{
kData->availOptions |= PLUGIN_OPTION_FIXED_BUFFER;
if (kData->engine->getOptions().useDssiVstChunks && fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr)
fOptions |= PLUGIN_OPTION_USE_CHUNKS;
}

// only for plugins with midi input
if (mIns > 0)
{
kData->availOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
kData->availOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
kData->availOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
fOptions |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE;
fOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
fOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
fOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
}

// check latency
@@ -1246,7 +1251,7 @@ public:

postponeRtEvent(kPluginPostRtEventNoteOn, channel, note, velo);
}
else if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status))
else if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) != 0)
{
const uint8_t note = midiEvent.data[1];
const uint8_t pressure = midiEvent.data[2];
@@ -1256,7 +1261,7 @@ public:
fMidiEvents[midiEventCount].data.note.note = note;
fMidiEvents[midiEventCount].data.note.velocity = pressure;
}
else if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fHints & PLUGIN_OPTION_SELF_AUTOMATION) != 0)
else if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fOptions & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0)
{
const uint8_t control = midiEvent.data[1];
const uint8_t value = midiEvent.data[2];
@@ -1266,7 +1271,7 @@ public:
fMidiEvents[midiEventCount].data.control.param = control;
fMidiEvents[midiEventCount].data.control.value = value;
}
else if (MIDI_IS_STATUS_AFTERTOUCH(status))
else if (MIDI_IS_STATUS_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) != 0)
{
const uint8_t pressure = midiEvent.data[1];

@@ -1274,7 +1279,7 @@ public:
fMidiEvents[midiEventCount].data.control.channel = channel;
fMidiEvents[midiEventCount].data.control.value = pressure;
}
else if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status))
else if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status) && (fOptions & PLUGIN_OPTION_SEND_PITCHBEND) != 0)
{
const uint8_t lsb = midiEvent.data[1];
const uint8_t msb = midiEvent.data[2];
@@ -1795,7 +1800,7 @@ CarlaPlugin* CarlaPlugin::newDSSI(const Initializer& init, const char* const gui

plugin->reload();

if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && (plugin->hints() & PLUGIN_CAN_FORCE_STEREO) == 0)
if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! CarlaPluginProtectedData::canRunInRack(plugin))
{
init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo DSSI plugins, sorry!");
delete plugin;


+ 11
- 10
source/backend/plugin/FluidSynthPlugin.cpp View File

@@ -726,23 +726,24 @@ public:

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

// plugin checks
fHints = 0;

// plugin hints
fHints = 0x0;
fHints |= PLUGIN_IS_RTSAFE;
fHints |= PLUGIN_IS_SYNTH;
fHints |= PLUGIN_CAN_VOLUME;
fHints |= PLUGIN_CAN_BALANCE;

if (! kUses16Outs)
{
fHints |= PLUGIN_CAN_BALANCE;
}
// extra plugin hints
kData->extraHints = 0x0;
kData->extraHints |= PLUGIN_HINT_CAN_RUN_RACK;

// plugin options
fOptions = 0;

fOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
fOptions = 0x0;
fOptions |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;
fOptions |= PLUGIN_OPTION_SEND_CONTROL_CHANGES;
fOptions |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE;
fOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
fOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;

bufferSizeChanged(kData->engine->getBufferSize());
reloadPrograms(true);


+ 10
- 7
source/backend/plugin/LadspaPlugin.cpp View File

@@ -673,8 +673,8 @@ public:
kData->event.portOut = (CarlaEngineEventPort*)kData->client->addPort(kEnginePortTypeEvent, portName, false);
}

// plugin checks
fHints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO);
// plugin hints
fHints = 0x0;

if (aOuts > 0 && (aIns == aOuts || aIns == 1))
fHints |= PLUGIN_CAN_DRYWET;
@@ -685,14 +685,17 @@ public:
if (aOuts >= 2 && aOuts % 2 == 0)
fHints |= PLUGIN_CAN_BALANCE;

// extra plugin hints
kData->extraHints = 0x0;

if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0))
fHints |= PLUGIN_CAN_FORCE_STEREO;
kData->extraHints |= PLUGIN_HINT_CAN_RUN_RACK;

// plugin options
kData->availOptions &= ~(PLUGIN_OPTION_FIXED_BUFFER | PLUGIN_OPTION_SELF_AUTOMATION | PLUGIN_OPTION_SEND_ALL_SOUND_OFF | PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH | PLUGIN_OPTION_SEND_PITCHBEND);
fOptions = 0x0;

// always available if needed
kData->availOptions |= PLUGIN_OPTION_FIXED_BUFFER;
if (forcedStereoIn || forcedStereoOut)
fOptions |= PLUGIN_OPTION_FORCE_STEREO;

// check latency
if (fHints & PLUGIN_CAN_DRYWET)
@@ -1392,7 +1395,7 @@ CarlaPlugin* CarlaPlugin::newLADSPA(const Initializer& init, const LADSPA_RDF_De

plugin->reload();

if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && (plugin->hints() & PLUGIN_CAN_FORCE_STEREO) == 0)
if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! CarlaPluginProtectedData::canRunInRack(plugin))
{
init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo LADSPA plugins, sorry!");
delete plugin;


+ 16
- 15
source/backend/plugin/LinuxSamplerPlugin.cpp View File

@@ -355,22 +355,23 @@ public:

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

// plugin checks
fHints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO);
// plugin hints
fHints = 0x0;
fHints |= PLUGIN_IS_RTSAFE;
fHints |= PLUGIN_IS_SYNTH;
fHints |= PLUGIN_CAN_VOLUME;
fHints |= PLUGIN_CAN_BALANCE;
fHints |= PLUGIN_CAN_FORCE_STEREO;

// plugin options
kData->availOptions &= ~(PLUGIN_OPTION_FIXED_BUFFER | PLUGIN_OPTION_SELF_AUTOMATION | PLUGIN_OPTION_SEND_ALL_SOUND_OFF | PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH | PLUGIN_OPTION_SEND_PITCHBEND);
// extra plugin hints
kData->extraHints = 0x0;
kData->extraHints |= PLUGIN_HINT_CAN_RUN_RACK;

// always available if needed
kData->availOptions |= PLUGIN_OPTION_SELF_AUTOMATION;
kData->availOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
kData->availOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
kData->availOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
// plugin options
fOptions = 0x0;
fOptions |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;
fOptions |= PLUGIN_OPTION_SEND_CONTROL_CHANGES;
fOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
fOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;

bufferSizeChanged(kData->engine->getBufferSize());
reloadPrograms(true);
@@ -726,27 +727,27 @@ public:

postponeRtEvent(kPluginPostRtEventNoteOn, channel, note, velo);
}
else if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status))
else if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) != 0)
{
//const uint8_t note = midiEvent.data[1];
//const uint8_t pressure = midiEvent.data[2];

// unsupported
}
else if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fHints & PLUGIN_OPTION_SELF_AUTOMATION) != 0)
else if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fOptions & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0)
{
const uint8_t control = midiEvent.data[1];
const uint8_t value = midiEvent.data[2];

fMidiInputPort->DispatchControlChange(control, value, channel, fragmentPos);
}
else if (MIDI_IS_STATUS_AFTERTOUCH(status))
else if (MIDI_IS_STATUS_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) != 0)
{
//const uint8_t pressure = midiEvent.data[1];

// unsupported
}
else if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status))
else if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status) && (fOptions & PLUGIN_OPTION_SEND_PITCHBEND) != 0)
{
const uint8_t lsb = midiEvent.data[1];
const uint8_t msb = midiEvent.data[2];


+ 4
- 7
source/backend/plugin/Lv2Plugin.cpp View File

@@ -4671,14 +4671,11 @@ CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init)

plugin->reload();

if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK)
if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! CarlaPluginProtectedData::canRunInRack(plugin))
{
if (! (plugin->hints() & PLUGIN_CAN_FORCE_STEREO))
{
init.engine->setLastError("Carla's rack mode can only work with Mono (simple) or Stereo LV2 plugins, sorry!");
delete plugin;
return nullptr;
}
init.engine->setLastError("Carla's rack mode can only work with Mono (simple) or Stereo LV2 plugins, sorry!");
delete plugin;
return nullptr;
}

//plugin->updateUi();


+ 31
- 21
source/backend/plugin/NativePlugin.cpp View File

@@ -160,7 +160,7 @@ public:
return PLUGIN_INTERNAL;
}

PluginCategory category()
PluginCategory category() const
{
CARLA_ASSERT(fDescriptor != nullptr);

@@ -491,7 +491,7 @@ public:

deleteBuffers();

const double sampleRate = kData->engine->getSampleRate();
const float sampleRate = (float)kData->engine->getSampleRate();

uint32_t aIns, aOuts, mIns, mOuts, params, j;

@@ -561,7 +561,7 @@ public:
kData->param.createNew(params);
}

const int portNameSize = kData->engine->maxPortNameSize();
const uint portNameSize = kData->engine->maxPortNameSize();
CarlaString portName;

// Audio Ins
@@ -808,8 +808,8 @@ public:
kData->event.portOut = (CarlaEngineEventPort*)kData->client->addPort(kEnginePortTypeEvent, portName, false);
}

// plugin checks
fHints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO);
// plugin hints
fHints = 0x0;

if (aOuts > 0 && (aIns == aOuts || aIns == 1))
fHints |= PLUGIN_CAN_DRYWET;
@@ -817,12 +817,9 @@ public:
if (aOuts > 0)
fHints |= PLUGIN_CAN_VOLUME;

if (aOuts >= 2 && aOuts%2 == 0)
if (aOuts >= 2 && aOuts % 2 == 0)
fHints |= PLUGIN_CAN_BALANCE;

if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0) && mIns <= 1 && mOuts <= 1)
fHints |= PLUGIN_CAN_FORCE_STEREO;

// native plugin hints
if (fDescriptor->hints & ::PLUGIN_IS_RTSAFE)
fHints |= PLUGIN_IS_RTSAFE;
@@ -831,21 +828,28 @@ public:
if (fDescriptor->hints & ::PLUGIN_HAS_GUI)
fHints |= PLUGIN_HAS_GUI;
if (fDescriptor->hints & ::PLUGIN_USES_SINGLE_THREAD)
fHints |= PLUGIN_USES_SINGLE_THREAD;
fHints |= PLUGIN_HAS_SINGLE_THREAD;

// extra plugin hints
kData->extraHints = 0x0;

if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0) && mIns <= 1 && mOuts <= 1)
kData->extraHints |= PLUGIN_HINT_CAN_RUN_RACK;

// plugin options
kData->availOptions &= ~(PLUGIN_OPTION_FIXED_BUFFER | PLUGIN_OPTION_SELF_AUTOMATION | PLUGIN_OPTION_SEND_ALL_SOUND_OFF | PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH | PLUGIN_OPTION_SEND_PITCHBEND);
fOptions = 0x0;

// always available if needed
kData->availOptions |= PLUGIN_OPTION_FIXED_BUFFER;
kData->availOptions |= PLUGIN_OPTION_SELF_AUTOMATION;
fOptions |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;

if (forcedStereoIn || forcedStereoOut)
fOptions |= PLUGIN_OPTION_FORCE_STEREO;

// only for plugins with midi input
if (mIns > 0)
{
kData->availOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
kData->availOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
kData->availOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
fOptions |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE;
fOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
fOptions |= PLUGIN_OPTION_SEND_PITCHBEND;
fOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
}

bufferSizeChanged(kData->engine->getBufferSize());
@@ -1295,10 +1299,16 @@ public:
uint8_t status = MIDI_GET_STATUS_FROM_DATA(midiEvent.data);
uint8_t channel = event.channel;

if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fHints & PLUGIN_OPTION_SELF_AUTOMATION) == 0)
if (MIDI_IS_STATUS_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0)
continue;
if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fOptions & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0)
continue;
if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0)
continue;
if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status) && (fOptions & PLUGIN_OPTION_SEND_PITCHBEND) == 0)
continue;

// Fix bad note-off (per DSSI spec)
// Fix bad note-off
if (MIDI_IS_STATUS_NOTE_ON(status) && midiEvent.data[2] == 0)
status -= 0x10;

@@ -1855,7 +1865,7 @@ CarlaPlugin* CarlaPlugin::newNative(const Initializer& init)

plugin->reload();

if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && (plugin->hints() & PLUGIN_CAN_FORCE_STEREO) == 0)
if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! CarlaPluginProtectedData::canRunInRack(plugin))
{
init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo Internal plugins, sorry!");
delete plugin;


+ 4
- 7
source/backend/plugin/VstPlugin.cpp View File

@@ -2398,14 +2398,11 @@ CarlaPlugin* CarlaPlugin::newVST(const Initializer& init)

plugin->reload();

if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK)
if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! CarlaPluginProtectedData::canRunInRack(plugin))
{
if (! (plugin->hints() & PLUGIN_CAN_FORCE_STEREO))
{
init.engine->setLastError("Carla's rack mode can only work with Stereo VST plugins, sorry!");
delete plugin;
return nullptr;
}
init.engine->setLastError("Carla's rack mode can only work with Stereo VST plugins, sorry!");
delete plugin;
return nullptr;
}

return plugin;


+ 3
- 3
source/backend/standalone/CarlaStandalone.cpp View File

@@ -166,7 +166,7 @@ const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigned int interna
if (nativePlugin->hints & PLUGIN_HAS_GUI)
info.hints |= CarlaBackend::PLUGIN_HAS_GUI;
if (nativePlugin->hints & PLUGIN_USES_SINGLE_THREAD)
info.hints |= CarlaBackend::PLUGIN_USES_SINGLE_THREAD;
info.hints |= CarlaBackend::PLUGIN_HAS_SINGLE_THREAD;

info.audioIns = nativePlugin->audioIns;
info.audioOuts = nativePlugin->audioOuts;
@@ -912,7 +912,7 @@ const char* carla_get_chunk_data(unsigned int pluginId)

if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId))
{
if (plugin->hints() & CarlaBackend::PLUGIN_USES_CHUNKS)
if (plugin->options() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS)
{
void* data = nullptr;
const int32_t dataSize = plugin->chunkData(&data);
@@ -1484,7 +1484,7 @@ void carla_set_chunk_data(unsigned int pluginId, const char* chunkData)

if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId))
{
if (plugin->hints() & CarlaBackend::PLUGIN_USES_CHUNKS)
if (plugin->options() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS)
return plugin->setChunkData(chunkData);

carla_stderr2("carla_set_chunk_data(%i, \"%s\") - plugin does not support chunks", pluginId, chunkData);


+ 1
- 1
source/bridges/CarlaBridgePlugin.cpp View File

@@ -231,7 +231,7 @@ public:
fEngine->osc_send_bridge_set_custom_data(cdata.type, cdata.key, cdata.value);
}

if (fPlugin->hints() & CarlaBackend::PLUGIN_USES_CHUNKS)
if (fPlugin->options() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS)
{
void* data = nullptr;
int32_t dataSize = fPlugin->chunkData(&data);


Loading…
Cancel
Save