Browse Source

Allow to run bridges inside bridges; Fixup lv2-bridge

tags/1.9.8
falkTX 8 years ago
parent
commit
ea475b4eb3
12 changed files with 146 additions and 158 deletions
  1. +6
    -0
      source/Makefile.mk
  2. +2
    -0
      source/backend/CarlaPlugin.hpp
  3. +1
    -1
      source/backend/Makefile
  4. +21
    -15
      source/backend/engine/CarlaEngine.cpp
  5. +4
    -4
      source/backend/plugin/CarlaPlugin.cpp
  6. +5
    -5
      source/backend/plugin/CarlaPluginBridge.cpp
  7. +18
    -17
      source/bridges-plugin/CarlaBridgeLV2.cpp
  8. +9
    -1
      source/bridges-plugin/Makefile
  9. +1
    -1
      source/plugin/Makefile
  10. +8
    -12
      source/utils/CarlaBinaryUtils.hpp
  11. +64
    -91
      source/utils/CarlaBridgeUtils.cpp
  12. +7
    -11
      source/utils/CarlaBridgeUtils.hpp

+ 6
- 0
source/Makefile.mk View File

@@ -358,6 +358,10 @@ X11_FLAGS = $(shell pkg-config --cflags x11)
X11_LIBS = $(shell pkg-config --libs x11) X11_LIBS = $(shell pkg-config --libs x11)
endif endif


ifeq ($(HAVE_LIBMAGIC),true)
MAGIC_LIBS += -lmagic
endif

# -------------------------------------------------------------- # --------------------------------------------------------------
# Set libs stuff (part 2) # Set libs stuff (part 2)


@@ -476,6 +480,8 @@ ifeq ($(WIN32),true)
LIB_EXT = .dll LIB_EXT = .dll
endif endif


BASE_FLAGS += -DCARLA_LIB_EXT=\"$(LIB_EXT)\"

# -------------------------------------------------------------- # --------------------------------------------------------------
# Set static libs start & end # Set static libs start & end




+ 2
- 0
source/backend/CarlaPlugin.hpp View File

@@ -635,6 +635,7 @@ public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Plugin processing // Plugin processing


protected:
/*! /*!
* Plugin activate call. * Plugin activate call.
*/ */
@@ -645,6 +646,7 @@ public:
*/ */
virtual void deactivate() noexcept; virtual void deactivate() noexcept;


public:
/*! /*!
* Plugin process call. * Plugin process call.
*/ */


+ 1
- 1
source/backend/Makefile View File

@@ -100,7 +100,7 @@ STANDALONE_LINK_FLAGS += $(LIBLO_LIBS)
endif endif


ifeq ($(HAVE_LIBMAGIC),true) ifeq ($(HAVE_LIBMAGIC),true)
STANDALONE_LINK_FLAGS += -lmagic
STANDALONE_LINK_FLAGS += $(MAGIC_LIBS)
endif endif


ifeq ($(HAVE_FLUIDSYNTH),true) ifeq ($(HAVE_FLUIDSYNTH),true)


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

@@ -382,19 +382,17 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
}; };


CarlaPlugin* plugin = nullptr; CarlaPlugin* plugin = nullptr;

#ifndef BUILD_BRIDGE
CarlaString bridgeBinary(pData->options.binaryDir); CarlaString bridgeBinary(pData->options.binaryDir);


if (bridgeBinary.isNotEmpty()) if (bridgeBinary.isNotEmpty())
{ {
if (btype == BINARY_NATIVE) if (btype == BINARY_NATIVE)
{ {
# ifdef CARLA_OS_WIN
#ifdef CARLA_OS_WIN
bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native.exe"; bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native.exe";
# else
#else
bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native"; bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native";
# endif
#endif
} }
else else
{ {
@@ -425,7 +423,7 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
// Prefer bridges for some specific plugins // Prefer bridges for some specific plugins
bool preferBridges = pData->options.preferPluginBridges; bool preferBridges = pData->options.preferPluginBridges;


# ifdef CARLA_OS_LINUX
#ifndef BUILD_BRIDGE
if (! preferBridges) if (! preferBridges)
{ {
if (ptype == PLUGIN_LV2 && label != nullptr) if (ptype == PLUGIN_LV2 && label != nullptr)
@@ -437,7 +435,7 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
preferBridges = true; preferBridges = true;
} }
} }
#if 0
# if 0
else if (ptype == PLUGIN_VST2) else if (ptype == PLUGIN_VST2)
{ {
/* /*
@@ -507,7 +505,7 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
else if (uniqueId == 1397573722 && std::strstr(filename, "/ZebraHZ.") != nullptr) else if (uniqueId == 1397573722 && std::strstr(filename, "/ZebraHZ.") != nullptr)
preferBridges = true; preferBridges = true;
} }
#endif
# endif
// FIXME: linuxsampler inside carla-rack/patchbay plugin has some issues (only last kit makes noise) // FIXME: linuxsampler inside carla-rack/patchbay plugin has some issues (only last kit makes noise)
else if (getType() == kEngineTypePlugin && (ptype == PLUGIN_GIG || ptype == PLUGIN_SFZ)) else if (getType() == kEngineTypePlugin && (ptype == PLUGIN_GIG || ptype == PLUGIN_SFZ))
{ {
@@ -524,7 +522,7 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
preferBridges = true; preferBridges = true;
} }
} }
# endif
#endif // ! BUILD_BRIDGE


if (ptype != PLUGIN_INTERNAL && (btype != BINARY_NATIVE || (preferBridges && bridgeBinary.isNotEmpty()))) if (ptype != PLUGIN_INTERNAL && (btype != BINARY_NATIVE || (preferBridges && bridgeBinary.isNotEmpty())))
{ {
@@ -539,7 +537,6 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
} }
} }
else else
#endif // ! BUILD_BRIDGE
{ {
bool use16Outs; bool use16Outs;
setLastError("Invalid or unsupported plugin type"); setLastError("Invalid or unsupported plugin type");
@@ -623,6 +620,8 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
case PLUGIN_JACK: case PLUGIN_JACK:
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
plugin = CarlaPlugin::newJackApp(initializer); plugin = CarlaPlugin::newJackApp(initializer);
#else
setLastError("Do not use jack applications as bridges, too much experimental stuff together!");
#endif #endif
break; break;
} }
@@ -633,6 +632,7 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,


plugin->reload(); plugin->reload();


#ifndef BUILD_BRIDGE
bool canRun = true; bool canRun = true;


/**/ if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) /**/ if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK)
@@ -668,11 +668,13 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype,
return false; return false;
} }


