Browse Source

Update discovery code, fix build; misc API changes

tags/1.9.4
falkTX 11 years ago
parent
commit
5416f36a30
13 changed files with 131 additions and 188 deletions
  1. +1
    -0
      source/Makefile.mk
  2. +16
    -21
      source/backend/CarlaEngine.hpp
  3. +23
    -77
      source/backend/engine/CarlaEngine.cpp
  4. +3
    -9
      source/backend/engine/CarlaEngineInternal.hpp
  5. +2
    -2
      source/backend/engine/CarlaEngineThread.cpp
  6. +3
    -1
      source/backend/engine/CarlaEngineThread.hpp
  7. +2
    -17
      source/backend/standalone/CarlaStandalone.cpp
  8. +1
    -13
      source/backend/standalone/Makefile
  9. +0
    -27
      source/carla_database.py
  10. +6
    -1
      source/discovery/Makefile
  11. +31
    -16
      source/discovery/carla-discovery.cpp
  12. +1
    -0
      source/modules/CarlaNative.h
  13. +42
    -4
      source/utils/CarlaDssiUtils.hpp

+ 1
- 0
source/Makefile.mk View File

@@ -43,6 +43,7 @@ endif

ifeq ($(DEBUG),true)
BASE_FLAGS += -DDEBUG -O0 -g
LINK_OPTS =
else
BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden
CXXFLAGS += -fvisibility-inlines-hidden


+ 16
- 21
source/backend/CarlaEngine.hpp View File

@@ -97,10 +97,16 @@ enum EnginePortType {
kEnginePortTypeCV = 2,

/*!
* Event port type.
* Event port type (Control or MIDI).
** \see CarlaEngineEventPort
*/
kEnginePortTypeEvent = 3
kEnginePortTypeEvent = 3,

/*!
* OSC port type.
** \see CarlaEngineOscPort
*/
kEnginePortTypeOSC = 3
};

/*!
@@ -233,19 +239,14 @@ struct EngineOptions {
bool preferPluginBridges;
bool preferUiBridges;
bool uisAlwaysOnTop;
#ifdef WANT_DSSI
bool useDssiVstChunks;
#endif

unsigned int maxParameters;
unsigned int uiBridgesTimeout;

#ifdef WANT_RTAUDIO
unsigned int rtaudioNumPeriods;
unsigned int rtaudioBufferSize;
unsigned int rtaudioSampleRate;
CarlaString rtaudioDevice;
#endif
unsigned int audioNumPeriods;
unsigned int audioBufferSize;
unsigned int audioSampleRate;
CarlaString audioDevice;

CarlaString resourceDir;

@@ -284,17 +285,11 @@ struct EngineOptions {
preferPluginBridges(false),
preferUiBridges(true),
uisAlwaysOnTop(true),
#ifdef WANT_DSSI
useDssiVstChunks(false),
#endif
maxParameters(MAX_DEFAULT_PARAMETERS),
uiBridgesTimeout(4000),
#ifdef WANT_RTAUDIO
rtaudioNumPeriods(2),
rtaudioBufferSize(512),
rtaudioSampleRate(44100),
#endif
resourceDir() {}
audioNumPeriods(2),
audioBufferSize(512),
audioSampleRate(44100) {}
};

/*!
@@ -1067,7 +1062,7 @@ public:

/*!
* Force register a plugin into slot \a id. \n
* This is needed so that we can receive OSC events for the plugin while it initializes.
* This is needed so we can receive OSC events for a plugin while it initializes.
*/
void registerEnginePlugin(const unsigned int id, CarlaPlugin* const plugin);



+ 23
- 77
source/backend/engine/CarlaEngine.cpp View File

