diff --git a/source/Makefile.mk b/source/Makefile.mk index 180689a31..754d1603d 100644 --- a/source/Makefile.mk +++ b/source/Makefile.mk @@ -175,7 +175,7 @@ FLUIDSYNTH_LIBS = $(shell pkg-config --libs fluidsynth) endif ifeq ($(HAVE_LINUXSAMPLER),true) -LINUXSAMPLER_FLAGS = $(shell pkg-config --cflags linuxsampler) +LINUXSAMPLER_FLAGS = $(shell pkg-config --cflags linuxsampler) -Wno-unused-parameter LINUXSAMPLER_LIBS = $(shell pkg-config --libs linuxsampler) ifeq ($(WIN32),true) LINUXSAMPLER_LIBS += -lrpcrt4 diff --git a/source/backend/Makefile.mk b/source/backend/Makefile.mk index 09c7d4e8e..b83e1bbcd 100644 --- a/source/backend/Makefile.mk +++ b/source/backend/Makefile.mk @@ -19,8 +19,8 @@ BUILD_CXX_FLAGS += $(QTXML_FLAGS) BUILD_CXX_FLAGS += -DWANT_NATIVE ifeq ($(CARLA_PLUGIN_SUPPORT),true) -BUILD_CXX_FLAGS += -DWANT_LADSPA -# -DWANT_DSSI -DWANT_LV2 -DWANT_VST +BUILD_CXX_FLAGS += -DWANT_LADSPA -DWANT_DSSI -DWANT_LV2 +# -DWANT_VST # ifeq ($(CARLA_VESTIGE_HEADER),true) # BUILD_CXX_FLAGS += -DVESTIGE_HEADER # endif @@ -36,9 +36,9 @@ ifeq ($(HAVE_FLUIDSYNTH),true) BUILD_CXX_FLAGS += -DWANT_FLUIDSYNTH endif -# ifeq ($(HAVE_LINUXSAMPLER),true) -# BUILD_CXX_FLAGS += -DWANT_LINUXSAMPLER -# endif +ifeq ($(HAVE_LINUXSAMPLER),true) +BUILD_CXX_FLAGS += -DWANT_LINUXSAMPLER +endif # -------------------------------------------------------------- diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp index 554f09f7e..1477542a2 100644 --- a/source/backend/engine/CarlaEngine.cpp +++ b/source/backend/engine/CarlaEngine.cpp @@ -368,9 +368,9 @@ void CarlaEngineProtectedData::processRackFull(float** const inBuf, const uint32 { bool first = true; - for (List::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < inCount); if (first) @@ -396,9 +396,9 @@ void CarlaEngineProtectedData::processRackFull(float** const inBuf, const uint32 { bool first = true; - for (List::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < inCount); if (first) @@ -425,9 +425,9 @@ void CarlaEngineProtectedData::processRackFull(float** const inBuf, const uint32 // connect output buffers if (rack->connectedOuts[0].count() != 0) { - for (List::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < outCount); FLOAT_ADD(outBuf[port], rack->out[0], nframes); @@ -436,9 +436,9 @@ void CarlaEngineProtectedData::processRackFull(float** const inBuf, const uint32 if (rack->connectedOuts[1].count() != 0) { - for (List::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < outCount); FLOAT_ADD(outBuf[port], rack->out[1], nframes); @@ -601,9 +601,8 @@ bool CarlaEngineEventPort::writeControlEvent(const uint32_t time, const uint8_t CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, false); CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.0f); - if (type == kEngineControlEventTypeParameter) - { - CARLA_ASSERT(! MIDI_IS_CONTROL_BANK_SELECT(param)); + if (type == kEngineControlEventTypeParameter) { + CARLA_SAFE_ASSERT(! MIDI_IS_CONTROL_BANK_SELECT(param)); } const float fixedValue(carla_fixValue(0.0f, 1.0f, value)); @@ -1998,9 +1997,9 @@ bool CarlaEngine::patchbayDisconnect(const int connectionId) CARLA_SAFE_ASSERT_RETURN_ERR(rack->usedConnections.count() > 0, "No connections available"); - for (List::Itenerator it=rack->usedConnections.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=rack->usedConnections.begin(); it.valid(); it.next()) { - const ConnectionToId& connection(it.getConstValue()); + const ConnectionToId& connection(it.getValue()); if (connection.id == connectionId) { @@ -2019,7 +2018,7 @@ bool CarlaEngine::patchbayDisconnect(const int connectionId) } else if (targetPort >= RACK_PATCHBAY_GROUP_AUDIO_OUT*1000) { - CARLA_ASSERT(carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT1 || carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT2); + CARLA_SAFE_ASSERT_RETURN(carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT1 || carlaPort == RACK_PATCHBAY_PORT_AUDIO_OUT2, false); const int portId(targetPort-RACK_PATCHBAY_GROUP_AUDIO_OUT*1000); @@ -2034,7 +2033,7 @@ bool CarlaEngine::patchbayDisconnect(const int connectionId) } else if (targetPort >= RACK_PATCHBAY_GROUP_AUDIO_IN*1000) { - CARLA_ASSERT(carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN1 || carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN2); + CARLA_SAFE_ASSERT_RETURN(carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN1 || carlaPort == RACK_PATCHBAY_PORT_AUDIO_IN2, false); const int portId(targetPort-RACK_PATCHBAY_GROUP_AUDIO_IN*1000); @@ -2049,7 +2048,7 @@ bool CarlaEngine::patchbayDisconnect(const int connectionId) } else { - CARLA_ASSERT(false); + CARLA_SAFE_ASSERT_RETURN(false, false); } callback(ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED, connection.id, connection.portOut, connection.portIn, 0.0f, nullptr); diff --git a/source/backend/engine/CarlaEngineInternal.hpp b/source/backend/engine/CarlaEngineInternal.hpp index 1933d6a46..86f74eeb6 100644 --- a/source/backend/engine/CarlaEngineInternal.hpp +++ b/source/backend/engine/CarlaEngineInternal.hpp @@ -24,7 +24,7 @@ #include "CarlaPlugin.hpp" #include "CarlaMutex.hpp" -#include "List.hpp" +#include "LinkedList.hpp" #ifdef HAVE_JUCE # include "juce_audio_basics.h" @@ -205,12 +205,12 @@ struct EngineRackBuffers { float* out[2]; // connections stuff - List connectedIns[2]; - List connectedOuts[2]; + LinkedList connectedIns[2]; + LinkedList connectedOuts[2]; CarlaMutex connectLock; int lastConnectionId; - List usedConnections; + LinkedList usedConnections; EngineRackBuffers(const uint32_t bufferSize) : lastConnectionId(0) diff --git a/source/backend/engine/CarlaEngineJack.cpp b/source/backend/engine/CarlaEngineJack.cpp index e5c27310f..f8307314b 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -17,9 +17,7 @@ #include "CarlaEngineInternal.hpp" #include "CarlaBackendUtils.hpp" -#include "CarlaMIDI.h" -#include "List.hpp" #include "jackbridge/JackBridge.hpp" #include @@ -251,9 +249,8 @@ public: CARLA_SAFE_ASSERT_RETURN(param < 0x5F, false); CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.0f); - if (type == kEngineControlEventTypeParameter) - { - CARLA_ASSERT(! MIDI_IS_CONTROL_BANK_SELECT(param)); + if (type == kEngineControlEventTypeParameter) { + CARLA_SAFE_ASSERT(! MIDI_IS_CONTROL_BANK_SELECT(param)); } uint8_t size = 0; @@ -768,16 +765,10 @@ public: #ifndef BUILD_BRIDGE const char* renamePlugin(const unsigned int id, const char* const newName) override { - CARLA_ASSERT(pData->curPluginCount > 0); - CARLA_ASSERT(id < pData->curPluginCount); - CARLA_ASSERT(pData->plugins != nullptr); - CARLA_ASSERT(newName != nullptr); - - if (pData->plugins == nullptr) - { - setLastError("Critical error: no plugins are currently loaded!"); - return nullptr; - } + CARLA_SAFE_ASSERT_RETURN(pData->curPluginCount > 0, nullptr); + CARLA_SAFE_ASSERT_RETURN(id < pData->curPluginCount, nullptr); + CARLA_SAFE_ASSERT_RETURN(pData->plugins != nullptr, nullptr); + CARLA_SAFE_ASSERT_RETURN(newName != nullptr && newName[0] != '\0', nullptr); CarlaPlugin* const plugin(pData->plugins[id].plugin); @@ -787,12 +778,12 @@ public: return nullptr; } - CARLA_ASSERT(plugin->getId() == id); + CARLA_SAFE_ASSERT(plugin->getId() == id); bool needsReinit = (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT); const char* name = getUniquePluginName(newName); - // TODO - use rename port if single-client + // TODO - use rename port if single-client and JACK2 // JACK client rename if (pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) @@ -810,7 +801,7 @@ public: // we should not be able to do this, jack really needs to allow client rename needsReinit = true; - if (jack_client_t* jclient = jackbridge_client_open(name, JackNullOption, nullptr)) + if (jack_client_t* const jclient = jackbridge_client_open(name, JackNullOption, nullptr)) { //const char* const iconName(plugin->getIconName()); //jackbridge_custom_publish_data(jclient, URI_CANVAS_ICON, iconName, std::strlen(iconName)+1); @@ -858,7 +849,7 @@ public: bool patchbayConnect(int portA, int portB) override { - CARLA_ASSERT(fClient != nullptr); + CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); if (fClient == nullptr) { @@ -882,17 +873,11 @@ public: bool patchbayDisconnect(int connectionId) override { - CARLA_ASSERT(fClient != nullptr); - - if (fClient == nullptr) - { - setLastError("Invalid JACK client"); - return false; - } + CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); - for (List::Itenerator it = fUsedConnections.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedConnections.begin(); it.valid(); it.next()) { - const ConnectionToId& connectionToId(it.getConstValue()); + const ConnectionToId& connectionToId(it.getValue()); if (connectionToId.id == connectionId) { @@ -1238,16 +1223,9 @@ protected: const char* const portName(jackbridge_port_short_name(jackPort)); const char* const fullPortName(jackbridge_port_name(jackPort)); - CARLA_ASSERT(jackPort != nullptr); - CARLA_ASSERT(portName != nullptr); - CARLA_ASSERT(fullPortName != nullptr); - - if (jackPort == nullptr) - return; - if (portName == nullptr) - return; - if (fullPortName == nullptr) - return; + CARLA_SAFE_ASSERT_RETURN(jackPort != nullptr,); + CARLA_SAFE_ASSERT_RETURN(portName != nullptr,); + CARLA_SAFE_ASSERT_RETURN(fullPortName != nullptr,); CarlaString groupName(fullPortName); groupName.truncate(groupName.rfind(portName)-1); @@ -1298,11 +1276,8 @@ protected: { const int portId(getPortId(fullPortName)); - CARLA_ASSERT(groupId != -1); - CARLA_ASSERT(portId != -1); - - if (groupId == -1 || portId == -1) - return; + CARLA_SAFE_ASSERT_RETURN(groupId != -1,); + CARLA_SAFE_ASSERT_RETURN(portId != -1,); PortNameToId portNameId(groupId, portId, portName, fullPortName); fUsedPortNames.removeOne(portNameId); @@ -1318,19 +1293,10 @@ protected: const char* const fullPortNameA(jackbridge_port_name(jackPortA)); const char* const fullPortNameB(jackbridge_port_name(jackPortB)); - CARLA_ASSERT(jackPortA != nullptr); - CARLA_ASSERT(jackPortB != nullptr); - CARLA_ASSERT(fullPortNameA != nullptr); - CARLA_ASSERT(fullPortNameB != nullptr); - - if (jackPortA == nullptr) - return; - if (jackPortB == nullptr) - return; - if (fullPortNameA == nullptr) - return; - if (fullPortNameB == nullptr) - return; + CARLA_SAFE_ASSERT_RETURN(jackPortA != nullptr,); + CARLA_SAFE_ASSERT_RETURN(jackPortB != nullptr,); + CARLA_SAFE_ASSERT_RETURN(fullPortNameA != nullptr,); + CARLA_SAFE_ASSERT_RETURN(fullPortNameB != nullptr,); const int portIdA(getPortId(fullPortNameA)); const int portIdB(getPortId(fullPortNameB)); @@ -1347,9 +1313,9 @@ protected: } else { - for (List::Itenerator it = fUsedConnections.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedConnections.begin(); it.valid(); it.next()) { - const ConnectionToId& connectionToId(it.getConstValue()); + const ConnectionToId& connectionToId(it.getValue()); if (connectionToId.portOut == portIdA && connectionToId.portIn == portIdB) { @@ -1363,7 +1329,7 @@ protected: void handleJackClientRenameCallback(const char* const oldName, const char* const newName) { - for (List::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next()) { GroupNameToId& groupNameToId(it.getValue()); @@ -1381,31 +1347,23 @@ protected: jack_port_t* const jackPort(jackbridge_port_by_id(fClient, port)); const char* const portName(jackbridge_port_short_name(jackPort)); - CARLA_ASSERT(jackPort != nullptr); - CARLA_ASSERT(portName != nullptr); - - if (jackPort == nullptr) - return; - if (portName == nullptr) - return; + CARLA_SAFE_ASSERT_RETURN(jackPort != nullptr,); + CARLA_SAFE_ASSERT_RETURN(portName != nullptr,); CarlaString groupName(newName); groupName.truncate(groupName.rfind(portName)-1); const int groupId(getGroupId(groupName)); - CARLA_ASSERT(groupId != -1); - - if (groupId == -1) - return; + CARLA_SAFE_ASSERT_RETURN(groupId != -1,); - for (List::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next()) { PortNameToId& portNameId(it.getValue()); if (std::strcmp(portNameId.fullName, oldName) == 0) { - CARLA_ASSERT(portNameId.groupId == groupId); + CARLA_SAFE_ASSERT(portNameId.groupId == groupId); portNameId.rename(portName, newName); callback(ENGINE_CALLBACK_PATCHBAY_PORT_RENAMED, groupId, portNameId.portId, 0, 0.0f, newName); break; @@ -1567,18 +1525,18 @@ private: int fLastPortId; int fLastConnectionId; - List fUsedGroupNames; - List fUsedPortNames; - List fUsedConnections; - //List fGroupIconsChanged; + LinkedList fUsedGroupNames; + LinkedList fUsedPortNames; + LinkedList fUsedConnections; + //LinkedList fGroupIconsChanged; int getGroupId(const char* const name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr, -1); - for (List::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next()) { - const GroupNameToId& groupNameId(it.getConstValue()); + const GroupNameToId& groupNameId(it.getValue()); if (std::strcmp(groupNameId.name, name) == 0) return groupNameId.id; @@ -1593,9 +1551,9 @@ private: CARLA_SAFE_ASSERT_RETURN(groupId >= 0, fallback); - for (List::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next()) { - const GroupNameToId& groupNameId(it.getConstValue()); + const GroupNameToId& groupNameId(it.getValue()); if (groupNameId.id == groupId) return groupNameId.name; @@ -1608,9 +1566,9 @@ private: { CARLA_SAFE_ASSERT_RETURN(fullName != nullptr, -1); - for (List::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next()) { - const PortNameToId& portNameId(it.getConstValue()); + const PortNameToId& portNameId(it.getValue()); if (std::strcmp(portNameId.fullName, fullName) == 0) return portNameId.portId; @@ -1621,9 +1579,9 @@ private: void getFullPortName(const int portId, char nameBuf[STR_MAX+1]) { - for (List::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next()) { - const PortNameToId& portNameId(it.getConstValue()); + const PortNameToId& portNameId(it.getValue()); if (portNameId.portId == portId) { @@ -1675,14 +1633,14 @@ private: CarlaString groupName(fullPortName); groupName.truncate(groupName.rfind(portName, &found)-1); - CARLA_ASSERT(found); + CARLA_SAFE_ASSERT(found); QString qGroupName((const char*)groupName); if (parsedGroups.contains(qGroupName)) { groupId = getGroupId(groupName); - CARLA_ASSERT(groupId != -1); + CARLA_SAFE_ASSERT(groupId != -1); } else { diff --git a/source/backend/engine/CarlaEngineJuce.cpp b/source/backend/engine/CarlaEngineJuce.cpp index efa2a6fdf..0b0cb891e 100644 --- a/source/backend/engine/CarlaEngineJuce.cpp +++ b/source/backend/engine/CarlaEngineJuce.cpp @@ -22,7 +22,7 @@ #include "CarlaEngineInternal.hpp" #include "CarlaBackendUtils.hpp" -// #include "RtList.hpp" +// #include "RtLinkedList.hpp" #include "juce_audio_devices.h" @@ -321,9 +321,9 @@ public: // Connections rack->connectLock.lock(); - for (List::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.inCount); ConnectionToId connectionToId; @@ -337,9 +337,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.inCount); ConnectionToId connectionToId; @@ -353,9 +353,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.outCount); ConnectionToId connectionToId; @@ -369,9 +369,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.outCount); ConnectionToId connectionToId; @@ -388,9 +388,9 @@ public: pData->bufAudio.rack->connectLock.unlock(); #if 0 - for (List::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) { - const MidiPort& midiPort(it.getConstValue()); + const MidiPort& midiPort(it.getValue()); ConnectionToId connectionToId; connectionToId.id = rack->lastConnectionId; @@ -403,9 +403,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) { - const MidiPort& midiPort(it.getConstValue()); + const MidiPort& midiPort(it.getValue()); ConnectionToId connectionToId; connectionToId.id = rack->lastConnectionId; diff --git a/source/backend/engine/CarlaEngineRtAudio.cpp b/source/backend/engine/CarlaEngineRtAudio.cpp index 46b6b72df..c24dfbf6e 100644 --- a/source/backend/engine/CarlaEngineRtAudio.cpp +++ b/source/backend/engine/CarlaEngineRtAudio.cpp @@ -17,8 +17,8 @@ #include "CarlaEngineInternal.hpp" #include "CarlaBackendUtils.hpp" -#include "CarlaMIDI.h" -#include "RtList.hpp" + +#include "RtLinkedList.hpp" #include "rtaudio/RtAudio.h" #include "rtmidi/RtMidi.h" @@ -351,7 +351,7 @@ public: fDeviceName.clear(); - for (List::Itenerator it = fMidiIns.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fMidiIns.begin(); it.valid(); it.next()) { MidiPort& port(it.getValue()); RtMidiIn* const midiInPort((RtMidiIn*)port.rtmidi); @@ -360,7 +360,7 @@ public: delete midiInPort; } - for (List::Itenerator it = fMidiOuts.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fMidiOuts.begin(); it.valid(); it.next()) { MidiPort& port(it.getValue()); RtMidiOut* const midiOutPort((RtMidiOut*)port.rtmidi); @@ -499,9 +499,9 @@ public: // Connections rack->connectLock.lock(); - for (List::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.inCount); ConnectionToId connectionToId; @@ -515,9 +515,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.inCount); ConnectionToId connectionToId; @@ -531,9 +531,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.outCount); ConnectionToId connectionToId; @@ -547,9 +547,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next()) { - const uint& port(it.getConstValue()); + const uint& port(it.getValue()); CARLA_SAFE_ASSERT_CONTINUE(port < pData->bufAudio.outCount); ConnectionToId connectionToId; @@ -565,9 +565,9 @@ public: pData->bufAudio.rack->connectLock.unlock(); - for (List::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) { - const MidiPort& midiPort(it.getConstValue()); + const MidiPort& midiPort(it.getValue()); ConnectionToId connectionToId; connectionToId.id = rack->lastConnectionId; @@ -580,9 +580,9 @@ public: rack->lastConnectionId++; } - for (List::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) { - const MidiPort& midiPort(it.getConstValue()); + const MidiPort& midiPort(it.getValue()); ConnectionToId connectionToId; connectionToId.id = rack->lastConnectionId; @@ -839,7 +839,7 @@ protected: CARLA_SAFE_ASSERT_RETURN(static_cast(portId) < fUsedMidiIns.count(), false); carla_debug("CarlaEngineRtAudio::connectRackMidiInPort(%i)", portId); - for (List::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) { MidiPort& midiPort(it.getValue()); @@ -864,7 +864,7 @@ protected: CARLA_SAFE_ASSERT_RETURN(static_cast(portId) < fUsedMidiOuts.count(), false); carla_debug("CarlaEngineRtAudio::disconnectRackMidiOutPort(%i)", portId); - for (List::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) { MidiPort& midiPort(it.getValue()); @@ -903,16 +903,16 @@ private: RtMidiIn fDummyMidiIn; RtMidiOut fDummyMidiOut; - List fUsedMidiIns; - List fUsedMidiOuts; + LinkedList fUsedMidiIns; + LinkedList fUsedMidiOuts; struct MidiPort { RtMidi* rtmidi; int portId; }; - List fMidiIns; - List fMidiOuts; + LinkedList fMidiIns; + LinkedList fMidiOuts; struct RtMidiEvent { uint64_t time; // needs to compare to internal time @@ -922,9 +922,9 @@ private: struct RtMidiEvents { CarlaMutex mutex; - RtList::Pool dataPool; - RtList data; - RtList dataPending; + RtLinkedList::Pool dataPool; + RtLinkedList data; + RtLinkedList dataPending; RtMidiEvents() : dataPool(512, 512), @@ -1050,7 +1050,7 @@ const char* const* CarlaEngine::getRtAudioApiDeviceNames(const unsigned int inde if (devCount == 0) return nullptr; - List devNames; + LinkedList devNames; for (unsigned int i=0; i < devCount; ++i) { diff --git a/source/backend/plugin/CarlaPlugin.cpp b/source/backend/plugin/CarlaPlugin.cpp index 369fb70d2..5bd0fa7e9 100644 --- a/source/backend/plugin/CarlaPlugin.cpp +++ b/source/backend/plugin/CarlaPlugin.cpp @@ -582,9 +582,9 @@ const SaveState& CarlaPlugin::getSaveState() // --------------------------------------------------------------- // Custom Data - for (List::Itenerator it = pData->custom.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = pData->custom.begin(); it.valid(); it.next()) { - const CustomData& cData(it.getConstValue()); + const CustomData& cData(it.getValue()); StateCustomData* stateCustomData(new StateCustomData()); @@ -609,9 +609,9 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) // --------------------------------------------------------------- // Part 1 - PRE-set custom data (only that which reload programs) - for (List::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) { - const StateCustomData* const stateCustomData(it.getConstValue()); + const StateCustomData* const stateCustomData(it.getValue()); const char* const key(stateCustomData->key); bool wantData = false; @@ -667,7 +667,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) // --------------------------------------------------------------- // Part 4a - get plugin parameter symbols - List paramSymbols; + LinkedList paramSymbols; if (getType() == PLUGIN_LADSPA || getType() == PLUGIN_LV2) { @@ -689,7 +689,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) const float sampleRate(static_cast(pData->engine->getSampleRate())); - for (List::Itenerator it = saveState.parameters.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = saveState.parameters.begin(); it.valid(); it.next()) { StateParameter* const stateParameter(it.getValue()); @@ -700,7 +700,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) // Try to set by symbol, otherwise use index if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') { - for (List::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) { ParamSymbol* const paramSymbol(it.getValue()); @@ -721,7 +721,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) // Symbol only if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') { - for (List::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) { ParamSymbol* const paramSymbol(it.getValue()); @@ -762,7 +762,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) // --------------------------------------------------------------- // Part 4c - clear - for (List::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) { ParamSymbol* const paramSymbol(it.getValue()); delete paramSymbol; @@ -773,9 +773,9 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) // --------------------------------------------------------------- // Part 5 - set custom data - for (List::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) { - const StateCustomData* const stateCustomData(it.getConstValue()); + const StateCustomData* const stateCustomData(it.getValue()); const char* const key(stateCustomData->key); if (getType() == PLUGIN_DSSI && (std::strcmp(key, "reloadprograms") == 0 || std::strcmp(key, "load") == 0 || std::strncmp(key, "patches", 7) == 0)) @@ -1226,7 +1226,7 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c return; // Check if we already have this key - for (List::Itenerator it = pData->custom.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = pData->custom.begin(); it.valid(); it.next()) { CustomData& cData(it.getValue()); @@ -1682,9 +1682,9 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url) osc_send_sample_rate(pData->osc.data, static_cast(pData->engine->getSampleRate())); - for (List::Itenerator it = pData->custom.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = pData->custom.begin(); it.valid(); it.next()) { - const CustomData& cData(it.getConstValue()); + const CustomData& cData(it.getValue()); CARLA_ASSERT(cData.type != nullptr); CARLA_ASSERT(cData.key != nullptr); diff --git a/source/backend/plugin/CarlaPluginInternal.hpp b/source/backend/plugin/CarlaPluginInternal.hpp index 65e83e776..851e50cdf 100644 --- a/source/backend/plugin/CarlaPluginInternal.hpp +++ b/source/backend/plugin/CarlaPluginInternal.hpp @@ -26,7 +26,7 @@ #include "CarlaOscUtils.hpp" #include "CarlaStateUtils.hpp" #include "CarlaMutex.hpp" -#include "RtList.hpp" +#include "RtLinkedList.hpp" #ifdef HAVE_JUCE # include "juce_audio_basics.h" @@ -532,7 +532,7 @@ struct CarlaPluginProtectedData { PluginParameterData param; PluginProgramData prog; PluginMidiProgramData midiprog; - List custom; + LinkedList custom; SaveState saveState; @@ -541,8 +541,8 @@ struct CarlaPluginProtectedData { struct ExternalNotes { CarlaMutex mutex; - RtList::Pool dataPool; - RtList data; + RtLinkedList::Pool dataPool; + RtLinkedList data; ExternalNotes() : dataPool(32, 152), @@ -568,9 +568,9 @@ struct CarlaPluginProtectedData { struct PostRtEvents { CarlaMutex mutex; - RtList::Pool dataPool; - RtList data; - RtList dataPendingRT; + RtLinkedList::Pool dataPool; + RtLinkedList data; + RtLinkedList dataPendingRT; PostRtEvents() : dataPool(128, 128), @@ -719,7 +719,7 @@ struct CarlaPluginProtectedData { client = nullptr; } - for (List::Itenerator it = custom.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = custom.begin(); it.valid(); it.next()) { CustomData& cData(it.getValue()); diff --git a/source/backend/plugin/DssiPlugin.cpp b/source/backend/plugin/DssiPlugin.cpp index bce36a32b..5b81b3310 100644 --- a/source/backend/plugin/DssiPlugin.cpp +++ b/source/backend/plugin/DssiPlugin.cpp @@ -74,7 +74,7 @@ public: if (fDescriptor != nullptr) { - if (pData->name.isNotEmpty() && fDssiDescriptor != nullptr && fDssiDescriptor->run_synth == nullptr && fDssiDescriptor->run_multiple_synths != nullptr) + if (pData->name != nullptr && fDssiDescriptor != nullptr && fDssiDescriptor->run_synth == nullptr && fDssiDescriptor->run_multiple_synths != nullptr) removeUniqueMultiSynth(fDescriptor->Label); if (fDescriptor->cleanup != nullptr) @@ -156,8 +156,13 @@ public: unsigned int getOptionsAvailable() const override { - const bool isAmSynth = pData->filename.contains("amsynth", true); - const bool isDssiVst = pData->filename.contains("dssi-vst", true); +#ifdef __USE_GNU + const bool isAmSynth(strcasestr(pData->filename, "amsynth")); + const bool isDssiVst(strcasestr(pData->filename, "dssi-vst")); +#else + const bool isAmSynth(std::strstr(pData->filename, "amsynth")); + const bool isDssiVst(std::strstr(pData->filename, "dssi-vst")); +#endif unsigned int options = 0x0; @@ -318,18 +323,12 @@ public: CARLA_SAFE_ASSERT_RETURN(fHandle2 == nullptr,); CARLA_SAFE_ASSERT_RETURN(stringData != nullptr,); - // TODO -#if 0 QByteArray chunk(QByteArray::fromBase64(stringData)); - CARLA_ASSERT(chunk.size() > 0); + CARLA_SAFE_ASSERT_RETURN(chunk.size() > 0,); - if (chunk.size() > 0) - { - const ScopedSingleProcessLocker spl(this, true); - fDssiDescriptor->set_custom_data(fHandle, chunk.data(), chunk.size()); - } -#endif + const ScopedSingleProcessLocker spl(this, true); + fDssiDescriptor->set_custom_data(fHandle, chunk.data(), chunk.size()); } void setMidiProgram(int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback) override @@ -483,10 +482,7 @@ public: pData->param.createNew(params); fParamBuffers = new float[params]; -#ifdef HAVE_JUCE - FloatVectorOperations::clear(fParamBuffers, params); -#else -#endif + FLOAT_CLEAR(fParamBuffers, params); } const uint portNameSize(pData->engine->getMaxPortNameSize()); @@ -615,7 +611,7 @@ public: if (LADSPA_IS_PORT_INPUT(portType)) { - 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; @@ -643,8 +639,8 @@ public: stepSmall = 1.0f; stepLarge = 1.0f; - //pData->param.data[j].type = PARAMETER_LATENCY; - pData->param.data[j].hints = 0; + pData->param.data[j].type = PARAMETER_SPECIAL; + pData->param.data[j].hints = 0; // TODO PARAMETER_LATENCY } else if (std::strcmp(fDescriptor->PortNames[i], "_sample-rate") == 0) { @@ -653,11 +649,12 @@ public: stepSmall = 1.0f; stepLarge = 1.0f; - //pData->param.data[j].type = PARAMETER_SAMPLE_RATE; - pData->param.data[j].hints = 0; + pData->param.data[j].type = PARAMETER_SPECIAL; + pData->param.data[j].hints = 0; // TODO PARAMETER_SAMPLE_RATE } else { + pData->param.data[j].type = PARAMETER_OUTPUT; pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMABLE; needsCtrlOut = true; @@ -665,6 +662,7 @@ public: } else { + pData->param.data[j].type = PARAMETER_UNKNOWN; carla_stderr2("WARNING - Got a broken Port (Control, but not input or output)"); } @@ -954,13 +952,7 @@ public: { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) - { -#ifdef HAVE_JUCE - FloatVectorOperations::clear(outBuffer[i], frames); -#else -#endif - } - + FLOAT_CLEAR(outBuffer[i], frames); return; } @@ -1003,12 +995,7 @@ public: if (pData->latency > 0) { for (uint32_t i=0; i < pData->audioIn.count; ++i) - { -#ifdef HAVE_JUCE - FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); -#else -#endif - } + FLOAT_CLEAR(pData->latencyBuffers[i], pData->latency); } pData->needsReset = false; @@ -1161,7 +1148,7 @@ public: continue; if (pData->param.data[k].midiCC != ctrlEvent.param) continue; - 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_AUTOMABLE) == 0) continue; @@ -1197,7 +1184,7 @@ public: midiEvent.type = SND_SEQ_EVENT_CONTROLLER; midiEvent.data.control.channel = event.channel; midiEvent.data.control.param = ctrlEvent.param; - midiEvent.data.control.value = ctrlEvent.value*127.0f; + midiEvent.data.control.value = int8_t(ctrlEvent.value*127.0f); } break; @@ -1283,7 +1270,7 @@ public: // Fix bad note-off (per DSSI spec) if (MIDI_IS_STATUS_NOTE_ON(status) && engineEvent.data[2] == 0) - status -= 0x10; + status = MIDI_STATUS_NOTE_OFF; snd_seq_event_t& midiEvent(fMidiEvents[midiEventCount]); carla_zeroStruct(midiEvent); @@ -1409,14 +1396,16 @@ public: for (uint32_t 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; + pData->param.ranges[k].fixValue(fParamBuffers[k]); + if (pData->param.data[k].midiCC > 0) { channel = pData->param.data[k].midiChannel; param = static_cast(pData->param.data[k].midiCC); - value = pData->param.ranges[k].getFixedAndNormalizedValue(fParamBuffers[k]); + value = pData->param.ranges[k].getNormalizedValue(fParamBuffers[k]); pData->event.portOut->writeControlEvent(0, channel, kEngineControlEventTypeParameter, param, value); } } @@ -1459,20 +1448,10 @@ public: // Reset audio buffers for (uint32_t i=0; i < pData->audioIn.count; ++i) - { -#ifdef HAVE_JUCE - FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); -#else -#endif - } + FLOAT_COPY(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); for (uint32_t i=0; i < pData->audioOut.count; ++i) - { -#ifdef HAVE_JUCE - FloatVectorOperations::clear(fAudioOutBuffers[i], frames); -#else -#endif - } + FLOAT_CLEAR(fAudioOutBuffers[i], frames); // -------------------------------------------------------------------------------------------------------- // Run plugin @@ -1537,10 +1516,7 @@ public: if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); -#ifdef HAVE_JUCE - FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); -#else -#endif + FLOAT_COPY(oldBufLeft, fAudioOutBuffers[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; @@ -1655,7 +1631,7 @@ public: void sampleRateChanged(const double newSampleRate) override { - CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); + CARLA_ASSERT_INT(newSampleRate > 0.0, (int)newSampleRate); carla_debug("DssiPlugin::sampleRateChanged(%g) - start", newSampleRate); // TODO @@ -1865,10 +1841,7 @@ public: else pData->name = pData->engine->getUniquePluginName(fDescriptor->Label); - pData->filename = filename; - - CARLA_ASSERT(pData->name.isNotEmpty()); - CARLA_ASSERT(pData->filename.isNotEmpty()); + pData->filename = carla_strdup(filename); // --------------------------------------------------------------- // register client @@ -1909,18 +1882,23 @@ public: // --------------------------------------------------------------- // gui stuff - //if (const char* const guiFilename = find_dssi_ui(filename, fDescriptor->Label)) + if (const char* const guiFilename = find_dssi_ui(filename, fDescriptor->Label)) { - //pData->osc.thread.setOscData(guiFilename, fDescriptor->Label); - //fGuiFilename = guiFilename; + pData->osc.thread.setOscData(guiFilename, fDescriptor->Label); + fGuiFilename = guiFilename; } // --------------------------------------------------------------- // load plugin settings { - const bool isAmSynth = pData->filename.contains("amsynth", true); - const bool isDssiVst = pData->filename.contains("dssi-vst", true); +#ifdef __USE_GNU + const bool isAmSynth(strcasestr(pData->filename, "amsynth")); + const bool isDssiVst(strcasestr(pData->filename, "dssi-vst")); +#else + const bool isAmSynth(std::strstr(pData->filename, "amsynth")); + const bool isDssiVst(std::strstr(pData->filename, "dssi-vst")); +#endif // set default options pData->options = 0x0; @@ -1947,11 +1925,19 @@ public: carla_stderr2("WARNING: Plugin can ONLY use run_multiple_synths!"); } + // set identifier string + CarlaString identifier("DSSI/"); + + if (const char* const shortname = std::strrchr(filename, OS_SEP)) + { + identifier += shortname+1; + identifier += ","; + } + + identifier += label; + pData->identifier = identifier.dup(); + // load settings - pData->idStr = "DSSI/"; - pData->idStr += std::strrchr(filename, OS_SEP)+1; - pData->idStr += "/"; - pData->idStr += label; pData->options = pData->loadSettings(pData->options, getOptionsAvailable()); // ignore settings, we need this anyway @@ -1976,15 +1962,15 @@ private: float* fParamBuffers; snd_seq_event_t fMidiEvents[kPluginMaxMidiEvents]; - static List sMultiSynthList; + static LinkedList sMultiSynthList; static bool addUniqueMultiSynth(const char* const label) { CARLA_SAFE_ASSERT_RETURN(label != nullptr, true); - for (List::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) { - const char*& itLabel(*it); + const char*& itLabel(it.getValue()); if (std::strcmp(label, itLabel) == 0) return false; @@ -1998,9 +1984,9 @@ private: { CARLA_SAFE_ASSERT_RETURN(label != nullptr,); - for (List::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) { - const char*& itLabel(*it); + const char*& itLabel(it.getValue()); if (std::strcmp(label, itLabel) == 0) { @@ -2014,7 +2000,7 @@ private: CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DssiPlugin) }; -List DssiPlugin::sMultiSynthList; +LinkedList DssiPlugin::sMultiSynthList; CARLA_BACKEND_END_NAMESPACE diff --git a/source/backend/plugin/FluidSynthPlugin.cpp b/source/backend/plugin/FluidSynthPlugin.cpp index 704b5cd0b..3d4b56e70 100644 --- a/source/backend/plugin/FluidSynthPlugin.cpp +++ b/source/backend/plugin/FluidSynthPlugin.cpp @@ -1130,21 +1130,21 @@ public: { float value; - if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) > 0) + if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { value = ctrlEvent.value; setDryWet(value, false, false); pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value); } - if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) > 0) + if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { value = ctrlEvent.value*127.0f/100.0f; setVolume(value, false, false); pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value); } - if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) > 0) + if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.value/0.5f - 1.0f; @@ -1613,7 +1613,12 @@ public: // set identifier string CarlaString identifier("SF2/"); - identifier += label; + + if (const char* const shortname = std::strrchr(filename, OS_SEP)) + identifier += shortname+1; + else + identifier += label; + pData->identifier = identifier.dup(); // load settings diff --git a/source/backend/plugin/LadspaPlugin.cpp b/source/backend/plugin/LadspaPlugin.cpp index 96d3fd78a..5f66d39f1 100644 --- a/source/backend/plugin/LadspaPlugin.cpp +++ b/source/backend/plugin/LadspaPlugin.cpp @@ -915,7 +915,7 @@ public: case kEngineEventTypeControl: { - const EngineControlEvent& ctrlEvent = event.ctrl; + const EngineControlEvent& ctrlEvent(event.ctrl); switch (ctrlEvent.type) { @@ -930,21 +930,21 @@ public: { float value; - if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) > 0) + if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { value = ctrlEvent.value; setDryWet(value, false, false); pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value); } - if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) > 0) + if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { value = ctrlEvent.value*127.0f/100.0f; setVolume(value, false, false); pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value); } - if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) > 0) + if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.value/0.5f - 1.0f; diff --git a/source/backend/plugin/LinuxSamplerPlugin.cpp b/source/backend/plugin/LinuxSamplerPlugin.cpp index 28edfb3cd..1578074d6 100644 --- a/source/backend/plugin/LinuxSamplerPlugin.cpp +++ b/source/backend/plugin/LinuxSamplerPlugin.cpp @@ -71,7 +71,7 @@ public: uint SampleRate() override { - return fEngine->getSampleRate(); + return (uint)fEngine->getSampleRate(); } String Driver() override @@ -126,7 +126,7 @@ public: MidiInputPort* CreateMidiPort() override { - return new MidiInputPortPlugin(this, Ports.size()); + return new MidiInputPortPlugin(this, (int)Ports.size()); } // ------------------------------------------------------------------- @@ -163,7 +163,7 @@ CARLA_BACKEND_START_NAMESPACE class LinuxSamplerPlugin : public CarlaPlugin { public: - LinuxSamplerPlugin(CarlaEngine* const engine, const unsigned short id, const bool isGIG, const bool use16Outs) + LinuxSamplerPlugin(CarlaEngine* const engine, const unsigned int id, const bool isGIG, const bool use16Outs) : CarlaPlugin(engine, id), kIsGIG(isGIG), kUses16Outs(use16Outs), @@ -434,13 +434,10 @@ public: pData->midiprog.clear(); // Query new programs - uint32_t i, count = fInstrumentIds.size(); + uint32_t i, count = (uint32_t)fInstrumentIds.size(); // sound kits must always have at least 1 midi-program - CARLA_ASSERT(count > 0); - - if (count == 0) - return; + CARLA_SAFE_ASSERT_RETURN(count > 0,); pData->midiprog.createNew(count); @@ -536,8 +533,8 @@ public: } else if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { - for (k=0; k < MAX_MIDI_NOTE; ++k) - fMidiInputPort->DispatchNoteOff(k, 0, pData->ctrlChannel); + for (uint8_t i=0; i < MAX_MIDI_NOTE; ++i) + fMidiInputPort->DispatchNoteOff(i, 0, (uint)pData->ctrlChannel); } pData->needsReset = false; @@ -632,21 +629,21 @@ public: { float value; - if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) > 0) + if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { value = ctrlEvent.value; setDryWet(value, false, false); pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value); } - if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) > 0) + if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { value = ctrlEvent.value*127.0f/100.0f; setVolume(value, false, false); pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value); } - if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) > 0) + if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.value/0.5f - 1.0f; @@ -682,12 +679,12 @@ public: continue; if (pData->param.data[k].midiCC != ctrlEvent.param) continue; - if ((pData->param.data[k].hints & PARAMETER_IS_INPUT) == 0) + if (pData->param.data[k].hints != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMABLE) == 0) continue; - double value; + float value; if (pData->param.data[k].hints & PARAMETER_IS_BOOLEAN) { @@ -707,7 +704,7 @@ public: if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param <= 0x5F) { - fMidiInputPort->DispatchControlChange(ctrlEvent.param, ctrlEvent.value*127.0f, event.channel, sampleAccurate ? startTime : time); + fMidiInputPort->DispatchControlChange(uint8_t(ctrlEvent.param), uint8_t(ctrlEvent.value*127.0f), event.channel, int32_t(sampleAccurate ? startTime : time)); } break; @@ -768,7 +765,7 @@ public: // Fix bad note-off (per DSSI spec) if (MIDI_IS_STATUS_NOTE_ON(status) && midiEvent.data[2] == 0) - status -= 0x10; + status = MIDI_STATUS_NOTE_OFF; int32_t fragmentPos = sampleAccurate ? startTime : time; @@ -1100,10 +1097,17 @@ public: pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; + // set identifier string + CarlaString identifier(kIsGIG ? "GIG/" : "SFZ/"); + + if (const char* const shortname = std::strrchr(filename, OS_SEP)) + identifier += shortname+1; + else + identifier += label; + + pData->identifier = identifier.dup(); + // load settings - pData->idStr = kIsGIG ? "GIG" : "SFZ"; - pData->idStr += "/"; - pData->idStr += label; pData->options = pData->loadSettings(pData->options, getOptionsAvailable()); } diff --git a/source/backend/plugin/Lv2Plugin.cpp b/source/backend/plugin/Lv2Plugin.cpp index 9e6ea8d0c..511722f78 100644 --- a/source/backend/plugin/Lv2Plugin.cpp +++ b/source/backend/plugin/Lv2Plugin.cpp @@ -141,6 +141,7 @@ enum Lv2PluginGuiType { PLUGIN_UI_EXTERNAL }; +#if 0 struct Lv2EventData { uint32_t type; uint32_t rindex; @@ -5408,6 +5409,7 @@ private: }; // ------------------------------------------------------------------------------------------------------------------- +#endif #define lv2PluginPtr ((Lv2Plugin*)plugin) @@ -5417,7 +5419,7 @@ int CarlaEngineOsc::handleMsgLv2AtomTransfer(CARLA_ENGINE_OSC_HANDLE_ARGS2) carla_debug("CarlaOsc::handleMsgLv2AtomTransfer()"); const int32_t portIndex = argv[0]->i; - const char* const atomBuf = (const char*)&argv[1]->s; + //const char* const atomBuf = (const char*)&argv[1]->s; if (portIndex < 0) return 0; @@ -5428,6 +5430,9 @@ int CarlaEngineOsc::handleMsgLv2AtomTransfer(CARLA_ENGINE_OSC_HANDLE_ARGS2) // LV2_Atom* const atom = (LV2_Atom*)chunk.data(); // lv2PluginPtr->handleTransferAtom(portIndex, atom); return 0; + + // unused for now + (void)plugin; } int CarlaEngineOsc::handleMsgLv2UridMap(CARLA_ENGINE_OSC_HANDLE_ARGS2) @@ -5436,13 +5441,16 @@ int CarlaEngineOsc::handleMsgLv2UridMap(CARLA_ENGINE_OSC_HANDLE_ARGS2) carla_debug("CarlaOsc::handleMsgLv2EventTransfer()"); const int32_t urid = argv[0]->i; - const char* const uri = (const char*)&argv[1]->s; + //const char* const uri = (const char*)&argv[1]->s; if (urid <= 0) return 0; - lv2PluginPtr->handleUridMap(urid, uri); + //lv2PluginPtr->handleUridMap(urid, uri); return 0; + + // unused for now + (void)plugin; } #undef lv2PluginPtr @@ -5457,7 +5465,7 @@ CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init) { carla_debug("CarlaPlugin::newLV2({%p, \"%s\", \"%s\"})", init.engine, init.name, init.label); -#ifdef WANT_LV2 +#if 0 //def WANT_LV2 Lv2Plugin* const plugin(new Lv2Plugin(init.engine, init.id)); if (! plugin->init(init.name, init.label)) diff --git a/source/backend/plugin/NativePlugin.cpp b/source/backend/plugin/NativePlugin.cpp index c6fd44b1d..0ca6a93a6 100644 --- a/source/backend/plugin/NativePlugin.cpp +++ b/source/backend/plugin/NativePlugin.cpp @@ -643,9 +643,9 @@ public: if (fDescriptor->ui_set_custom_data != nullptr) { - for (List::Itenerator it = pData->custom.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = pData->custom.begin(); it.valid(); it.next()) { - const CustomData& cData(it.getConstValue()); + const CustomData& cData(it.getValue()); if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_STRING) == 0 && std::strcmp(cData.key, "midiPrograms") != 0) fDescriptor->ui_set_custom_data(fHandle, cData.key, cData.value); @@ -2196,9 +2196,9 @@ public: // --------------------------------------------------------------- // get descriptor that matches label - for (List::Itenerator it = sPluginDescriptors.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = sPluginDescriptors.begin(); it.valid(); it.next()) { - fDescriptor = it.getConstValue(); + fDescriptor = it.getValue(); CARLA_SAFE_ASSERT_BREAK(fDescriptor != nullptr); @@ -2357,7 +2357,7 @@ private: NativeTimeInfo fTimeInfo; - static List sPluginDescriptors; + static LinkedList sPluginDescriptors; // ------------------------------------------------------------------- @@ -2423,7 +2423,7 @@ private: CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NativePlugin) }; -List NativePlugin::sPluginDescriptors; +LinkedList NativePlugin::sPluginDescriptors; static const NativePlugin::ScopedInitializer _si; diff --git a/source/modules/carla_native/midi-base.hpp b/source/modules/carla_native/midi-base.hpp index 973ba63b3..710be589d 100644 --- a/source/modules/carla_native/midi-base.hpp +++ b/source/modules/carla_native/midi-base.hpp @@ -20,7 +20,7 @@ #include "CarlaMIDI.h" #include "CarlaMutex.hpp" -#include "List.hpp" +#include "LinkedList.hpp" #define MAX_EVENT_DATA_SIZE 4 #define MIN_PREALLOCATED_EVENT_COUNT 100 @@ -59,7 +59,7 @@ public: ~MidiPattern() { - fData.clear_const(); + fData.clear(); } void addControl(const uint64_t time, const uint8_t channel, const uint8_t control, const uint8_t value) @@ -174,9 +174,9 @@ public: if (! fMutex.tryLock()) return; - for (List::Itenerator it = fData.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fData.begin(); it.valid(); it.next()) { - const RawMidiEvent* const rawMidiEvent(it.getConstValue()); + const RawMidiEvent* const rawMidiEvent(it.getValue()); if (timePosFrame > rawMidiEvent->time) continue; @@ -192,7 +192,7 @@ public: void clear() { const CarlaMutex::ScopedLocker sl(fMutex); - fData.clear_const(); + fData.clear(); } private: @@ -202,7 +202,7 @@ private: uint32_t fDuration; // unused CarlaMutex fMutex; - List fData; + LinkedList fData; void append(const RawMidiEvent* const event) { @@ -213,9 +213,9 @@ private: return; } - for (List::Itenerator it = fData.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fData.begin(); it.valid(); it.next()) { - const RawMidiEvent* const oldEvent(it.getConstValue()); + const RawMidiEvent* const oldEvent(it.getValue()); if (event->time >= oldEvent->time) continue; diff --git a/source/modules/carla_native/zynaddsubfx-synth.cpp b/source/modules/carla_native/zynaddsubfx-synth.cpp index 03cddbb69..a8e2b8406 100644 --- a/source/modules/carla_native/zynaddsubfx-synth.cpp +++ b/source/modules/carla_native/zynaddsubfx-synth.cpp @@ -22,7 +22,7 @@ #include "CarlaNative.hpp" #include "CarlaMIDI.h" #include "CarlaThread.hpp" -#include "List.hpp" +#include "LinkedList.hpp" #include "zynaddsubfx/DSP/FFTwrapper.h" #include "zynaddsubfx/Misc/Master.h" @@ -92,7 +92,7 @@ public: for (auto it = fPrograms.begin(); it.valid(); it.next()) { - const ProgramInfo* const& pInfo(it.getConstValue()); + const ProgramInfo* const& pInfo(it.getValue()); delete pInfo; } @@ -219,7 +219,7 @@ private: bool fInitiated; NativeMidiProgram fRetProgram; - List fPrograms; + LinkedList fPrograms; CARLA_DECLARE_NON_COPY_CLASS(ZynAddSubFxPrograms) }; diff --git a/source/plugin/Makefile b/source/plugin/Makefile index e8b9c8a39..f659d47b8 100644 --- a/source/plugin/Makefile +++ b/source/plugin/Makefile @@ -46,12 +46,9 @@ ifeq ($(HAVE_FLUIDSYNTH),true) LINK_FLAGS += $(FLUIDSYNTH_LIBS) endif -# ifeq ($(HAVE_LINUXSAMPLER),true) -# LINK_FLAGS += $(shell pkg-config --libs linuxsampler) -# ifeq ($(WIN32),true) -# LINK_FLAGS += lrpcrt4 -# endif -# endif +ifeq ($(HAVE_LINUXSAMPLER),true) +LINK_FLAGS += $(LINUXSAMPLER_LIBS) +endif # -------------------------------------------------------------- # Coomon diff --git a/source/plugin/carla-native-base.cpp b/source/plugin/carla-native-base.cpp index 013e9a7ce..5a5ca791b 100644 --- a/source/plugin/carla-native-base.cpp +++ b/source/plugin/carla-native-base.cpp @@ -21,12 +21,7 @@ #include "CarlaNative.h" #include "CarlaBackendUtils.hpp" -#include "List.hpp" - -// TODO: remove -#ifndef CARLA_NATIVE_PLUGIN_LV2 -# define CARLA_NATIVE_PLUGIN_LV2 -#endif +#include "LinkedList.hpp" #ifdef CARLA_NATIVE_PLUGIN_LV2 # include "lv2/lv2.h" @@ -71,7 +66,7 @@ struct PluginListManager { ~PluginListManager() { #ifdef CARLA_NATIVE_PLUGIN_LV2 - for (List::Itenerator it = lv2Descs.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = lv2Descs.begin(); it.valid(); it.next()) { const LV2_Descriptor*& lv2Desc(it.getValue()); delete[] lv2Desc->URI; @@ -90,9 +85,9 @@ struct PluginListManager { } #ifdef CARLA_NATIVE_PLUGIN_LV2 - List lv2Descs; + LinkedList lv2Descs; #endif - List descs; + LinkedList descs; }; // ----------------------------------------------------------------------- diff --git a/source/plugin/carla-native-lv2-export.cpp b/source/plugin/carla-native-lv2-export.cpp index 02e24d2dc..d10294cec 100644 --- a/source/plugin/carla-native-lv2-export.cpp +++ b/source/plugin/carla-native-lv2-export.cpp @@ -114,9 +114,9 @@ void writeManifestFile(PluginListManager& plm) // ------------------------------------------------------------------- // Plugins - for (List::Itenerator it = plm.descs.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = plm.descs.begin(); it.valid(); it.next()) { - const NativePluginDescriptor* const& pluginDesc(it.getConstValue()); + const NativePluginDescriptor* const& pluginDesc(it.getValue()); const String label(pluginDesc->label); if (label == "carla") @@ -566,9 +566,9 @@ int main() writeManifestFile(plm); - for (List::Itenerator it = plm.descs.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = plm.descs.begin(); it.valid(); it.next()) { - const NativePluginDescriptor* const& pluginDesc(it.getConstValue()); + const NativePluginDescriptor* const& pluginDesc(it.getValue()); writePluginFile(pluginDesc); } diff --git a/source/plugin/carla-native-lv2.cpp b/source/plugin/carla-native-lv2.cpp index 56f233cee..a3b690000 100644 --- a/source/plugin/carla-native-lv2.cpp +++ b/source/plugin/carla-native-lv2.cpp @@ -1194,9 +1194,9 @@ static LV2_Handle lv2_instantiate(const LV2_Descriptor* lv2Descriptor, double sa PluginListManager& plm(PluginListManager::getInstance()); - for (List::Itenerator it = plm.descs.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = plm.descs.begin(); it.valid(); it.next()) { - const NativePluginDescriptor* const& tmpDesc(it.getConstValue()); + const NativePluginDescriptor* const& tmpDesc(it.getValue()); if (std::strcmp(tmpDesc->label, pluginLabel) == 0) { diff --git a/source/utils/CarlaLibCounter.hpp b/source/utils/CarlaLibCounter.hpp index dae2d6459..09eb94395 100644 --- a/source/utils/CarlaLibCounter.hpp +++ b/source/utils/CarlaLibCounter.hpp @@ -20,7 +20,7 @@ #include "CarlaLibUtils.hpp" #include "CarlaMutex.hpp" -#include "List.hpp" +#include "LinkedList.hpp" // ----------------------------------------------------------------------- @@ -35,7 +35,7 @@ public: const CarlaMutex::ScopedLocker sl(fMutex); - for (List::Itenerator it = fLibs.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fLibs.begin(); it.valid(); it.next()) { Lib& lib(it.getValue()); CARLA_ASSERT(lib.count > 0); @@ -69,7 +69,7 @@ public: const CarlaMutex::ScopedLocker sl(fMutex); - for (List::Itenerator it = fLibs.begin(); it.valid(); it.next()) + for (LinkedList::Itenerator it = fLibs.begin(); it.valid(); it.next()) { Lib& lib(it.getValue()); CARLA_ASSERT(lib.count > 0); @@ -106,8 +106,8 @@ private: int count; }; - List fLibs; CarlaMutex fMutex; + LinkedList fLibs; }; // ----------------------------------------------------------------------- diff --git a/source/utils/CarlaStateUtils.hpp b/source/utils/CarlaStateUtils.hpp index 74742b39d..205ed63a4 100644 --- a/source/utils/CarlaStateUtils.hpp +++ b/source/utils/CarlaStateUtils.hpp @@ -20,7 +20,7 @@ #include "CarlaBackendUtils.hpp" #include "CarlaMIDI.h" -#include "List.hpp" +#include "LinkedList.hpp" #include @@ -93,11 +93,11 @@ struct StateCustomData { CARLA_DECLARE_NON_COPY_STRUCT(StateCustomData) }; -typedef List StateParameterList; -typedef List StateCustomDataList; +typedef LinkedList StateParameterList; +typedef LinkedList StateCustomDataList; -typedef List::Itenerator StateParameterItenerator; -typedef List::Itenerator StateCustomDataItenerator; +typedef LinkedList::Itenerator StateParameterItenerator; +typedef LinkedList::Itenerator StateCustomDataItenerator; struct SaveState { const char* type;