#if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE)
# ifdef HAVE_LIBLO
plugin->registerToOscClient(); plugin->registerToOscClient();
# endif
#endif #endif


EnginePluginData& pluginData(pData->plugins[id]); EnginePluginData& pluginData(pData->plugins[id]);
carla_stdout("stored plugin ptr %p", plugin);
pluginData.plugin = plugin; pluginData.plugin = plugin;
pluginData.insPeak[0] = 0.0f; pluginData.insPeak[0] = 0.0f;
pluginData.insPeak[1] = 0.0f; pluginData.insPeak[1] = 0.0f;
@@ -2196,7 +2198,11 @@ bool CarlaEngine::loadProjectInternal(juce::XmlDocument& xmlDoc)
if (addPlugin(getBinaryTypeFromFile(stateSave.binary), ptype, stateSave.binary, if (addPlugin(getBinaryTypeFromFile(stateSave.binary), ptype, stateSave.binary,
stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff, stateSave.options)) stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff, stateSave.options))
{ {
#ifndef BUILD_BRIDGE
const uint pluginId = pData->curPluginCount; const uint pluginId = pData->curPluginCount;
#else
const uint pluginId = 0;
#endif


if (CarlaPlugin* const plugin = pData->plugins[pluginId].plugin) if (CarlaPlugin* const plugin = pData->plugins[pluginId].plugin)
{ {
@@ -2205,11 +2211,10 @@ bool CarlaEngine::loadProjectInternal(juce::XmlDocument& xmlDoc)
if (pData->aboutToClose) if (pData->aboutToClose)
return true; return true;


#ifndef BUILD_BRIDGE
// deactivate bridge client-side ping check, since some plugins block during load // deactivate bridge client-side ping check, since some plugins block during load
if ((plugin->getHints() & PLUGIN_IS_BRIDGE) != 0 && ! isPreset) if ((plugin->getHints() & PLUGIN_IS_BRIDGE) != 0 && ! isPreset)
plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "__CarlaPingOnOff__", "false", false); plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "__CarlaPingOnOff__", "false", false);
#endif
plugin->loadStateSave(stateSave); plugin->loadStateSave(stateSave);


/* NOTE: The following code is the same as the end of addPlugin(). /* NOTE: The following code is the same as the end of addPlugin().
@@ -2218,10 +2223,11 @@ bool CarlaEngine::loadProjectInternal(juce::XmlDocument& xmlDoc)
*/ */
#ifdef BUILD_BRIDGE #ifdef BUILD_BRIDGE
plugin->setActive(true, true, false); plugin->setActive(true, true, false);
#else
++pData->curPluginCount;
#endif #endif
plugin->setEnabled(true);


++pData->curPluginCount;
plugin->setEnabled(true);
callback(ENGINE_CALLBACK_PLUGIN_ADDED, pluginId, 0, 0, 0.0f, plugin->getName()); callback(ENGINE_CALLBACK_PLUGIN_ADDED, pluginId, 0, 0, 0.0f, plugin->getName());


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE


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

@@ -970,12 +970,12 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path)
manifestStream << "\n"; manifestStream << "\n";
manifestStream << "<" << symbol.buffer() << ".ttl>\n"; manifestStream << "<" << symbol.buffer() << ".ttl>\n";
manifestStream << " a lv2:Plugin ;\n"; manifestStream << " a lv2:Plugin ;\n";
manifestStream << " lv2:binary <" << symbol.buffer() << ".so> ;\n";
manifestStream << " lv2:binary <" << symbol.buffer() << CARLA_LIB_EXT "> ;\n";
manifestStream << " rdfs:seeAlso <" << symbol.buffer() << ".ttl> .\n"; manifestStream << " rdfs:seeAlso <" << symbol.buffer() << ".ttl> .\n";
manifestStream << "\n"; manifestStream << "\n";
manifestStream << "<ext-ui>\n"; manifestStream << "<ext-ui>\n";
manifestStream << " a <http://kxstudio.sf.net/ns/lv2ext/external-ui#Widget> ;\n"; manifestStream << " a <http://kxstudio.sf.net/ns/lv2ext/external-ui#Widget> ;\n";
manifestStream << " ui:binary <" << symbol.buffer() << ".so> ;\n";
manifestStream << " ui:binary <" << symbol.buffer() << CARLA_LIB_EXT "> ;\n";
manifestStream << " lv2:extensionData <http://lv2plug.in/ns/extensions/ui#idleInterface> ,\n"; manifestStream << " lv2:extensionData <http://lv2plug.in/ns/extensions/ui#idleInterface> ,\n";
manifestStream << " <http://lv2plug.in/ns/extensions/ui#showInterface> ;\n"; manifestStream << " <http://lv2plug.in/ns/extensions/ui#showInterface> ;\n";
manifestStream << " lv2:requiredFeature <http://lv2plug.in/ns/ext/instance-access> .\n"; manifestStream << " lv2:requiredFeature <http://lv2plug.in/ns/ext/instance-access> .\n";
@@ -1123,9 +1123,9 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path)
} }
} }


const CarlaString binaryFilename(bundlepath + CARLA_OS_SEP_STR + symbol + ".so");
const CarlaString binaryFilename(bundlepath + CARLA_OS_SEP_STR + symbol + CARLA_LIB_EXT);