@@ -56,31 +56,15 @@ CarlaEngineAudioPort::CarlaEngineAudioPort(const CarlaEngine& engine, const bool
fBuffer(nullptr)
{
carla_debug("CarlaEngineAudioPort::CarlaEngineAudioPort(name:\"%s\", %s)", engine.getName(), bool2str(isInput));

if (fEngine.getProccessMode() == PROCESS_MODE_PATCHBAY)
fBuffer = new float[PATCHBAY_BUFFER_SIZE];
}

CarlaEngineAudioPort::~CarlaEngineAudioPort()
{
carla_debug("CarlaEngineAudioPort::~CarlaEngineAudioPort()");

if (fEngine.getProccessMode() == PROCESS_MODE_PATCHBAY)
{
CARLA_ASSERT(fBuffer != nullptr);

if (fBuffer != nullptr)
{
delete[] fBuffer;
fBuffer = nullptr;
}
}
}

void CarlaEngineAudioPort::initBuffer()
{
if (fEngine.getProccessMode() == PROCESS_MODE_PATCHBAY && ! fIsInput)
carla_zeroFloat(fBuffer, PATCHBAY_BUFFER_SIZE);
}

// -----------------------------------------------------------------------
@@ -95,17 +79,17 @@ CarlaEngineCVPort::CarlaEngineCVPort(const CarlaEngine& engine, const bool isInp

CarlaEngineCVPort::~CarlaEngineCVPort()
{
CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr,);
carla_debug("CarlaEngineCVPort::~CarlaEngineCVPort()");

if (fBuffer != nullptr)
{
delete[] fBuffer;
fBuffer = nullptr;
}
delete[] fBuffer;
fBuffer = nullptr;
}

void CarlaEngineCVPort::initBuffer()
{
CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr,);

carla_zeroFloat(fBuffer, fEngine.getBufferSize());
}

@@ -132,7 +116,7 @@ CarlaEngineEventPort::CarlaEngineEventPort(const CarlaEngine& engine, const bool
carla_debug("CarlaEngineEventPort::CarlaEngineEventPort(name:\"%s\", %s)", engine.getName(), bool2str(isInput));

if (fEngine.getProccessMode() == PROCESS_MODE_PATCHBAY)
fBuffer = new EngineEvent[INTERNAL_EVENT_COUNT];
fBuffer = new EngineEvent[kEngineMaxInternalEventCount];
}

CarlaEngineEventPort::~CarlaEngineEventPort()
@@ -141,13 +125,10 @@ CarlaEngineEventPort::~CarlaEngineEventPort()

if (fEngine.getProccessMode() == PROCESS_MODE_PATCHBAY)
{
CARLA_ASSERT(fBuffer != nullptr);
CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr,);

if (fBuffer != nullptr)
{
delete[] fBuffer;
fBuffer = nullptr;
}
delete[] fBuffer;
fBuffer = nullptr;
}
}

@@ -156,7 +137,7 @@ void CarlaEngineEventPort::initBuffer()
if (fEngine.getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK || fEngine.getProccessMode() == PROCESS_MODE_BRIDGE)
fBuffer = fEngine.getInternalEventBuffer(fIsInput);
else if (fEngine.getProccessMode() == PROCESS_MODE_PATCHBAY && ! fIsInput)
carla_zeroStruct<EngineEvent>(fBuffer, INTERNAL_EVENT_COUNT);
carla_zeroStruct<EngineEvent>(fBuffer, kEngineMaxInternalEventCount);
}

uint32_t CarlaEngineEventPort::getEventCount() const
@@ -167,7 +148,7 @@ uint32_t CarlaEngineEventPort::getEventCount() const

uint32_t i=0;

for (; i < INTERNAL_EVENT_COUNT; ++i)
for (; i < kEngineMaxInternalEventCount; ++i)
{
if (fBuffer[i].type == kEngineEventTypeNull)
break;
@@ -181,7 +162,7 @@ const EngineEvent& CarlaEngineEventPort::getEvent(const uint32_t index)
CARLA_SAFE_ASSERT_RETURN(fIsInput, kFallbackEngineEvent);
CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr, kFallbackEngineEvent);
CARLA_SAFE_ASSERT_RETURN(fEngine.getProccessMode() != PROCESS_MODE_SINGLE_CLIENT && fEngine.getProccessMode() != PROCESS_MODE_MULTIPLE_CLIENTS, kFallbackEngineEvent);
CARLA_SAFE_ASSERT_RETURN(index < INTERNAL_EVENT_COUNT, kFallbackEngineEvent);
CARLA_SAFE_ASSERT_RETURN(index < kEngineMaxInternalEventCount, kFallbackEngineEvent);

