Browse Source

Update code for List->LinkedList; Enable DSSI and LS again

tags/1.9.4
falkTX 11 years ago
parent
commit
b8e9a62126
23 changed files with 279 additions and 327 deletions
  1. +1
    -1
      source/Makefile.mk
  2. +5
    -5
      source/backend/Makefile.mk
  3. +15
    -16
      source/backend/engine/CarlaEngine.cpp
  4. +4
    -4
      source/backend/engine/CarlaEngineInternal.hpp
  5. +44
    -86
      source/backend/engine/CarlaEngineJack.cpp
  6. +13
    -13
      source/backend/engine/CarlaEngineJuce.cpp
  7. +26
    -26
      source/backend/engine/CarlaEngineRtAudio.cpp
  8. +14
    -14
      source/backend/plugin/CarlaPlugin.cpp
  9. +8
    -8
      source/backend/plugin/CarlaPluginInternal.hpp
  10. +61
    -75
      source/backend/plugin/DssiPlugin.cpp
  11. +9
    -4
      source/backend/plugin/FluidSynthPlugin.cpp
  12. +4
    -4
      source/backend/plugin/LadspaPlugin.cpp
  13. +24
    -20
      source/backend/plugin/LinuxSamplerPlugin.cpp
  14. +12
    -4
      source/backend/plugin/Lv2Plugin.cpp
  15. +6
    -6
      source/backend/plugin/NativePlugin.cpp
  16. +8
    -8
      source/modules/carla_native/midi-base.hpp
  17. +3
    -3
      source/modules/carla_native/zynaddsubfx-synth.cpp
  18. +3
    -6
      source/plugin/Makefile
  19. +4
    -9
      source/plugin/carla-native-base.cpp
  20. +4
    -4
      source/plugin/carla-native-lv2-export.cpp
  21. +2
    -2
      source/plugin/carla-native-lv2.cpp
  22. +4
    -4
      source/utils/CarlaLibCounter.hpp
  23. +5
    -5
      source/utils/CarlaStateUtils.hpp

+ 1
- 1
source/Makefile.mk View File

@@ -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


+ 5
- 5
source/backend/Makefile.mk View File

@@ -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

# --------------------------------------------------------------



+ 15
- 16
source/backend/engine/CarlaEngine.cpp View File