const File binaryFileSource(File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("carla-bridge-lv2.so"));
const File binaryFileSource(File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("carla-bridge-lv2" CARLA_LIB_EXT));
const File binaryFileTarget(binaryFilename.buffer()); const File binaryFileTarget(binaryFilename.buffer());


if (! binaryFileSource.createSymbolicLink(binaryFileTarget, true)) if (! binaryFileSource.createSymbolicLink(binaryFileTarget, true))


+ 5
- 5
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -15,10 +15,6 @@
* For a full copy of the GNU General Public License see the doc/GPL.txt file. * For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/ */


#ifdef BUILD_BRIDGE
# error This file should be used under bridge mode
#endif

#include "CarlaPluginInternal.hpp" #include "CarlaPluginInternal.hpp"


#include "CarlaBackendUtils.hpp" #include "CarlaBackendUtils.hpp"
@@ -2382,4 +2378,8 @@ CARLA_BACKEND_END_NAMESPACE


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


#include "CarlaBridgeUtils.cpp"
#ifndef BUILD_BRIDGE
# include "CarlaBridgeUtils.cpp"
#endif

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

+ 18
- 17
source/bridges-plugin/CarlaBridgeLV2.cpp View File

@@ -15,7 +15,9 @@
* For a full copy of the GNU General Public License see the doc/GPL.txt file. * For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/ */


// #define BUILD_BRIDGE
#ifndef BUILD_BRIDGE
# error This file should not be compiled if not building bridge
#endif


#include "engine/CarlaEngineInternal.hpp" #include "engine/CarlaEngineInternal.hpp"
#include "CarlaPlugin.hpp" #include "CarlaPlugin.hpp"
@@ -47,13 +49,16 @@ class CarlaEngineLV2Single : public CarlaEngine,
public: public:
CarlaEngineLV2Single(const uint32_t bufferSize, const double sampleRate, const char* const bundlePath, const LV2_URID_Map* uridMap) CarlaEngineLV2Single(const uint32_t bufferSize, const double sampleRate, const char* const bundlePath, const LV2_URID_Map* uridMap)
: fPlugin(nullptr), : fPlugin(nullptr),
fIsRunning(false),
fIsActive(false),
fIsOffline(false) fIsOffline(false)
{ {
run = extui_run; run = extui_run;
show = extui_show; show = extui_show;
hide = extui_hide; hide = extui_hide;


CARLA_SAFE_ASSERT_RETURN(pData->curPluginCount == 0,)
CARLA_SAFE_ASSERT_RETURN(pData->plugins[0].plugin == nullptr,);

// xxxxx // xxxxx
CarlaString binaryDir(bundlePath); CarlaString binaryDir(bundlePath);
binaryDir += CARLA_OS_SEP_STR "bin" CARLA_OS_SEP_STR; binaryDir += CARLA_OS_SEP_STR "bin" CARLA_OS_SEP_STR;
@@ -102,6 +107,9 @@ public:


~CarlaEngineLV2Single() ~CarlaEngineLV2Single()
{ {
if (fPlugin != nullptr && fIsActive)
fPlugin->setActive(false, false, false);

close(); close();
} }


@@ -120,18 +128,18 @@ public:


void lv2_activate() void lv2_activate()
{ {
CARLA_SAFE_ASSERT_RETURN(! fIsRunning,);
CARLA_SAFE_ASSERT_RETURN(! fIsActive,);


fPlugin->activate();
fIsRunning = true;
fPlugin->setActive(true, false, false);
fIsActive = true;
} }


void lv2_deactivate() void lv2_deactivate()
{ {
CARLA_SAFE_ASSERT_RETURN(fIsRunning,);
CARLA_SAFE_ASSERT_RETURN(fIsActive,);


fIsRunning = false;
fPlugin->deactivate();
fIsActive = false;
fPlugin->setActive(false, false, false);
} }


void lv2_run(const uint32_t frames) void lv2_run(const uint32_t frames)
@@ -297,16 +305,9 @@ protected:
return true; return true;
} }


bool close() override
{
fIsRunning = false;
CarlaEngine::close();
return true;
}

bool isRunning() const noexcept override bool isRunning() const noexcept override
{ {
return fIsRunning;
return fIsActive;
} }


bool isOffline() const noexcept override bool isOffline() const noexcept override
@@ -376,9 +377,9 @@ protected:


private: private:
CarlaPlugin* fPlugin; CarlaPlugin* fPlugin;
bool fIsRunning;


// Lv2 host data // Lv2 host data
bool fIsActive;
bool fIsOffline; bool fIsOffline;