return fBuffer[index];
}
@@ -202,7 +183,7 @@ void CarlaEngineEventPort::writeControlEvent(const uint32_t time, const uint8_t

const float fixedValue(carla_fixValue<float>(0.0f, 1.0f, value));

for (uint32_t i=0; i < INTERNAL_EVENT_COUNT; ++i)
for (uint32_t i=0; i < kEngineMaxInternalEventCount; ++i)
{
if (fBuffer[i].type != kEngineEventTypeNull)
continue;
@@ -230,7 +211,7 @@ void CarlaEngineEventPort::writeMidiEvent(const uint32_t time, const uint8_t cha
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
CARLA_SAFE_ASSERT_RETURN(size > 0 && size <= 4,);

for (uint32_t i=0; i < INTERNAL_EVENT_COUNT; ++i)
for (uint32_t i=0; i < kEngineMaxInternalEventCount; ++i)
{
if (fBuffer[i].type != kEngineEventTypeNull)
continue;
@@ -324,6 +305,8 @@ CarlaEnginePort* CarlaEngineClient::addPort(const EnginePortType portType, const
return new CarlaEngineCVPort(fEngine, isInput);
case kEnginePortTypeEvent:
return new CarlaEngineEventPort(fEngine, isInput);
case kEnginePortTypeOSC:
return nullptr; //new CarlaEngineOscPort(fEngine, isInput);
}

carla_stderr("CarlaEngineClient::addPort(%i, \"%s\", %s) - invalid type", portType, name, bool2str(isInput));
@@ -348,43 +331,6 @@ CarlaEngine::~CarlaEngine()
delete pData;
}

// -----------------------------------------------------------------------
// Helpers

// returned value must be deleted
const char* findDSSIGUI(const char* const filename, const char* const label)
{
// QString guiFilename;
// QString pluginDir(filename);
// pluginDir.resize(pluginDir.lastIndexOf("."));
//
// QString shortName(QFileInfo(pluginDir).baseName());
//
// QString checkLabel(label);
// QString checkSName(shortName);
//
// if (! checkLabel.endsWith("_")) checkLabel += "_";
// if (! checkSName.endsWith("_")) checkSName += "_";
//
// QStringList guiFiles(QDir(pluginDir).entryList());
//
// foreach (const QString& gui, guiFiles)
// {
// if (gui.startsWith(checkLabel) || gui.startsWith(checkSName))
// {
// QFileInfo finalname(pluginDir + QDir::separator() + gui);
// guiFilename = finalname.absoluteFilePath();
// break;
// }
// }
//
// if (guiFilename.isEmpty())
// return nullptr;
//
// return carla_strdup(guiFilename.toUtf8().constData());
return nullptr;
}

// -----------------------------------------------------------------------
// Static values and calls

@@ -528,8 +474,8 @@ bool CarlaEngine::init(const char* const clientName)

case PROCESS_MODE_CONTINUOUS_RACK:
pData->maxPluginNumber = MAX_RACK_PLUGINS;
pData->bufEvents.in = new EngineEvent[INTERNAL_EVENT_COUNT];
pData->bufEvents.out = new EngineEvent[INTERNAL_EVENT_COUNT];
pData->bufEvents.in = new EngineEvent[kEngineMaxInternalEventCount];
pData->bufEvents.out = new EngineEvent[kEngineMaxInternalEventCount];
break;

case PROCESS_MODE_PATCHBAY:
@@ -538,8 +484,8 @@ bool CarlaEngine::init(const char* const clientName)

case PROCESS_MODE_BRIDGE:
pData->maxPluginNumber = 1;
pData->bufEvents.in = new EngineEvent[INTERNAL_EVENT_COUNT];
pData->bufEvents.out = new EngineEvent[INTERNAL_EVENT_COUNT];
pData->bufEvents.in = new EngineEvent[kEngineMaxInternalEventCount];
pData->bufEvents.out = new EngineEvent[kEngineMaxInternalEventCount];
break;
}

@@ -1746,7 +1692,7 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t
// initialize outputs (zero)
carla_zeroFloat(outBuf[0], frames);
carla_zeroFloat(outBuf[1], frames);
carla_zeroMem(pData->bufEvents.out, sizeof(EngineEvent)*INTERNAL_EVENT_COUNT);
carla_zeroMem(pData->bufEvents.out, sizeof(EngineEvent)*kEngineMaxInternalEventCount);

bool processed = false;

@@ -1763,12 +1709,12 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t
// initialize inputs (from previous outputs)
carla_copyFloat(inBuf[0], outBuf[0], frames);
carla_copyFloat(inBuf[1], outBuf[1], frames);
std::memcpy(pData->bufEvents.in, pData->bufEvents.out, sizeof(EngineEvent)*INTERNAL_EVENT_COUNT);
std::memcpy(pData->bufEvents.in, pData->bufEvents.out, sizeof(EngineEvent)*kEngineMaxInternalEventCount);

// initialize outputs (zero)
carla_zeroFloat(outBuf[0], frames);
carla_zeroFloat(outBuf[1], frames);
carla_zeroMem(pData->bufEvents.out, sizeof(EngineEvent)*INTERNAL_EVENT_COUNT);
carla_zeroMem(pData->bufEvents.out, sizeof(EngineEvent)*kEngineMaxInternalEventCount);
}

// process


+ 3
- 9
source/backend/engine/CarlaEngineInternal.hpp View File

@@ -70,6 +70,8 @@ const char* EnginePortType2Str(const EnginePortType type)
return "kEnginePortTypeCV";
case kEnginePortTypeEvent:
return "kEnginePortTypeEvent";
case kEnginePortTypeOSC:
return "kEnginePortTypeOSC";
}

