|
|
@@ -37,18 +37,23 @@ CARLA_BACKEND_START_NAMESPACE |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
const unsigned int MAX_EVENT_BUFFER = 8192; // 0x2000 |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// Extra Plugin Hints |
|
|
|
const unsigned int PLUGIN_HAS_EXTENSION_OPTIONS = 0x1000; |
|
|
|
const unsigned int PLUGIN_HAS_EXTENSION_PROGRAMS = 0x2000; |
|
|
|
const unsigned int PLUGIN_HAS_EXTENSION_STATE = 0x4000; |
|
|
|
const unsigned int PLUGIN_HAS_EXTENSION_WORKER = 0x8000; |
|
|
|
#endif |
|
|
|
|
|
|
|
// Extra Parameter Hints |
|
|
|
const unsigned int PARAMETER_IS_STRICT_BOUNDS = 0x1000; |
|
|
|
const unsigned int PARAMETER_IS_TRIGGER = 0x2000; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// LV2 Event Data/Types |
|
|
|
const unsigned int CARLA_EVENT_DATA_ATOM = 0x01; |
|
|
|
const unsigned int CARLA_EVENT_DATA_EVENT = 0x02; |
|
|
@@ -56,7 +61,9 @@ const unsigned int CARLA_EVENT_DATA_MIDI_LL = 0x04; |
|
|
|
const unsigned int CARLA_EVENT_TYPE_MESSAGE = 0x10; // unused |
|
|
|
const unsigned int CARLA_EVENT_TYPE_MIDI = 0x20; |
|
|
|
const unsigned int CARLA_EVENT_TYPE_TIME = 0x40; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// LV2 URI Map Ids |
|
|
|
const uint32_t CARLA_URI_MAP_ID_NULL = 0; |
|
|
|
const uint32_t CARLA_URI_MAP_ID_ATOM_BLANK = 1; |
|
|
@@ -98,7 +105,9 @@ const uint32_t CARLA_URI_MAP_ID_TIME_SPEED = 36; |
|
|
|
const uint32_t CARLA_URI_MAP_ID_MIDI_EVENT = 37; |
|
|
|
const uint32_t CARLA_URI_MAP_ID_PARAM_SAMPLE_RATE = 38; |
|
|
|
const uint32_t CARLA_URI_MAP_ID_COUNT = 39; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// LV2 Feature Ids |
|
|
|
const uint32_t kFeatureIdBufSizeBounded = 0; |
|
|
|
const uint32_t kFeatureIdBufSizeFixed = 1; |
|
|
@@ -131,15 +140,19 @@ const uint32_t kFeatureIdUiResize = 27; |
|
|
|
const uint32_t kFeatureIdUiTouch = 28; |
|
|
|
const uint32_t kFeatureIdExternalUi = 29; |
|
|
|
const uint32_t kFeatureIdExternalUiOld = 30; |
|
|
|
const uint32_t kFeatureCount = 31; |
|
|
|
#endif |
|
|
|
const uint32_t kFeatureCount = 0 /*31*/; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
enum Lv2PluginGuiType { |
|
|
|
PLUGIN_UI_NULL, |
|
|
|
PLUGIN_UI_OSC, |
|
|
|
PLUGIN_UI_PARENT, |
|
|
|
PLUGIN_UI_EXTERNAL |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
struct Lv2EventData { |
|
|
|
uint32_t type; |
|
|
|
uint32_t rindex; |
|
|
@@ -199,7 +212,6 @@ struct Lv2EventData { |
|
|
|
CARLA_DECLARE_NON_COPY_STRUCT(Lv2EventData) |
|
|
|
}; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
struct Lv2PluginEventData { |
|
|
|
uint32_t count; |
|
|
|
Lv2EventData* data; |
|
|
@@ -329,11 +341,11 @@ struct Lv2PluginOptions { |
|
|
|
|
|
|
|
CARLA_DECLARE_NON_COPY_STRUCT(Lv2PluginOptions) |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
// ----------------------------------------------------- |
|
|
|
|
|
|
|
class Lv2Plugin : public CarlaPlugin/*, |
|
|
|
public CarlaPluginGui::Callback*/ |
|
|
|
class Lv2Plugin : public CarlaPlugin |
|
|
|
{ |
|
|
|
public: |
|
|
|
Lv2Plugin(CarlaEngine* const engine, const unsigned int id) |
|
|
@@ -357,6 +369,7 @@ public: |
|
|
|
|
|
|
|
pData->osc.thread.setMode(CarlaPluginThread::PLUGIN_THREAD_LV2_GUI); |
|
|
|
|
|
|
|
#if 0 |
|
|
|
for (uint32_t i=0; i < CARLA_URI_MAP_ID_COUNT; ++i) |
|
|
|
fCustomURIDs.append(nullptr); |
|
|
|
|
|
|
@@ -377,12 +390,14 @@ public: |
|
|
|
fAtomForge.URI = CARLA_URI_MAP_ID_ATOM_URI; |
|
|
|
fAtomForge.URID = CARLA_URI_MAP_ID_ATOM_URID; |
|
|
|
fAtomForge.Vector = CARLA_URI_MAP_ID_ATOM_VECTOR; |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
~Lv2Plugin() override |
|
|
|
{ |
|
|
|
carla_debug("Lv2Plugin::~Lv2Plugin()"); |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// close UI |
|
|
|
if (fUi.type != PLUGIN_UI_NULL) |
|
|
|
{ |
|
|
@@ -419,6 +434,7 @@ public: |
|
|
|
|
|
|
|
fUi.rdfDescriptor = nullptr; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
pData->singleMutex.lock(); |
|
|
|
pData->masterMutex.lock(); |
|
|
@@ -453,6 +469,7 @@ public: |
|
|
|
fRdfDescriptor = nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (fFeatures[kFeatureIdEvent] != nullptr && fFeatures[kFeatureIdEvent]->data != nullptr) |
|
|
|
delete (LV2_Event_Feature*)fFeatures[kFeatureIdEvent]->data; |
|
|
|
|
|
|
@@ -482,7 +499,9 @@ public: |
|
|
|
|
|
|
|
if (fFeatures[kFeatureIdWorker] != nullptr && fFeatures[kFeatureIdWorker]->data != nullptr) |
|
|
|
delete (LV2_Worker_Schedule*)fFeatures[kFeatureIdWorker]->data; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
for (uint32_t i=0; i < kFeatureCount; ++i) |
|
|
|
{ |
|
|
|
if (fFeatures[i] != nullptr) |
|
|
@@ -504,6 +523,7 @@ public: |
|
|
|
} |
|
|
|
|
|
|
|
fCustomURIDs.clear(); |
|
|
|
#endif |
|
|
|
|
|
|
|
clearBuffers(); |
|
|
|
} |
|
|
@@ -876,6 +896,7 @@ public: |
|
|
|
CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Set data (state) |
|
|
|
|
|
|
@@ -914,6 +935,7 @@ public: |
|
|
|
//uiHost->plugin_human_id = carla_strdup(guiTitle.toUtf8().constData()); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Set data (plugin-specific stuff) |
|
|
@@ -948,6 +970,7 @@ public: |
|
|
|
|
|
|
|
CarlaPlugin::setCustomData(type, key, value, sendGui); |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// FIXME - we should only call this once, after all data is stored |
|
|
|
|
|
|
|
if (fExt.state != nullptr) |
|
|
@@ -985,6 +1008,7 @@ public: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
if (sendGui) |
|
|
|
{ |
|
|
@@ -996,6 +1020,7 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
void setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback) override |
|
|
|
{ |
|
|
|
CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,); |
|
|
@@ -1041,7 +1066,9 @@ public: |
|
|
|
|
|
|
|
CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Set ui stuff |
|
|
|
|
|
|
@@ -1256,6 +1283,7 @@ public: |
|
|
|
|
|
|
|
CarlaPlugin::idle(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Plugin state |
|
|
@@ -1283,7 +1311,7 @@ public: |
|
|
|
|
|
|
|
uint32_t aIns, aOuts, cvIns, cvOuts, params, j; |
|
|
|
aIns = aOuts = cvIns = cvOuts = params = 0; |
|
|
|
List<unsigned int> evIns, evOuts; |
|
|
|
LinkedList<unsigned int> evIns, evOuts; |
|
|
|
|
|
|
|
bool forcedStereoIn, forcedStereoOut; |
|
|
|
forcedStereoIn = forcedStereoOut = false; |
|
|
@@ -1309,6 +1337,7 @@ public: |
|
|
|
else if (LV2_IS_PORT_OUTPUT(portTypes)) |
|
|
|
cvOuts += 1; |
|
|
|
} |
|
|
|
#if 0 |
|
|
|
else if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes)) |
|
|
|
{ |
|
|
|
if (LV2_IS_PORT_INPUT(portTypes)) |
|
|
@@ -1330,10 +1359,12 @@ public: |
|
|
|
else if (LV2_IS_PORT_OUTPUT(portTypes)) |
|
|
|
evOuts.append(CARLA_EVENT_DATA_MIDI_LL); |
|
|
|
} |
|
|
|
#endif |
|
|
|
else if (LV2_IS_PORT_CONTROL(portTypes)) |
|
|
|
params += 1; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// check extensions |
|
|
|
fExt.options = nullptr; |
|
|
|
fExt.programs = nullptr; |
|
|
@@ -1354,8 +1385,9 @@ public: |
|
|
|
if (pData->extraHints & PLUGIN_HAS_EXTENSION_WORKER) |
|
|
|
fExt.worker = (const LV2_Worker_Interface*)fDescriptor->extension_data(LV2_WORKER__interface); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
if ((pData->options & PLUGIN_OPTION_FORCE_STEREO) != 0 && (aIns == 1 || aOuts == 1) && fExt.state == nullptr && fExt.worker == nullptr) |
|
|
|
if ((pData->options & PLUGIN_OPTION_FORCE_STEREO) != 0 && (aIns == 1 || aOuts == 1) /*&& fExt.state == nullptr && fExt.worker == nullptr*/) |
|
|
|
{ |
|
|
|
if (fHandle2 == nullptr) |
|
|
|
fHandle2 = fDescriptor->instantiate(fDescriptor, sampleRate, fRdfDescriptor->Bundle, fFeatures); |
|
|
@@ -1397,13 +1429,13 @@ public: |
|
|
|
|
|
|
|
if (cvIns > 0) |
|
|
|
{ |
|
|
|
fCvIn.createNew(cvIns); |
|
|
|
//fCvIn.createNew(cvIns); |
|
|
|
needsCtrlIn = true; |
|
|
|
} |
|
|
|
|
|
|
|
if (cvOuts > 0) |
|
|
|
{ |
|
|
|
fCvOut.createNew(cvOuts); |
|
|
|
//fCvOut.createNew(cvOuts); |
|
|
|
needsCtrlOut = true; |
|
|
|
} |
|
|
|
|
|
|
@@ -1412,12 +1444,10 @@ public: |
|
|
|
pData->param.createNew(params+cvIns+cvOuts); |
|
|
|
|
|
|
|
fParamBuffers = new float[params+cvIns+cvOuts]; |
|
|
|
#ifdef HAVE_JUCE |
|
|
|
FloatVectorOperations::clear(fParamBuffers, params+cvIns+cvOuts); |
|
|
|
#else |
|
|
|
#endif |
|
|
|
FLOAT_CLEAR(fParamBuffers, params+cvIns+cvOuts); |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (evIns.count() > 0) |
|
|
|
{ |
|
|
|
const size_t count(evIns.count()); |
|
|
@@ -1481,11 +1511,12 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
const uint portNameSize(pData->engine->getMaxPortNameSize()); |
|
|
|
CarlaString portName; |
|
|
|
|
|
|
|
for (uint32_t i=0, iAudioIn=0, iAudioOut=0, iCvIn=0, iCvOut=0, iEvIn=0, iEvOut=0, iCtrl=0; i < portCount; ++i) |
|
|
|
for (uint32_t i=0, iAudioIn=0, iAudioOut=0, /*iCvIn=0, iCvOut=0, iEvIn=0, iEvOut=0,*/ iCtrl=0; i < portCount; ++i) |
|
|
|
{ |
|
|
|
const LV2_Property portTypes(fRdfDescriptor->Ports[i].Types); |
|
|
|
|
|
|
@@ -1534,6 +1565,7 @@ public: |
|
|
|
else |
|
|
|
carla_stderr("WARNING - Got a broken Port (Audio, but not input or output)"); |
|
|
|
} |
|
|
|
#if 0 |
|
|
|
else if (LV2_IS_PORT_CV(portTypes)) |
|
|
|
{ |
|
|
|
if (LV2_IS_PORT_INPUT(portTypes)) |
|
|
@@ -1817,6 +1849,7 @@ public: |
|
|
|
else |
|
|
|
carla_stderr("WARNING - Got a broken Port (MIDI, but not input or output)"); |
|
|
|
} |
|
|
|
#endif |
|
|
|
else if (LV2_IS_PORT_CONTROL(portTypes)) |
|
|
|
{ |
|
|
|
const LV2_Property portProps(fRdfDescriptor->Ports[i].Properties); |
|
|
@@ -1937,7 +1970,7 @@ public: |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
pData->param.data[j].hints |= PARAMETER_IS_INPUT; |
|
|
|
pData->param.data[j].type = PARAMETER_INPUT; |
|
|
|
pData->param.data[j].hints |= PARAMETER_IS_ENABLED; |
|
|
|
pData->param.data[j].hints |= PARAMETER_IS_AUTOMABLE; |
|
|
|
needsCtrlIn = true; |
|
|
@@ -1948,8 +1981,8 @@ public: |
|
|
|
|
|
|
|
if (LV2_IS_PORT_MIDI_MAP_CC(portMidiMap.Type)) |
|
|
|
{ |
|
|
|
if (! MIDI_IS_CONTROL_BANK_SELECT(portMidiMap.Number)) |
|
|
|
pData->param.data[j].midiCC = portMidiMap.Number; |
|
|
|
if (portMidiMap.Number < 0x5F && ! MIDI_IS_CONTROL_BANK_SELECT(portMidiMap.Number)) |
|
|
|
pData->param.data[j].midiCC = int16_t(portMidiMap.Number); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (LV2_IS_PORT_OUTPUT(portTypes)) |
|
|
@@ -2077,11 +2110,13 @@ public: |
|
|
|
pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false); |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (fEventsIn.ctrl != nullptr && fEventsIn.ctrl->port == nullptr) |
|
|
|
fEventsIn.ctrl->port = pData->event.portIn; |
|
|
|
|
|
|
|
if (fEventsOut.ctrl != nullptr && fEventsOut.ctrl->port == nullptr) |
|
|
|
fEventsOut.ctrl->port = pData->event.portOut; |
|
|
|
#endif |
|
|
|
|
|
|
|
if (forcedStereoIn || forcedStereoOut) |
|
|
|
pData->options |= PLUGIN_OPTION_FORCE_STEREO; |
|
|
@@ -2094,6 +2129,7 @@ public: |
|
|
|
if (isRealtimeSafe()) |
|
|
|
pData->hints |= PLUGIN_IS_RTSAFE; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (fUi.type != PLUGIN_UI_NULL) |
|
|
|
{ |
|
|
|
pData->hints |= PLUGIN_HAS_CUSTOM_UI; |
|
|
@@ -2101,6 +2137,7 @@ public: |
|
|
|
if (fUi.type == PLUGIN_UI_QT || fUi.type == PLUGIN_UI_PARENT) |
|
|
|
pData->hints |= PLUGIN_NEEDS_SINGLE_THREAD; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
//if (LV2_IS_GENERATOR(fRdfDescriptor->Type[0], fRdfDescriptor->Type[1])) |
|
|
|
// pData->hints |= PLUGIN_IS_SYNTH; |
|
|
@@ -2117,6 +2154,7 @@ public: |
|
|
|
// extra plugin hints |
|
|
|
pData->extraHints &= ~PLUGIN_EXTRA_HINT_CAN_RUN_RACK; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (fExt.state != nullptr || fExt.worker != nullptr) |
|
|
|
{ |
|
|
|
if ((aIns == 0 || aIns == 2) && (aOuts == 0 || aOuts == 2) && evIns.count() <= 1 && evOuts.count() <= 1) |
|
|
@@ -2127,6 +2165,7 @@ public: |
|
|
|
if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0) && evIns.count() <= 1 && evOuts.count() <= 1) |
|
|
|
pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
bufferSizeChanged(pData->engine->getBufferSize()); |
|
|
|
reloadPrograms(true); |
|
|
@@ -2140,6 +2179,7 @@ public: |
|
|
|
carla_debug("Lv2Plugin::reload() - end"); |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
void reloadPrograms(const bool init) override |
|
|
|
{ |
|
|
|
carla_debug("Lv2Plugin::reloadPrograms(%s)", bool2str(init)); |
|
|
@@ -2262,6 +2302,7 @@ public: |
|
|
|
pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0.0f, nullptr); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Plugin processing |
|
|
@@ -2279,7 +2320,7 @@ public: |
|
|
|
fDescriptor->activate(fHandle2); |
|
|
|
} |
|
|
|
|
|
|
|
fFirstActive = true; |
|
|
|
//fFirstActive = true; |
|
|
|
} |
|
|
|
|
|
|
|
void deactivate() override |
|
|
@@ -2307,16 +2348,11 @@ public: |
|
|
|
{ |
|
|
|
// disable any output sound |
|
|
|
for (i=0; i < pData->audioOut.count; ++i) |
|
|
|
{ |
|
|
|
#ifdef HAVE_JUCE |
|
|
|
FloatVectorOperations::clear(outBuffer[i], frames); |
|
|
|
#else |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
FLOAT_CLEAR(outBuffer[i], frames); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Handle events from different APIs |
|
|
|
|
|
|
@@ -2363,12 +2399,14 @@ public: |
|
|
|
} |
|
|
|
|
|
|
|
CARLA_PROCESS_CONTINUE_CHECK; |
|
|
|
#endif |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Check if needs reset |
|
|
|
|
|
|
|
if (pData->needsReset) |
|
|
|
{ |
|
|
|
#if 0 |
|
|
|
uint8_t midiData[3] = { 0 }; |
|
|
|
|
|
|
|
if (fEventsIn.ctrl != nullptr && (fEventsIn.ctrl->type & CARLA_EVENT_TYPE_MIDI) != 0) |
|
|
@@ -2422,7 +2460,7 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
//if (pData->latency > 0) |
|
|
|
{ |
|
|
|
//for (i=0; i < pData->audioIn.count; ++i) |
|
|
@@ -2434,6 +2472,7 @@ public: |
|
|
|
CARLA_PROCESS_CONTINUE_CHECK; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// TimeInfo |
|
|
|
|
|
|
@@ -2568,7 +2607,9 @@ public: |
|
|
|
|
|
|
|
CARLA_PROCESS_CONTINUE_CHECK; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Event Input and Processing |
|
|
|
|
|
|
@@ -2949,11 +2990,13 @@ public: |
|
|
|
// Plugin processing (no events) |
|
|
|
|
|
|
|
else |
|
|
|
#endif |
|
|
|
{ |
|
|
|
processSingle(inBuffer, outBuffer, frames, 0); |
|
|
|
|
|
|
|
} // End of Plugin processing (no events) |
|
|
|
|
|
|
|
#if 0 |
|
|
|
CARLA_PROCESS_CONTINUE_CHECK; |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
@@ -3027,6 +3070,7 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Control Output |
|
|
@@ -3039,7 +3083,7 @@ public: |
|
|
|
|
|
|
|
for (k=0; k < pData->param.count; ++k) |
|
|
|
{ |
|
|
|
if (pData->param.data[k].hints & PARAMETER_IS_INPUT) |
|
|
|
if (pData->param.data[k].type != PARAMETER_OUTPUT) |
|
|
|
continue; |
|
|
|
|
|
|
|
if (pData->param.data[k].hints & PARAMETER_IS_STRICT_BOUNDS) |
|
|
@@ -3071,7 +3115,7 @@ public: |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
fFirstActive = false; |
|
|
|
//fFirstActive = false; |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
} |
|
|
@@ -3135,6 +3179,7 @@ public: |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Set CV input buffers |
|
|
|
|
|
|
@@ -3149,6 +3194,7 @@ public: |
|
|
|
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(cvIndex), 0, cvValue); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Run plugin |
|
|
@@ -3163,7 +3209,7 @@ public: |
|
|
|
|
|
|
|
for (k=0; k < pData->param.count; ++k) |
|
|
|
{ |
|
|
|
if ((pData->param.data[k].hints & PARAMETER_IS_INPUT) == 0) |
|
|
|
if (pData->param.data[k].type != PARAMETER_INPUT) |
|
|
|
continue; |
|
|
|
|
|
|
|
if (pData->param.data[k].hints & PARAMETER_IS_TRIGGER) |
|
|
@@ -3265,6 +3311,7 @@ public: |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
// Set CV output buffers |
|
|
|
|
|
|
@@ -3278,6 +3325,7 @@ public: |
|
|
|
#endif |
|
|
|
fParamBuffers[cvIndex] = cvValue; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
@@ -3304,6 +3352,7 @@ public: |
|
|
|
fAudioOutBuffers[i] = new float[newBufferSize]; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
for (uint32_t i=0; i < fCvIn.count; ++i) |
|
|
|
{ |
|
|
|
if (CarlaEngineCVPort* const port = fCvIn.ports[i].port) |
|
|
@@ -3329,6 +3378,7 @@ public: |
|
|
|
fDescriptor->connect_port(fHandle2, fCvOut.ports[i].rindex, port->getBuffer()); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
if (fHandle2 == nullptr) |
|
|
|
{ |
|
|
@@ -3367,6 +3417,7 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (fLv2Options.maxBufferSize != static_cast<int>(newBufferSize) || (fLv2Options.minBufferSize > 1 && fLv2Options.minBufferSize != static_cast<int>(newBufferSize))) |
|
|
|
{ |
|
|
|
fLv2Options.maxBufferSize = newBufferSize; |
|
|
@@ -3380,6 +3431,7 @@ public: |
|
|
|
fExt.options->set(fHandle, &fLv2Options.optMaxBlockLenth); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
carla_debug("Lv2Plugin::bufferSizeChanged(%i) - end", newBufferSize); |
|
|
|
} |
|
|
@@ -3389,6 +3441,7 @@ public: |
|
|
|
CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); |
|
|
|
carla_debug("Lv2Plugin::sampleRateChanged(%g) - start", newSampleRate); |
|
|
|
|
|
|
|
#if 0 |
|
|
|
if (fLv2Options.sampleRate != newSampleRate) |
|
|
|
{ |
|
|
|
fLv2Options.sampleRate = newSampleRate; |
|
|
@@ -3396,12 +3449,13 @@ public: |
|
|
|
if (fExt.options != nullptr && fExt.options->set != nullptr) |
|
|
|
fExt.options->set(fHandle, &fLv2Options.optSampleRate); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
for (uint32_t k=0; k < pData->param.count; ++k) |
|
|
|
{ |
|
|
|
//if (pData->param.data[k].type == PARAMETER_SAMPLE_RATE) |
|
|
|
{ |
|
|
|
fParamBuffers[k] = newSampleRate; |
|
|
|
fParamBuffers[k] = float(newSampleRate); |
|
|
|
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 1, fParamBuffers[k]); |
|
|
|
} |
|
|
|
} |
|
|
@@ -3426,10 +3480,12 @@ public: |
|
|
|
|
|
|
|
void initBuffers() override |
|
|
|
{ |
|
|
|
#if 0 |
|
|
|
fEventsIn.initBuffers(); |
|
|
|
fEventsOut.initBuffers(); |
|
|
|
fCvIn.initBuffers(); |
|
|
|
fCvOut.initBuffers(); |
|
|
|
#endif |
|
|
|
|
|
|
|
CarlaPlugin::initBuffers(); |
|
|
|
} |
|
|
@@ -3474,16 +3530,19 @@ public: |
|
|
|
fParamBuffers = nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
fEventsIn.clear(); |
|
|
|
fEventsOut.clear(); |
|
|
|
fCvIn.clear(); |
|
|
|
fCvOut.clear(); |
|
|
|
#endif |
|
|
|
|
|
|
|
CarlaPlugin::clearBuffers(); |
|
|
|
|
|
|
|
carla_debug("Lv2Plugin::clearBuffers() - end"); |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Post-poned UI Stuff |
|
|
|
|
|
|
@@ -3606,6 +3665,7 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
@@ -3616,6 +3676,7 @@ protected: |
|
|
|
// pData->engine->callback(CALLBACK_SHOW_GUI, pData->id, 0, 0, 0.0f, nullptr); |
|
|
|
// } |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
LV2_URID getCustomURID(const char* const uri) |
|
|
@@ -3986,6 +4047,7 @@ protected: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
@@ -4019,7 +4081,7 @@ protected: |
|
|
|
|
|
|
|
const char* getUiBridgePath(const LV2_Property type) const |
|
|
|
{ |
|
|
|
const EngineOptions& options(pData->engine->getOptions()); |
|
|
|
//const EngineOptions& options(pData->engine->getOptions()); |
|
|
|
|
|
|
|
switch (type) |
|
|
|
{ |
|
|
@@ -4057,6 +4119,7 @@ protected: |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
bool isUiResizable() const |
|
|
|
{ |
|
|
|
for (uint32_t i=0; i < fUi.rdfDescriptor->FeatureCount; ++i) |
|
|
@@ -4107,6 +4170,7 @@ protected: |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
@@ -4133,8 +4197,8 @@ public: |
|
|
|
// --------------------------------------------------------------- |
|
|
|
// get plugin from lv2_rdf (lilv) |
|
|
|
|
|
|
|
Lv2WorldClass& lv2World(Lv2WorldClass::getInstance()); |
|
|
|
lv2World.init(); |
|
|
|
//Lv2WorldClass& lv2World(Lv2WorldClass::getInstance()); |
|
|
|
//lv2World.getPlugin(uri); |
|
|
|
|
|
|
|
fRdfDescriptor = lv2_rdf_new(uri, true); |
|
|
|
|
|
|
@@ -4153,6 +4217,7 @@ public: |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// --------------------------------------------------------------- |
|
|
|
// initialize options |
|
|
|
|
|
|
@@ -4268,6 +4333,7 @@ public: |
|
|
|
// check if it's possible to use non-fixed buffer size |
|
|
|
if (! needsFixedBuffer()) |
|
|
|
fFeatures[kFeatureIdBufSizeFixed]->URI = LV2_BUF_SIZE__boundedBlockLength; |
|
|
|
#endif |
|
|
|
|
|
|
|
// --------------------------------------------------------------- |
|
|
|
// get DLL main entry |
|
|
@@ -4362,6 +4428,7 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// Check extensions |
|
|
|
for (uint32_t i=0; i < fRdfDescriptor->ExtensionCount; ++i) |
|
|
|
{ |
|
|
@@ -4376,6 +4443,7 @@ public: |
|
|
|
else |
|
|
|
carla_stdout("Plugin has non-supported extension: '%s'", fRdfDescriptor->Extensions[i]); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
if (! canContinue) |
|
|
|
{ |
|
|
@@ -4436,9 +4504,11 @@ public: |
|
|
|
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; |
|
|
|
} |
|
|
|
|
|
|
|
// set identifier string |
|
|
|
CarlaString identifier("V2/"); |
|
|
|
identifier += uri; |
|
|
|
|
|
|
|
// load settings |
|
|
|
pData->idStr = "LV2/"; |
|
|
|
pData->idStr += uri; |
|
|
|
pData->options = pData->loadSettings(pData->options, getOptionsAvailable()); |
|
|
|
|
|
|
|
// ignore settings, we need this anyway |
|
|
@@ -4452,6 +4522,7 @@ public: |
|
|
|
if (fRdfDescriptor->UICount == 0) |
|
|
|
return true; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ----------------------------------------------------------- |
|
|
|
// find more appropriate ui |
|
|
|
|
|
|
@@ -4788,10 +4859,12 @@ public: |
|
|
|
fFeatures[kFeatureIdExternalUiOld]->URI = LV2_EXTERNAL_UI_DEPRECATED_URI; |
|
|
|
fFeatures[kFeatureIdExternalUiOld]->data = uiExternalHostFt; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
void handleTransferAtom(const uint32_t portIndex, const LV2_Atom* const atom) |
|
|
@@ -4815,6 +4888,7 @@ public: |
|
|
|
|
|
|
|
fCustomURIDs.append(carla_strdup(uri)); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
@@ -4829,6 +4903,7 @@ private: |
|
|
|
float** fAudioOutBuffers; |
|
|
|
float* fParamBuffers; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
Lv2AtomQueue fAtomQueueIn; |
|
|
|
Lv2AtomQueue fAtomQueueOut; |
|
|
|
LV2_Atom_Forge fAtomForge; |
|
|
@@ -4839,7 +4914,7 @@ private: |
|
|
|
Lv2PluginEventData fEventsOut; |
|
|
|
Lv2PluginOptions fLv2Options; |
|
|
|
|
|
|
|
List<const char*> fCustomURIDs; |
|
|
|
LinkedList<const char*> fCustomURIDs; |
|
|
|
|
|
|
|
bool fFirstActive; // first process() call after activate() |
|
|
|
EngineTimeInfo fLastTimeInfo; |
|
|
@@ -4884,7 +4959,9 @@ private: |
|
|
|
} |
|
|
|
|
|
|
|
} fUi; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if 0 |
|
|
|
// ------------------------------------------------------------------- |
|
|
|
// Event Feature |
|
|
|
|
|
|
@@ -5373,6 +5450,7 @@ private: |
|
|
|
|
|
|
|
((Lv2Plugin*)user_data)->handleLilvSetPortValue(port_symbol, value, size, type); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
@@ -5380,7 +5458,6 @@ private: |
|
|
|
}; |
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------------------------- |
|
|
|
#endif |
|
|
|
|
|
|
|
#define lv2PluginPtr ((Lv2Plugin*)plugin) |
|
|
|
|
|
|
@@ -5436,7 +5513,7 @@ CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init) |
|
|
|
{ |
|
|
|
carla_debug("CarlaPlugin::newLV2({%p, \"%s\", \"%s\"})", init.engine, init.name, init.label); |
|
|
|
|
|
|
|
#if 0 //def WANT_LV2 |
|
|
|
#ifdef WANT_LV2 |
|
|
|
Lv2Plugin* const plugin(new Lv2Plugin(init.engine, init.id)); |
|
|
|
|
|
|
|
if (! plugin->init(init.name, init.label)) |
|
|
|