struct Ports { struct Ports {


+ 9
- 1
source/bridges-plugin/Makefile View File

@@ -119,7 +119,13 @@ LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS)
endif endif
endif endif


ifeq ($(HAVE_LIBLO),true)
LINK_FLAGS += $(LIBLO_LIBS) LINK_FLAGS += $(LIBLO_LIBS)
endif

ifeq ($(HAVE_LIBMAGIC),true)
LINK_FLAGS += $(MAGIC_LIBS)
endif


ifeq ($(HAVE_X11),true) ifeq ($(HAVE_X11),true)
LINK_FLAGS += $(X11_LIBS) LINK_FLAGS += $(X11_LIBS)
@@ -169,6 +175,7 @@ OBJS_native = \
$(OBJDIR)/CarlaEngineJack.cpp.o \ $(OBJDIR)/CarlaEngineJack.cpp.o \
$(OBJDIR)/CarlaEngineBridge.cpp.o \ $(OBJDIR)/CarlaEngineBridge.cpp.o \
$(OBJDIR)/CarlaPlugin.cpp.o \ $(OBJDIR)/CarlaPlugin.cpp.o \
$(OBJDIR)/CarlaPluginBridge.cpp.o \
$(OBJDIR)/CarlaPluginInternal.cpp.o \ $(OBJDIR)/CarlaPluginInternal.cpp.o \
$(OBJDIR)/CarlaPluginNative.cpp.o \ $(OBJDIR)/CarlaPluginNative.cpp.o \
$(OBJDIR)/CarlaPluginLADSPA.cpp.o \ $(OBJDIR)/CarlaPluginLADSPA.cpp.o \
@@ -198,6 +205,7 @@ OBJS_arch = \
$(OBJDIR)/CarlaEngineJack.cpp.arch.o \ $(OBJDIR)/CarlaEngineJack.cpp.arch.o \
$(OBJDIR)/CarlaEngineBridge.cpp.arch.o \ $(OBJDIR)/CarlaEngineBridge.cpp.arch.o \
$(OBJDIR)/CarlaPlugin.cpp.arch.o \ $(OBJDIR)/CarlaPlugin.cpp.arch.o \
$(OBJDIR)/CarlaPluginBridge.cpp.arch.o \
$(OBJDIR)/CarlaPluginInternal.cpp.arch.o \ $(OBJDIR)/CarlaPluginInternal.cpp.arch.o \
$(OBJDIR)/CarlaPluginLADSPA.cpp.arch.o \ $(OBJDIR)/CarlaPluginLADSPA.cpp.arch.o \
$(OBJDIR)/CarlaPluginDSSI.cpp.arch.o \ $(OBJDIR)/CarlaPluginDSSI.cpp.arch.o \
@@ -248,7 +256,7 @@ $(BINDIR)/$(MODULENAME)-native$(APP_EXT): $(OBJS_native) $(LIBS_native)
$(BINDIR)/$(MODULENAME)-lv2$(LIB_EXT): $(OBJS_lv2) $(LIBS_native) $(BINDIR)/$(MODULENAME)-lv2$(LIB_EXT): $(OBJS_lv2) $(LIBS_native)
-@mkdir -p $(BINDIR) -@mkdir -p $(BINDIR)
@echo "Linking $(MODULENAME)-lv2$(LIB_EXT)" @echo "Linking $(MODULENAME)-lv2$(LIB_EXT)"
@$(CXX) $(OBJS_lv2) $(LIBS_START) $(LIBS_native) $(LIBS_END) $(LINK_FLAGS) $(NATIVE_LINK_FLAGS) -o $@
@$(CXX) $(OBJS_lv2) $(LIBS_START) $(LIBS_native) $(LIBS_END) $(SHARED) $(LINK_FLAGS) $(NATIVE_LINK_FLAGS) -o $@


$(BINDIR)/$(MODULENAME)-posix32: $(OBJS_posix32) $(LIBS_posix32) $(BINDIR)/$(MODULENAME)-posix32: $(OBJS_posix32) $(LIBS_posix32)
-@mkdir -p $(BINDIR) -@mkdir -p $(BINDIR)


+ 1
- 1
source/plugin/Makefile View File

@@ -101,7 +101,7 @@ LINK_FLAGS += $(LIBLO_LIBS)
endif endif


ifeq ($(HAVE_LIBMAGIC),true) ifeq ($(HAVE_LIBMAGIC),true)
LINK_FLAGS += -lmagic
LINK_FLAGS += $(MAGIC_LIBS)
endif endif


ifeq ($(HAVE_FLUIDSYNTH),true) ifeq ($(HAVE_FLUIDSYNTH),true)


+ 8
- 12
source/utils/CarlaBinaryUtils.hpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla binary utils * Carla binary utils
* Copyright (C) 2014 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2014-2017 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -21,17 +21,15 @@
#include "CarlaBackend.h" #include "CarlaBackend.h"
#include "CarlaUtils.hpp" #include "CarlaUtils.hpp"


#ifndef BUILD_BRIDGE
# if defined(CARLA_OS_WIN)
# include "juce_core/juce_core.h"
# elif defined(HAVE_LIBMAGIC)
# include <magic.h>
# endif
#if defined(CARLA_OS_WIN)
# include "juce_core/juce_core.h"
#elif defined(HAVE_LIBMAGIC)
# include <magic.h>
#endif #endif


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


#if defined(HAVE_LIBMAGIC) && ! defined(BUILD_BRIDGE)
#ifdef HAVE_LIBMAGIC
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


class CarlaMagic class CarlaMagic
@@ -76,8 +74,7 @@ BinaryType getBinaryTypeFromFile(const char* const filename)
if (filename == nullptr || filename[0] == '\0') if (filename == nullptr || filename[0] == '\0')
return BINARY_NATIVE; return BINARY_NATIVE;


#ifndef BUILD_BRIDGE
# if defined(CARLA_OS_WIN)
#if defined(CARLA_OS_WIN)
using juce::File; using juce::File;
using juce::FileInputStream; using juce::FileInputStream;
using juce::ScopedPointer; using juce::ScopedPointer;
@@ -122,7 +119,7 @@ BinaryType getBinaryTypeFromFile(const char* const filename)
default: default:
return BINARY_NATIVE; return BINARY_NATIVE;
} }
# elif defined(HAVE_LIBMAGIC)
#elif defined(HAVE_LIBMAGIC)
static const CarlaMagic magic; static const CarlaMagic magic;


const char* const output(magic.getFileDescription(filename)); const char* const output(magic.getFileDescription(filename));
@@ -136,7 +133,6 @@ BinaryType getBinaryTypeFromFile(const char* const filename)


if (std::strstr(output, "ELF") != nullptr) if (std::strstr(output, "ELF") != nullptr)
return (std::strstr(output, "x86-64") != nullptr || std::strstr(output, "aarch64") != nullptr) ? BINARY_POSIX64 : BINARY_POSIX32; return (std::strstr(output, "x86-64") != nullptr || std::strstr(output, "aarch64") != nullptr) ? BINARY_POSIX64 : BINARY_POSIX32;
# endif
#endif #endif


return BINARY_NATIVE; return BINARY_NATIVE;


+ 64
- 91
source/utils/CarlaBridgeUtils.cpp View File

@@ -16,10 +16,7 @@
*/ */


#include "CarlaBridgeUtils.hpp" #include "CarlaBridgeUtils.hpp"

#ifndef BUILD_BRIDGE
# include "CarlaShmUtils.hpp"
#endif
#include "CarlaShmUtils.hpp"