@@ -368,9 +368,9 @@ void CarlaEngineProtectedData::processRackFull(float** const inBuf, const uint32
{
bool first = true;

for (List<uint>::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<float>(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<ConnectionToId>::Itenerator it=rack->usedConnections.begin(); it.valid(); it.next())
for (LinkedList<ConnectionToId>::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);


+ 4
- 4
source/backend/engine/CarlaEngineInternal.hpp View File

@@ -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<uint> connectedIns[2];
List<uint> connectedOuts[2];
LinkedList<uint> connectedIns[2];
LinkedList<uint> connectedOuts[2];
CarlaMutex connectLock;

int lastConnectionId;
List<ConnectionToId> usedConnections;
LinkedList<ConnectionToId> usedConnections;

EngineRackBuffers(const uint32_t bufferSize)
: lastConnectionId(0)


+ 44
- 86
source/backend/engine/CarlaEngineJack.cpp View File

@@ -17,9 +17,7 @@

#include "CarlaEngineInternal.hpp"
#include "CarlaBackendUtils.hpp"
#include "CarlaMIDI.h"

#include "List.hpp"
#include "jackbridge/JackBridge.hpp"

#include <cmath>
@@ -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<ConnectionToId>::Itenerator it = fUsedConnections.begin(); it.valid(); it.next())
for (LinkedList<ConnectionToId>::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<ConnectionToId>::Itenerator it = fUsedConnections.begin(); it.valid(); it.next())
for (LinkedList<ConnectionToId>::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<GroupNameToId>::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next())
for (LinkedList<GroupNameToId>::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<PortNameToId>::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next())
for (LinkedList<PortNameToId>::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<GroupNameToId> fUsedGroupNames;
List<PortNameToId> fUsedPortNames;
List<ConnectionToId> fUsedConnections;
//List<int> fGroupIconsChanged;
LinkedList<GroupNameToId> fUsedGroupNames;
LinkedList<PortNameToId> fUsedPortNames;
LinkedList<ConnectionToId> fUsedConnections;
//LinkedList<int> fGroupIconsChanged;

int getGroupId(const char* const name)
{
CARLA_SAFE_ASSERT_RETURN(name != nullptr, -1);

for (List<GroupNameToId>::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next())
for (LinkedList<GroupNameToId>::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<GroupNameToId>::Itenerator it = fUsedGroupNames.begin(); it.valid(); it.next())
for (LinkedList<GroupNameToId>::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<PortNameToId>::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next())
for (LinkedList<PortNameToId>::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<PortNameToId>::Itenerator it = fUsedPortNames.begin(); it.valid(); it.next())
for (LinkedList<PortNameToId>::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
{


+ 13
- 13
source/backend/engine/CarlaEngineJuce.cpp View File

@@ -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<uint>::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::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<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
{
const MidiPort& midiPort(it.getConstValue());
const MidiPort& midiPort(it.getValue());

ConnectionToId connectionToId;
connectionToId.id = rack->lastConnectionId;


+ 26
- 26
source/backend/engine/CarlaEngineRtAudio.cpp View File

@@ -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<MidiPort>::Itenerator it = fMidiIns.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::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<MidiPort>::Itenerator it = fMidiOuts.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::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<uint>::Itenerator it = rack->connectedIns[0].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedIns[1].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedOuts[0].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<uint>::Itenerator it = rack->connectedOuts[1].begin(); it.valid(); it.next())
for (LinkedList<uint>::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<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::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<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::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<size_t>(portId) < fUsedMidiIns.count(), false);
carla_debug("CarlaEngineRtAudio::connectRackMidiInPort(%i)", portId);

for (List<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next())
{
MidiPort& midiPort(it.getValue());

@@ -864,7 +864,7 @@ protected:
CARLA_SAFE_ASSERT_RETURN(static_cast<size_t>(portId) < fUsedMidiOuts.count(), false);
carla_debug("CarlaEngineRtAudio::disconnectRackMidiOutPort(%i)", portId);

for (List<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next())
for (LinkedList<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next())
{
MidiPort& midiPort(it.getValue());

@@ -903,16 +903,16 @@ private:
RtMidiIn fDummyMidiIn;
RtMidiOut fDummyMidiOut;

List<PortNameToId> fUsedMidiIns;
List<PortNameToId> fUsedMidiOuts;
LinkedList<PortNameToId> fUsedMidiIns;
LinkedList<PortNameToId> fUsedMidiOuts;

struct MidiPort {
RtMidi* rtmidi;
int portId;
};

List<MidiPort> fMidiIns;
List<MidiPort> fMidiOuts;
LinkedList<MidiPort> fMidiIns;
LinkedList<MidiPort> fMidiOuts;

struct RtMidiEvent {
uint64_t time; // needs to compare to internal time
@@ -922,9 +922,9 @@ private:

struct RtMidiEvents {
CarlaMutex mutex;
RtList<RtMidiEvent>::Pool dataPool;
RtList<RtMidiEvent> data;
RtList<RtMidiEvent> dataPending;
RtLinkedList<RtMidiEvent>::Pool dataPool;
RtLinkedList<RtMidiEvent> data;
RtLinkedList<RtMidiEvent> dataPending;

RtMidiEvents()
: dataPool(512, 512),
@@ -1050,7 +1050,7 @@ const char* const* CarlaEngine::getRtAudioApiDeviceNames(const unsigned int inde
if (devCount == 0)
return nullptr;

List<const char*> devNames;
LinkedList<const char*> devNames;

for (unsigned int i=0; i < devCount; ++i)
{


+ 14
- 14
source/backend/plugin/CarlaPlugin.cpp View File

@@ -582,9 +582,9 @@ const SaveState& CarlaPlugin::getSaveState()
// ---------------------------------------------------------------
// Custom Data

for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next())
for (LinkedList<CustomData>::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<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next())
for (LinkedList<StateCustomData*>::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<ParamSymbol*> paramSymbols;
LinkedList<ParamSymbol*> paramSymbols;

if (getType() == PLUGIN_LADSPA || getType() == PLUGIN_LV2)
{
@@ -689,7 +689,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState)

const float sampleRate(static_cast<float>(pData->engine->getSampleRate()));

for (List<StateParameter*>::Itenerator it = saveState.parameters.begin(); it.valid(); it.next())
for (LinkedList<StateParameter*>::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<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next())
for (LinkedList<ParamSymbol*>::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<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next())
for (LinkedList<ParamSymbol*>::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<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next())
for (LinkedList<ParamSymbol*>::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<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next())
for (LinkedList<StateCustomData*>::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<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next())
for (LinkedList<CustomData>::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<float>(pData->engine->getSampleRate()));

for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next())
for (LinkedList<CustomData>::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);


+ 8
- 8
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -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<CustomData> custom;
LinkedList<CustomData> custom;

SaveState saveState;

@@ -541,8 +541,8 @@ struct CarlaPluginProtectedData {

struct ExternalNotes {
CarlaMutex mutex;
RtList<ExternalMidiNote>::Pool dataPool;
RtList<ExternalMidiNote> data;
RtLinkedList<ExternalMidiNote>::Pool dataPool;
RtLinkedList<ExternalMidiNote> data;

ExternalNotes()
: dataPool(32, 152),
@@ -568,9 +568,9 @@ struct CarlaPluginProtectedData {

struct PostRtEvents {
CarlaMutex mutex;
RtList<PluginPostRtEvent>::Pool dataPool;
RtList<PluginPostRtEvent> data;
RtList<PluginPostRtEvent> dataPendingRT;
RtLinkedList<PluginPostRtEvent>::Pool dataPool;
RtLinkedList<PluginPostRtEvent> data;
RtLinkedList<PluginPostRtEvent> dataPendingRT;

PostRtEvents()
: dataPool(128, 128),
@@ -719,7 +719,7 @@ struct CarlaPluginProtectedData {
client = nullptr;
}

for (List<CustomData>::Itenerator it = custom.begin(); it.valid(); it.next())
for (LinkedList<CustomData>::Itenerator it = custom.begin(); it.valid(); it.next())
{
CustomData& cData(it.getValue());



+ 61
- 75
source/backend/plugin/DssiPlugin.cpp View File

@@ -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<snd_seq_event_t>(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<uint16_t>(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<const char*> sMultiSynthList;
static LinkedList<const char*> sMultiSynthList;

static bool addUniqueMultiSynth(const char* const label)
{
CARLA_SAFE_ASSERT_RETURN(label != nullptr, true);

for (List<const char*>::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next())
for (LinkedList<const char*>::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<const char*>::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next())
for (LinkedList<const char*>::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<const char*> DssiPlugin::sMultiSynthList;
LinkedList<const char*> DssiPlugin::sMultiSynthList;

CARLA_BACKEND_END_NAMESPACE



+ 9
- 4
source/backend/plugin/FluidSynthPlugin.cpp View File

@@ -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


+ 4
- 4
source/backend/plugin/LadspaPlugin.cpp View File

@@ -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;


+ 24
- 20
source/backend/plugin/LinuxSamplerPlugin.cpp View File

@@ -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());
}



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

@@ -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))


+ 6
- 6
source/backend/plugin/NativePlugin.cpp View File

@@ -643,9 +643,9 @@ public:

if (fDescriptor->ui_set_custom_data != nullptr)
{
for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next())
for (LinkedList<CustomData>::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<const NativePluginDescriptor*>::Itenerator it = sPluginDescriptors.begin(); it.valid(); it.next())
for (LinkedList<const NativePluginDescriptor*>::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<const NativePluginDescriptor*> sPluginDescriptors;
static LinkedList<const NativePluginDescriptor*> sPluginDescriptors;

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

@@ -2423,7 +2423,7 @@ private:
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NativePlugin)
};

List<const NativePluginDescriptor*> NativePlugin::sPluginDescriptors;
LinkedList<const NativePluginDescriptor*> NativePlugin::sPluginDescriptors;

static const NativePlugin::ScopedInitializer _si;



+ 8
- 8
source/modules/carla_native/midi-base.hpp View File

@@ -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<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next())
for (LinkedList<const RawMidiEvent*>::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<const RawMidiEvent*> fData;
LinkedList<const RawMidiEvent*> fData;

void append(const RawMidiEvent* const event)
{
@@ -213,9 +213,9 @@ private:
return;
}

for (List<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next())
for (LinkedList<const RawMidiEvent*>::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;


+ 3
- 3
source/modules/carla_native/zynaddsubfx-synth.cpp View File

@@ -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<const ProgramInfo*> fPrograms;
LinkedList<const ProgramInfo*> fPrograms;

CARLA_DECLARE_NON_COPY_CLASS(ZynAddSubFxPrograms)
};


+ 3
- 6
source/plugin/Makefile View File

@@ -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


+ 4
- 9
source/plugin/carla-native-base.cpp View File

@@ -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<const LV2_Descriptor*>::Itenerator it = lv2Descs.begin(); it.valid(); it.next())
for (LinkedList<const LV2_Descriptor*>::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<const LV2_Descriptor*> lv2Descs;
LinkedList<const LV2_Descriptor*> lv2Descs;
#endif
List<const NativePluginDescriptor*> descs;
LinkedList<const NativePluginDescriptor*> descs;
};

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

+ 4
- 4
source/plugin/carla-native-lv2-export.cpp View File

@@ -114,9 +114,9 @@ void writeManifestFile(PluginListManager& plm)
// -------------------------------------------------------------------
// Plugins

for (List<const NativePluginDescriptor*>::Itenerator it = plm.descs.begin(); it.valid(); it.next())
for (LinkedList<const NativePluginDescriptor*>::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<const NativePluginDescriptor*>::Itenerator it = plm.descs.begin(); it.valid(); it.next())
for (LinkedList<const NativePluginDescriptor*>::Itenerator it = plm.descs.begin(); it.valid(); it.next())
{
const NativePluginDescriptor* const& pluginDesc(it.getConstValue());
const NativePluginDescriptor* const& pluginDesc(it.getValue());
writePluginFile(pluginDesc);
}



+ 2
- 2
source/plugin/carla-native-lv2.cpp View File

@@ -1194,9 +1194,9 @@ static LV2_Handle lv2_instantiate(const LV2_Descriptor* lv2Descriptor, double sa

PluginListManager& plm(PluginListManager::getInstance());

for (List<const NativePluginDescriptor*>::Itenerator it = plm.descs.begin(); it.valid(); it.next())
for (LinkedList<const NativePluginDescriptor*>::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)
{


+ 4
- 4
source/utils/CarlaLibCounter.hpp View File

@@ -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<Lib>::Itenerator it = fLibs.begin(); it.valid(); it.next())
for (LinkedList<Lib>::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<Lib>::Itenerator it = fLibs.begin(); it.valid(); it.next())
for (LinkedList<Lib>::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<Lib> fLibs;
CarlaMutex fMutex;
LinkedList<Lib> fLibs;
};

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


+ 5
- 5
source/utils/CarlaStateUtils.hpp View File

@@ -20,7 +20,7 @@

#include "CarlaBackendUtils.hpp"
#include "CarlaMIDI.h"
#include "List.hpp"
#include "LinkedList.hpp"

#include <QtXml/QDomNode>

@@ -93,11 +93,11 @@ struct StateCustomData {
CARLA_DECLARE_NON_COPY_STRUCT(StateCustomData)
};

typedef List<StateParameter*> StateParameterList;
typedef List<StateCustomData*> StateCustomDataList;
typedef LinkedList<StateParameter*> StateParameterList;
typedef LinkedList<StateCustomData*> StateCustomDataList;

typedef List<StateParameter*>::Itenerator StateParameterItenerator;
typedef List<StateCustomData*>::Itenerator StateCustomDataItenerator;
typedef LinkedList<StateParameter*>::Itenerator StateParameterItenerator;
typedef LinkedList<StateCustomData*>::Itenerator StateCustomDataItenerator;

struct SaveState {
const char* type;


Loading…
Cancel
Save