carla_stderr("CarlaBackend::EnginePortType2Str(%i) - invalid type", type);
@@ -118,8 +120,7 @@ const char* EngineControlEventType2Str(const EngineControlEventType type)

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

const unsigned short INTERNAL_EVENT_COUNT = 512;
const uint32_t PATCHBAY_BUFFER_SIZE = 128;
const unsigned short kEngineMaxInternalEventCount = 512;

enum EnginePostAction {
kEnginePostActionNull,
@@ -133,19 +134,12 @@ struct EnginePluginData {
float insPeak[2];
float outsPeak[2];

#ifdef CARLA_PROPER_CPP11_SUPPORT
EnginePluginData()
: plugin(nullptr),
insPeak{0.0f},
outsPeak{0.0f} {}
#else
EnginePluginData()
: plugin(nullptr)
{
insPeak[0] = insPeak[1] = nullptr;
outsPeak[0] = outsPeak[1] = nullptr;
}
#endif
};

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


+ 2
- 2
source/backend/engine/CarlaEngineThread.cpp View File

@@ -25,7 +25,7 @@ CARLA_BACKEND_START_NAMESPACE
// -----------------------------------------------------------------------

CarlaEngineThread::CarlaEngineThread(CarlaEngine* const engine)
: juce::Thread("CarlaEngineThread"),
: Thread("CarlaEngineThread"),
fEngine(engine)
{
CARLA_ASSERT(engine != nullptr);
@@ -60,7 +60,7 @@ void CarlaEngineThread::run()

for (i=0, count = fEngine->getCurrentPluginCount(); i < count; ++i)
{
CarlaPlugin* const plugin = fEngine->getPluginUnchecked(i);
CarlaPlugin* const plugin(fEngine->getPluginUnchecked(i));

if (plugin == nullptr || ! plugin->isEnabled())
continue;


+ 3
- 1
source/backend/engine/CarlaEngineThread.hpp View File

@@ -21,13 +21,15 @@
#include "CarlaBackend.hpp"
#include "CarlaJuceUtils.hpp"

using juce::Thread;

CARLA_BACKEND_START_NAMESPACE

#if 0
} // Fix editor indentation
#endif

class CarlaEngineThread : public juce::Thread
class CarlaEngineThread : public Thread
{
public:
CarlaEngineThread(CarlaEngine* const engine);


+ 2
- 17
source/backend/standalone/CarlaStandalone.cpp View File

@@ -19,21 +19,12 @@

#include "CarlaBackendUtils.hpp"
#include "CarlaOscUtils.hpp"

#include "CarlaEngine.hpp"
#include "CarlaPlugin.hpp"
#include "CarlaMIDI.h"
#include "CarlaNative.h"

#include "CarlaLogThread.hpp"
#include "CarlaStyle.hpp"

// #include <QtCore/QSettings>
//
// #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
// # include <QtWidgets/QApplication>
// #else
// # include <QtGui/QApplication>
// #endif

#if ! (defined(DEBUG) || defined(WANT_LOGS) || defined(BUILD_ANSI_TEST))
# define WANT_LOGS
@@ -46,9 +37,6 @@ using CB::CarlaPlugin;
using CB::EngineOptions;
using CB::EngineTimeInfo;

// TEST
int main() { return 0; }

// -------------------------------------------------------------------------------------------------------------------
// Single, standalone engine

@@ -263,10 +251,7 @@ const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigned int interna
const PluginDescriptor* const nativePlugin(CarlaPlugin::getNativePluginDescriptor(internalPluginId));

// as internal plugin, this must never fail
CARLA_ASSERT(nativePlugin != nullptr);

if (nativePlugin == nullptr)
return nullptr;
CARLA_SAFE_ASSERT_RETURN(nativePlugin != nullptr, nullptr);

info.category = static_cast<CarlaPluginCategory>(nativePlugin->category);
info.hints = 0x0;


+ 1
- 13
source/backend/standalone/Makefile View File

@@ -11,24 +11,12 @@ include ../Makefile.mk
BUILD_CXX_FLAGS += -I../../modules/theme
BUILD_CXX_FLAGS += $(shell pkg-config --cflags liblo)

ifeq ($(HAVE_QT4),true)
BUILD_CXX_FLAGS += $(shell pkg-config --cflags QtCore QtGui)
else
BUILD_CXX_FLAGS += $(shell pkg-config --cflags Qt5Core Qt5Widgets)
endif

# --------------------------------------------------------------
# Common

LINK_FLAGS += $(shell pkg-config --libs liblo)
LINK_FLAGS += -lpthread

ifeq ($(HAVE_QT4),true)
LINK_FLAGS += $(shell pkg-config --libs QtCore QtGui QtXml)
else
LINK_FLAGS += $(shell pkg-config --libs Qt5Core Qt5Gui Qt5Xml Qt5Widgets)
endif

# --------------------------------------------------------------
# Engine

@@ -101,8 +89,8 @@ endif
LIBS = ../libcarla_engine.a
LIBS += ../libcarla_plugin.a
LIBS += ../../modules/carla_native.a
LIBS += ../../modules/juce_core.a
LIBS += ../../modules/juce_audio_basics.a
LIBS += ../../modules/juce_core.a
LIBS += ../../modules/rtmempool.a

ifeq ($(CARLA_PLUGIN_SUPPORT),true)


+ 0
- 27
source/carla_database.py View File

@@ -113,33 +113,6 @@ def findFilenames(filePath, stype):

return filenames

# FIXME - put this into c++ discovery
def findDSSIGUI(filename, name, label):
pluginDir = filename.rsplit(".", 1)[0]
shortName = os.path.basename(pluginDir)
guiFilename = ""

checkName = name.replace(" ", "_")
checkLabel = label
checkSName = shortName

if checkName[-1] != "_": checkName += "_"
if checkLabel[-1] != "_": checkLabel += "_"
if checkSName[-1] != "_": checkSName += "_"

for root, dirs, files in os.walk(pluginDir):
guiFiles = files
break
else:
guiFiles = []

for guiFile in guiFiles:
if guiFile.startswith((checkName, checkLabel, checkSName)):
guiFilename = os.path.join(pluginDir, guiFile)
break

return guiFilename

# ------------------------------------------------------------------------------------------------------------
# Plugin Query



+ 6
- 1
source/discovery/Makefile View File

@@ -9,6 +9,7 @@ include ../Makefile.mk
# --------------------------------------------------------------

BUILD_CXX_FLAGS += -I../backend -I../includes -I../modules -I../utils
BUILD_CXX_FLAGS += -DWANT_NATIVE

ifeq ($(CARLA_PLUGIN_SUPPORT),true)
BUILD_CXX_FLAGS += -DWANT_LADSPA -DWANT_DSSI -DWANT_LV2 -DWANT_VST
@@ -17,6 +18,10 @@ BUILD_CXX_FLAGS += -DVESTIGE_HEADER
endif
endif

ifeq ($(CARLA_CSOUND_SUPPORT),true)
NATIVE_FLAGS += -DWANT_CSOUND
endif

ifeq ($(HAVE_FLUIDSYNTH),true)
NATIVE_FLAGS += $(shell pkg-config --cflags --libs fluidsynth) -DWANT_FLUIDSYNTH
endif
@@ -30,7 +35,7 @@ endif
POSIX_BUILD_FLAGS = $(BUILD_CXX_FLAGS)
POSIX_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32 -L/usr/lib/i386-linux-gnu
POSIX_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu
POSIX_LINK_FLAGS = $(LINK_FLAGS) -ldl
POSIX_LINK_FLAGS = $(LINK_FLAGS) $(EXTRA_LIBS) -ldl

WIN_BUILD_FLAGS = $(BUILD_CXX_FLAGS)
WIN_32BIT_FLAGS = $(32BIT_FLAGS)


+ 31
- 16
source/discovery/carla-discovery.cpp View File

@@ -20,8 +20,6 @@
#include "CarlaString.hpp"
#include "CarlaMIDI.h"

#include "JuceHeader.h"

#ifdef WANT_LADSPA
# include "CarlaLadspaUtils.hpp"
#endif
@@ -46,6 +44,8 @@
# undef TMP__cplusplus
#endif

#include "juce_core.h"

#include <iostream>

#define DISCOVERY_OUT(x, y) std::cout << "\ncarla-discovery::" << x << "::" << y << std::endl;
@@ -343,7 +343,7 @@ public:
DISCOVERY_OUT("label", basename);
}

DISCOVERY_OUT("hints", PLUGIN_IS_SYNTH);
// DISCOVERY_OUT("hints", PLUGIN_IS_SYNTH);
DISCOVERY_OUT("audio.outs", 2);
DISCOVERY_OUT("audio.total", 2);
DISCOVERY_OUT("midi.ins", 1);
@@ -743,8 +743,14 @@ void do_dssi_check(void*& libHandle, const char* const filename, const bool init
if (descriptor->run_synth || descriptor->run_multiple_synths)
midiIns = midiTotal = 1;

if (midiIns > 0 && audioIns == 0 && audioOuts > 0)
hints |= PLUGIN_IS_SYNTH;
// if (midiIns > 0 && audioIns == 0 && audioOuts > 0)
// hints |= PLUGIN_IS_SYNTH;

if (const char* const ui = find_dssi_ui(filename, ldescriptor->Label))
{
hints |= PLUGIN_HAS_GUI;
delete[] ui;
}

if (init)
{
@@ -1112,8 +1118,8 @@ void do_lv2_check(const char* const bundle, const bool init)
}
}

if (rdfDescriptor->Type[1] & LV2_PLUGIN_INSTRUMENT)
hints |= PLUGIN_IS_SYNTH;
// if (rdfDescriptor->Type[1] & LV2_PLUGIN_INSTRUMENT)
// hints |= PLUGIN_IS_SYNTH;

if (rdfDescriptor->UICount > 0)
hints |= PLUGIN_HAS_GUI;
@@ -1238,8 +1244,8 @@ void do_vst_check(void*& libHandle, const bool init)
if (effect->flags & effFlagsHasEditor)
hints |= PLUGIN_HAS_GUI;

if (effect->flags & effFlagsIsSynth)
hints |= PLUGIN_IS_SYNTH;
// if (effect->flags & effFlagsIsSynth)
// hints |= PLUGIN_IS_SYNTH;

if (vstPluginCanDo(effect, "receiveVstEvents") || vstPluginCanDo(effect, "receiveVstMidiEvent") || (effect->flags & effFlagsIsSynth) > 0)
midiIns = 1;
@@ -1469,7 +1475,7 @@ void do_fluidsynth_check(const char* const filename, const bool init)
DISCOVERY_OUT("label", (const char*)label);
DISCOVERY_OUT("maker", "");
DISCOVERY_OUT("copyright", "");
DISCOVERY_OUT("hints", PLUGIN_IS_SYNTH);
// DISCOVERY_OUT("hints", PLUGIN_IS_SYNTH);
DISCOVERY_OUT("audio.outs", 2);
DISCOVERY_OUT("audio.total", 2);
DISCOVERY_OUT("midi.ins", 1);
@@ -1490,7 +1496,7 @@ void do_fluidsynth_check(const char* const filename, const bool init)
DISCOVERY_OUT("name", (const char*)name);
DISCOVERY_OUT("label", (const char*)label);
DISCOVERY_OUT("copyright", "");
DISCOVERY_OUT("hints", PLUGIN_IS_SYNTH);
// DISCOVERY_OUT("hints", PLUGIN_IS_SYNTH);
DISCOVERY_OUT("audio.outs", 32);
DISCOVERY_OUT("audio.total", 32);
DISCOVERY_OUT("midi.ins", 1);
@@ -1601,6 +1607,19 @@ int main(int argc, char* argv[])
const char* const filename = argv[2];
const PluginType type = getPluginTypeFromString(stype);

CarlaString filenameStr(filename);

if (filenameStr.contains("fluidsynth", true))
{
DISCOVERY_OUT("info", "skipping fluidsynth based plugin");
return 0;
}
if (filenameStr.contains("linuxsampler", true))
{
DISCOVERY_OUT("info", "skipping linuxsampler based plugin");
return 0;
}

bool openLib = false;
void* handle = nullptr;

@@ -1627,11 +1646,7 @@ int main(int argc, char* argv[])
}

// never do init for dssi-vst, takes too long and it's crashy
#ifdef __USE_GNU
bool doInit = (strcasestr(filename, "dssi-vst") == nullptr);
#else
bool doInit = (std::strstr(filename, "dssi-vst") == nullptr);
#endif
bool doInit = ! filenameStr.contains("dssi-vst", true);

if (doInit && getenv("CARLA_DISCOVERY_NO_PROCESSING_CHECKS") != nullptr)
doInit = false;


+ 1
- 0
source/modules/CarlaNative.h View File

@@ -196,6 +196,7 @@ typedef struct {
void (*ui_custom_data_changed)(HostHandle handle, const char* key, const char* value);
void (*ui_closed)(HostHandle handle);

// TODO: add some msgbox call
const char* (*ui_open_file)(HostHandle handle, bool isDir, const char* title, const char* filter);
const char* (*ui_save_file)(HostHandle handle, bool isDir, const char* title, const char* filter);



+ 42
- 4
source/utils/CarlaDssiUtils.hpp View File

@@ -19,16 +19,54 @@
#define CARLA_DSSI_UTILS_HPP_INCLUDED

#include "CarlaLadspaUtils.hpp"

#include "dssi/dssi.h"

#include "juce_core.h"

// -----------------------------------------------------------------------
// ...

static inline
bool func()
const char* find_dssi_ui(const char* const filename, const char* const label)
{
return false;
CARLA_SAFE_ASSERT_RETURN(filename != nullptr, nullptr);
CARLA_SAFE_ASSERT_RETURN(label != nullptr, nullptr);

using namespace juce;

File pluginFile(filename);
File pluginDir(pluginFile.getParentDirectory());

Array<File> results;

if (pluginDir.findChildFiles(results, File::findFiles|File::ignoreHiddenFiles, false) == 0)
return nullptr;

StringArray guiFiles;

for (int i=0, count=results.size(); i < count; ++i)
{
const File& file(results[i]);
guiFiles.add(file.getFullPathName());
}

String pluginDirName(pluginDir.getFullPathName());
String pluginShortName(pluginFile.getFileNameWithoutExtension());

String checkLabel(label);
String checkShort(pluginShortName);

if (! checkLabel.endsWith("_")) checkLabel += "_";
if (! checkShort.endsWith("_")) checkShort += "_";

for (int i=0, count=guiFiles.size(); i < count; ++i)
{
const String& gui(guiFiles[i]);

if (gui.startsWith(checkLabel) || gui.startsWith(checkShort))
return carla_strdup(File(pluginDir).getChildFile(gui).getFullPathName().toRawUTF8());
}

return nullptr;
}

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


Loading…
Cancel
Save