// must be last // must be last
#include "jackbridge/JackBridge.hpp" #include "jackbridge/JackBridge.hpp"
@@ -50,7 +47,8 @@ bool jackbridge_shm_map2(void* shm, T*& value) noexcept
BridgeAudioPool::BridgeAudioPool() noexcept BridgeAudioPool::BridgeAudioPool() noexcept
: data(nullptr), : data(nullptr),
dataSize(0), dataSize(0),
filename()
filename(),
isServer(false)
{ {
carla_zeroChars(shm, 64); carla_zeroChars(shm, 64);
jackbridge_shm_init(shm); jackbridge_shm_init(shm);
@@ -66,7 +64,6 @@ BridgeAudioPool::~BridgeAudioPool() noexcept


bool BridgeAudioPool::initializeServer() noexcept bool BridgeAudioPool::initializeServer() noexcept
{ {
#ifndef BUILD_BRIDGE
char tmpFileBase[64]; char tmpFileBase[64];
std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_AUDIO_POOL "XXXXXX"); std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_AUDIO_POOL "XXXXXX");


@@ -78,17 +75,14 @@ bool BridgeAudioPool::initializeServer() noexcept
carla_copyStruct(shm1, shm2); carla_copyStruct(shm1, shm2);


filename = tmpFileBase; filename = tmpFileBase;
isServer = true;
return true; return true;
#else
return false;
#endif
} }


bool BridgeAudioPool::attachClient(const char* const basename) noexcept bool BridgeAudioPool::attachClient(const char* const basename) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false);


#ifdef BUILD_BRIDGE
// must be invalid right now // must be invalid right now
CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false); CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false);


@@ -98,9 +92,6 @@ bool BridgeAudioPool::attachClient(const char* const basename) noexcept
jackbridge_shm_attach(shm, filename); jackbridge_shm_attach(shm, filename);


return jackbridge_shm_is_valid(shm); return jackbridge_shm_is_valid(shm);
#else
return false;
#endif
} }


void BridgeAudioPool::clear() noexcept void BridgeAudioPool::clear() noexcept
@@ -115,9 +106,8 @@ void BridgeAudioPool::clear() noexcept


if (data != nullptr) if (data != nullptr)
{ {
#ifndef BUILD_BRIDGE
jackbridge_shm_unmap(shm, data);
#endif
if (isServer)
jackbridge_shm_unmap(shm, data);
data = nullptr; data = nullptr;
} }


@@ -126,10 +116,10 @@ void BridgeAudioPool::clear() noexcept
jackbridge_shm_init(shm); jackbridge_shm_init(shm);
} }


#ifndef BUILD_BRIDGE
void BridgeAudioPool::resize(const uint32_t bufferSize, const uint32_t audioPortCount, const uint32_t cvPortCount) noexcept void BridgeAudioPool::resize(const uint32_t bufferSize, const uint32_t audioPortCount, const uint32_t cvPortCount) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(jackbridge_shm_is_valid(shm),); CARLA_SAFE_ASSERT_RETURN(jackbridge_shm_is_valid(shm),);
CARLA_SAFE_ASSERT_RETURN(isServer,);


if (data != nullptr) if (data != nullptr)
jackbridge_shm_unmap(shm, data); jackbridge_shm_unmap(shm, data);
@@ -144,14 +134,14 @@ void BridgeAudioPool::resize(const uint32_t bufferSize, const uint32_t audioPort


std::memset(data, 0, dataSize); std::memset(data, 0, dataSize);
} }
#endif


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


BridgeRtClientControl::BridgeRtClientControl() noexcept BridgeRtClientControl::BridgeRtClientControl() noexcept
: data(nullptr), : data(nullptr),
filename(), filename(),
needsSemDestroy(false)
needsSemDestroy(false),
isServer(false)
{ {
carla_zeroChars(shm, 64); carla_zeroChars(shm, 64);
jackbridge_shm_init(shm); jackbridge_shm_init(shm);
@@ -167,7 +157,6 @@ BridgeRtClientControl::~BridgeRtClientControl() noexcept


bool BridgeRtClientControl::initializeServer() noexcept bool BridgeRtClientControl::initializeServer() noexcept
{ {
#ifndef BUILD_BRIDGE
char tmpFileBase[64]; char tmpFileBase[64];
std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_RT_CLIENT "XXXXXX"); std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_RT_CLIENT "XXXXXX");


@@ -207,18 +196,15 @@ bool BridgeRtClientControl::initializeServer() noexcept
// NEW // NEW


filename = tmpFileBase; filename = tmpFileBase;
isServer = true;
needsSemDestroy = true; needsSemDestroy = true;
return true; return true;
#else
return false;
#endif
} }


bool BridgeRtClientControl::attachClient(const char* const basename) noexcept bool BridgeRtClientControl::attachClient(const char* const basename) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false);


#ifdef BUILD_BRIDGE
// must be invalid right now // must be invalid right now
CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false); CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false);


@@ -228,9 +214,6 @@ bool BridgeRtClientControl::attachClient(const char* const basename) noexcept
jackbridge_shm_attach(shm, filename); jackbridge_shm_attach(shm, filename);


return jackbridge_shm_is_valid(shm); return jackbridge_shm_is_valid(shm);
#else
return false;
#endif
} }


void BridgeRtClientControl::clear() noexcept void BridgeRtClientControl::clear() noexcept
@@ -258,41 +241,43 @@ bool BridgeRtClientControl::mapData() noexcept
{ {
CARLA_SAFE_ASSERT(data == nullptr); CARLA_SAFE_ASSERT(data == nullptr);


if (jackbridge_shm_map2<BridgeRtClientData>(shm, data))
if (! jackbridge_shm_map2<BridgeRtClientData>(shm, data))
return false;

if (isServer)
{
std::memset(data, 0, sizeof(BridgeRtClientData));
setRingBuffer(&data->ringBuffer, true);
}
else
{ {
#ifdef BUILD_BRIDGE
CARLA_SAFE_ASSERT(data->midiOut[0] == 0); CARLA_SAFE_ASSERT(data->midiOut[0] == 0);
setRingBuffer(&data->ringBuffer, false); setRingBuffer(&data->ringBuffer, false);


CARLA_SAFE_ASSERT_RETURN(jackbridge_sem_connect(&data->sem.server), false); CARLA_SAFE_ASSERT_RETURN(jackbridge_sem_connect(&data->sem.server), false);
CARLA_SAFE_ASSERT_RETURN(jackbridge_sem_connect(&data->sem.client), false); CARLA_SAFE_ASSERT_RETURN(jackbridge_sem_connect(&data->sem.client), false);
#else
std::memset(data, 0, sizeof(BridgeRtClientData));
setRingBuffer(&data->ringBuffer, true);
#endif
return true;
} }


return false;
return true;
} }


void BridgeRtClientControl::unmapData() noexcept void BridgeRtClientControl::unmapData() noexcept
{ {
#ifndef BUILD_BRIDGE
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
jackbridge_shm_unmap(shm, data);
#endif
if (isServer)
{
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
jackbridge_shm_unmap(shm, data);
}


data = nullptr; data = nullptr;
setRingBuffer(nullptr, false); setRingBuffer(nullptr, false);
} }


#ifndef BUILD_BRIDGE
bool BridgeRtClientControl::waitForClient(const uint msecs) noexcept bool BridgeRtClientControl::waitForClient(const uint msecs) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(msecs > 0, false); CARLA_SAFE_ASSERT_RETURN(msecs > 0, false);
CARLA_SAFE_ASSERT_RETURN(data != nullptr, false); CARLA_SAFE_ASSERT_RETURN(data != nullptr, false);
CARLA_SAFE_ASSERT_RETURN(isServer, false);


jackbridge_sem_post(&data->sem.server, true); jackbridge_sem_post(&data->sem.server, true);


@@ -304,9 +289,11 @@ void BridgeRtClientControl::writeOpcode(const PluginBridgeRtClientOpcode opcode)
{ {
writeUInt(static_cast<uint32_t>(opcode)); writeUInt(static_cast<uint32_t>(opcode));
} }
#else
PluginBridgeRtClientOpcode BridgeRtClientControl::readOpcode() noexcept PluginBridgeRtClientOpcode BridgeRtClientControl::readOpcode() noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(! isServer, kPluginBridgeRtClientNull);

return static_cast<PluginBridgeRtClientOpcode>(readUInt()); return static_cast<PluginBridgeRtClientOpcode>(readUInt());
} }


@@ -319,14 +306,14 @@ BridgeRtClientControl::WaitHelper::~WaitHelper() noexcept
if (ok) if (ok)
jackbridge_sem_post(&data->sem.client, false); jackbridge_sem_post(&data->sem.client, false);
} }
#endif


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


BridgeNonRtClientControl::BridgeNonRtClientControl() noexcept BridgeNonRtClientControl::BridgeNonRtClientControl() noexcept
: data(nullptr), : data(nullptr),
filename(), filename(),
mutex()
mutex(),
isServer(false)
{ {
carla_zeroChars(shm, 64); carla_zeroChars(shm, 64);
jackbridge_shm_init(shm); jackbridge_shm_init(shm);
@@ -342,7 +329,6 @@ BridgeNonRtClientControl::~BridgeNonRtClientControl() noexcept


bool BridgeNonRtClientControl::initializeServer() noexcept bool BridgeNonRtClientControl::initializeServer() noexcept
{ {
#ifndef BUILD_BRIDGE
char tmpFileBase[64]; char tmpFileBase[64];
std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_CLIENT "XXXXXX"); std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_CLIENT "XXXXXX");


@@ -363,17 +349,14 @@ bool BridgeNonRtClientControl::initializeServer() noexcept
CARLA_SAFE_ASSERT(data != nullptr); CARLA_SAFE_ASSERT(data != nullptr);


filename = tmpFileBase; filename = tmpFileBase;
isServer = true;
return true; return true;
#else
return false;
#endif
} }


bool BridgeNonRtClientControl::attachClient(const char* const basename) noexcept bool BridgeNonRtClientControl::attachClient(const char* const basename) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false);


#ifdef BUILD_BRIDGE
// must be invalid right now // must be invalid right now
CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false); CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false);


@@ -383,9 +366,6 @@ bool BridgeNonRtClientControl::attachClient(const char* const basename) noexcept
jackbridge_shm_attach(shm, filename); jackbridge_shm_attach(shm, filename);


return jackbridge_shm_is_valid(shm); return jackbridge_shm_is_valid(shm);
#else
return false;
#endif
} }


void BridgeNonRtClientControl::clear() noexcept void BridgeNonRtClientControl::clear() noexcept
@@ -397,9 +377,9 @@ void BridgeNonRtClientControl::clear() noexcept


if (! jackbridge_shm_is_valid(shm)) if (! jackbridge_shm_is_valid(shm))
{ {
#ifdef BUILD_BRIDGE
CARLA_SAFE_ASSERT(data == nullptr);
#endif
if (! isServer) {
CARLA_SAFE_ASSERT(data == nullptr);
}
return; return;
} }


@@ -413,11 +393,7 @@ bool BridgeNonRtClientControl::mapData() noexcept


if (jackbridge_shm_map2<BridgeNonRtClientData>(shm, data)) if (jackbridge_shm_map2<BridgeNonRtClientData>(shm, data))
{ {
#ifdef BUILD_BRIDGE
setRingBuffer(&data->ringBuffer, false);
#else
setRingBuffer(&data->ringBuffer, true);
#endif
setRingBuffer(&data->ringBuffer, isServer);
return true; return true;
} }


@@ -426,19 +402,20 @@ bool BridgeNonRtClientControl::mapData() noexcept


void BridgeNonRtClientControl::unmapData() noexcept void BridgeNonRtClientControl::unmapData() noexcept
{ {
#ifndef BUILD_BRIDGE
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
jackbridge_shm_unmap(shm, data);
#endif
if (isServer)
{
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
jackbridge_shm_unmap(shm, data);
}


data = nullptr; data = nullptr;
setRingBuffer(nullptr, false); setRingBuffer(nullptr, false);
} }


#ifndef BUILD_BRIDGE
void BridgeNonRtClientControl::waitIfDataIsReachingLimit() noexcept void BridgeNonRtClientControl::waitIfDataIsReachingLimit() noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(isServer,);

if (getAvailableDataSize() < BigStackBuffer::size/4) if (getAvailableDataSize() < BigStackBuffer::size/4)
return; return;


@@ -458,22 +435,25 @@ void BridgeNonRtClientControl::waitIfDataIsReachingLimit() noexcept


void BridgeNonRtClientControl::writeOpcode(const PluginBridgeNonRtClientOpcode opcode) noexcept void BridgeNonRtClientControl::writeOpcode(const PluginBridgeNonRtClientOpcode opcode) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(isServer,);

writeUInt(static_cast<uint32_t>(opcode)); writeUInt(static_cast<uint32_t>(opcode));
} }
#else
PluginBridgeNonRtClientOpcode BridgeNonRtClientControl::readOpcode() noexcept PluginBridgeNonRtClientOpcode BridgeNonRtClientControl::readOpcode() noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(! isServer, kPluginBridgeNonRtClientNull);

return static_cast<PluginBridgeNonRtClientOpcode>(readUInt()); return static_cast<PluginBridgeNonRtClientOpcode>(readUInt());
return kPluginBridgeNonRtClientNull;
} }
#endif


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


BridgeNonRtServerControl::BridgeNonRtServerControl() noexcept BridgeNonRtServerControl::BridgeNonRtServerControl() noexcept
: data(nullptr), : data(nullptr),
filename(), filename(),
mutex()
mutex(),
isServer(false)
{ {
carla_zeroChars(shm, 64); carla_zeroChars(shm, 64);
jackbridge_shm_init(shm); jackbridge_shm_init(shm);
@@ -489,7 +469,6 @@ BridgeNonRtServerControl::~BridgeNonRtServerControl() noexcept


bool BridgeNonRtServerControl::initializeServer() noexcept bool BridgeNonRtServerControl::initializeServer() noexcept
{ {
#ifndef BUILD_BRIDGE
char tmpFileBase[64]; char tmpFileBase[64];
std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_SERVER "XXXXXX"); std::sprintf(tmpFileBase, PLUGIN_BRIDGE_NAMEPREFIX_NON_RT_SERVER "XXXXXX");


@@ -510,17 +489,14 @@ bool BridgeNonRtServerControl::initializeServer() noexcept
CARLA_SAFE_ASSERT(data != nullptr); CARLA_SAFE_ASSERT(data != nullptr);


filename = tmpFileBase; filename = tmpFileBase;
isServer = true;
return true; return true;
#else
return false;
#endif
} }


bool BridgeNonRtServerControl::attachClient(const char* const basename) noexcept bool BridgeNonRtServerControl::attachClient(const char* const basename) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(basename != nullptr && basename[0] != '\0', false);


#ifdef BUILD_BRIDGE
// must be invalid right now // must be invalid right now
CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false); CARLA_SAFE_ASSERT_RETURN(! jackbridge_shm_is_valid(shm), false);


@@ -530,9 +506,6 @@ bool BridgeNonRtServerControl::attachClient(const char* const basename) noexcept
jackbridge_shm_attach(shm, filename); jackbridge_shm_attach(shm, filename);


return jackbridge_shm_is_valid(shm); return jackbridge_shm_is_valid(shm);
#else
return false;
#endif
} }


void BridgeNonRtServerControl::clear() noexcept void BridgeNonRtServerControl::clear() noexcept
@@ -558,11 +531,7 @@ bool BridgeNonRtServerControl::mapData() noexcept


if (jackbridge_shm_map2<BridgeNonRtServerData>(shm, data)) if (jackbridge_shm_map2<BridgeNonRtServerData>(shm, data))
{ {
#ifdef BUILD_BRIDGE
setRingBuffer(&data->ringBuffer, false);
#else
setRingBuffer(&data->ringBuffer, true);
#endif
setRingBuffer(&data->ringBuffer, isServer);
return true; return true;
} }


@@ -571,24 +540,27 @@ bool BridgeNonRtServerControl::mapData() noexcept


void BridgeNonRtServerControl::unmapData() noexcept void BridgeNonRtServerControl::unmapData() noexcept
{ {
#ifndef BUILD_BRIDGE
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
jackbridge_shm_unmap(shm, data);
#endif
if (isServer)
{
CARLA_SAFE_ASSERT_RETURN(data != nullptr,);
jackbridge_shm_unmap(shm, data);
}


data = nullptr; data = nullptr;
setRingBuffer(nullptr, false); setRingBuffer(nullptr, false);
} }


#ifndef BUILD_BRIDGE
PluginBridgeNonRtServerOpcode BridgeNonRtServerControl::readOpcode() noexcept PluginBridgeNonRtServerOpcode BridgeNonRtServerControl::readOpcode() noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(isServer, kPluginBridgeNonRtServerNull);

return static_cast<PluginBridgeNonRtServerOpcode>(readUInt()); return static_cast<PluginBridgeNonRtServerOpcode>(readUInt());
} }
#else
void BridgeNonRtServerControl::waitIfDataIsReachingLimit() noexcept void BridgeNonRtServerControl::waitIfDataIsReachingLimit() noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(! isServer,);

if (getAvailableDataSize() < HugeStackBuffer::size/4) if (getAvailableDataSize() < HugeStackBuffer::size/4)
return; return;


@@ -608,8 +580,9 @@ void BridgeNonRtServerControl::waitIfDataIsReachingLimit() noexcept


void BridgeNonRtServerControl::writeOpcode(const PluginBridgeNonRtServerOpcode opcode) noexcept void BridgeNonRtServerControl::writeOpcode(const PluginBridgeNonRtServerOpcode opcode) noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(! isServer,);

writeUInt(static_cast<uint32_t>(opcode)); writeUInt(static_cast<uint32_t>(opcode));
} }
#endif


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

+ 7
- 11
source/utils/CarlaBridgeUtils.hpp View File

@@ -204,6 +204,7 @@ struct BridgeAudioPool {
std::size_t dataSize; std::size_t dataSize;
CarlaString filename; CarlaString filename;
char shm[64]; char shm[64];
bool isServer;


BridgeAudioPool() noexcept; BridgeAudioPool() noexcept;
~BridgeAudioPool() noexcept; ~BridgeAudioPool() noexcept;
@@ -212,9 +213,7 @@ struct BridgeAudioPool {
bool attachClient(const char* const fname) noexcept; bool attachClient(const char* const fname) noexcept;
void clear() noexcept; void clear() noexcept;


#ifndef BUILD_BRIDGE
void resize(const uint32_t bufferSize, const uint32_t audioPortCount, const uint32_t cvPortCount) noexcept; void resize(const uint32_t bufferSize, const uint32_t audioPortCount, const uint32_t cvPortCount) noexcept;
#endif


CARLA_DECLARE_NON_COPY_STRUCT(BridgeAudioPool) CARLA_DECLARE_NON_COPY_STRUCT(BridgeAudioPool)
}; };
@@ -226,6 +225,7 @@ struct BridgeRtClientControl : public CarlaRingBufferControl<SmallStackBuffer> {
CarlaString filename; CarlaString filename;
bool needsSemDestroy; // client only bool needsSemDestroy; // client only
char shm[64]; char shm[64];
bool isServer;


BridgeRtClientControl() noexcept; BridgeRtClientControl() noexcept;
~BridgeRtClientControl() noexcept override; ~BridgeRtClientControl() noexcept override;
@@ -237,11 +237,10 @@ struct BridgeRtClientControl : public CarlaRingBufferControl<SmallStackBuffer> {
bool mapData() noexcept; bool mapData() noexcept;
void unmapData() noexcept; void unmapData() noexcept;


#ifndef BUILD_BRIDGE
// non-bridge, server // non-bridge, server
bool waitForClient(const uint msecs) noexcept; bool waitForClient(const uint msecs) noexcept;
void writeOpcode(const PluginBridgeRtClientOpcode opcode) noexcept; void writeOpcode(const PluginBridgeRtClientOpcode opcode) noexcept;
#else
// bridge, client // bridge, client
PluginBridgeRtClientOpcode readOpcode() noexcept; PluginBridgeRtClientOpcode readOpcode() noexcept;


@@ -255,7 +254,6 @@ struct BridgeRtClientControl : public CarlaRingBufferControl<SmallStackBuffer> {


CARLA_DECLARE_NON_COPY_STRUCT(WaitHelper) CARLA_DECLARE_NON_COPY_STRUCT(WaitHelper)
}; };
#endif


CARLA_DECLARE_NON_COPY_STRUCT(BridgeRtClientControl) CARLA_DECLARE_NON_COPY_STRUCT(BridgeRtClientControl)
}; };
@@ -267,6 +265,7 @@ struct BridgeNonRtClientControl : public CarlaRingBufferControl<BigStackBuffer>
CarlaString filename; CarlaString filename;
CarlaMutex mutex; CarlaMutex mutex;
char shm[64]; char shm[64];
bool isServer;


BridgeNonRtClientControl() noexcept; BridgeNonRtClientControl() noexcept;
~BridgeNonRtClientControl() noexcept override; ~BridgeNonRtClientControl() noexcept override;
@@ -278,14 +277,12 @@ struct BridgeNonRtClientControl : public CarlaRingBufferControl<BigStackBuffer>
bool mapData() noexcept; bool mapData() noexcept;
void unmapData() noexcept; void unmapData() noexcept;


#ifndef BUILD_BRIDGE
// non-bridge, server // non-bridge, server
void waitIfDataIsReachingLimit() noexcept; void waitIfDataIsReachingLimit() noexcept;
void writeOpcode(const PluginBridgeNonRtClientOpcode opcode) noexcept; void writeOpcode(const PluginBridgeNonRtClientOpcode opcode) noexcept;
#else
// bridge, client // bridge, client
PluginBridgeNonRtClientOpcode readOpcode() noexcept; PluginBridgeNonRtClientOpcode readOpcode() noexcept;
#endif


CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtClientControl) CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtClientControl)
}; };
@@ -297,6 +294,7 @@ struct BridgeNonRtServerControl : public CarlaRingBufferControl<HugeStackBuffer>
CarlaString filename; CarlaString filename;
CarlaMutex mutex; CarlaMutex mutex;
char shm[64]; char shm[64];
bool isServer;


BridgeNonRtServerControl() noexcept; BridgeNonRtServerControl() noexcept;
~BridgeNonRtServerControl() noexcept override; ~BridgeNonRtServerControl() noexcept override;
@@ -308,14 +306,12 @@ struct BridgeNonRtServerControl : public CarlaRingBufferControl<HugeStackBuffer>
bool mapData() noexcept; bool mapData() noexcept;
void unmapData() noexcept; void unmapData() noexcept;


#ifndef BUILD_BRIDGE
// non-bridge, server // non-bridge, server
PluginBridgeNonRtServerOpcode readOpcode() noexcept; PluginBridgeNonRtServerOpcode readOpcode() noexcept;
#else
// bridge, client // bridge, client
void waitIfDataIsReachingLimit() noexcept; void waitIfDataIsReachingLimit() noexcept;
void writeOpcode(const PluginBridgeNonRtServerOpcode opcode) noexcept; void writeOpcode(const PluginBridgeNonRtServerOpcode opcode) noexcept;
#endif


CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtServerControl) CARLA_DECLARE_NON_COPY_STRUCT(BridgeNonRtServerControl)
}; };


Loading…
Cancel
Save