Browse Source

Fix build of carla-bridges

tags/v0.9.0
falkTX 13 years ago
parent
commit
b44ceed2ac
6 changed files with 195 additions and 155 deletions
  1. +50
    -85
      c++/carla-bridge/Makefile
  2. +39
    -30
      c++/carla-bridge/carla_bridge_toolkit-gtk.cpp
  3. +12
    -22
      c++/carla-bridge/carla_bridge_ui-lv2.cpp
  4. +86
    -11
      c++/carla-bridge/carla_bridge_ui-vst.cpp
  5. +2
    -1
      c++/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro
  6. +6
    -6
      c++/carla-plugin/vst.cpp

+ 50
- 85
c++/carla-bridge/Makefile View File

@@ -17,7 +17,7 @@ ifeq ($(CARLA_PLUGIN_SUPPORT),true)
BUILD_CXX_FLAGS += -DWANT_LADSPA -DWANT_DSSI -DWANT_LV2 -DWANT_VST
endif

ifeq ($(HAVE_QT5), true)
ifeq ($(HAVE_QT5),true)
QT_UI_FLAGS = $(shell pkg-config --cflags QtWidgets)
QT_UI_LIBS = $(shell pkg-config --libs QtWidgets)
else
@@ -28,23 +28,22 @@ endif
# --------------------------------------------------------------
# Plugin bridges

BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS)
BUILD_PLUGIN_FLAGS += -DBUILD_BRIDGE_PLUGIN
BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_PLUGIN
BUILD_PLUGIN_FLAGS += -DCARLA_ENGINE_JACK -I../carla-backend -I../carla-engine -I../carla-jackbridge -I../carla-plugin
BUILD_PLUGIN_FLAGS += $(shell pkg-config --cflags jack) $(QT_UI_FLAGS)

LINK_PLUGIN_FLAGS = $(LINK_FLAGS)
LINK_PLUGIN_FLAGS += $(shell pkg-config --libs QtGui)
LINK_PLUGIN_FLAGS += $(QT_UI_LIBS)

POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_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_PLUGIN_FLAGS) $(shell pkg-config --libs jack) -ldl
POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_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_PLUGIN_FLAGS) $(shell pkg-config --libs jack) -ldl

WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT -DPTW32_STATIC_LIB
WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -L../carla-jackbridge -lpthread
WIN_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) -DJACKBRIDGE_EXPORT -DPTW32_STATIC_LIB
WIN_32BIT_FLAGS = $(32BIT_FLAGS)
WIN_64BIT_FLAGS = $(64BIT_FLAGS)
WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -L../carla-jackbridge -lpthread

# --------------------------------------------------------------
# UI bridges
@@ -82,7 +81,7 @@ LINK_UI_VST_X11_FLAGS = $(LINK_UI_FLAGS) $(QT_UI_LIBS)
# --------------------------------------------------------------

ifeq ($(CARLA_PLUGIN_SUPPORT),true)
all: ui_lv2-gtk2 ui_lv2-gtk3 ui_lv2-qt4 ui_lv2-x11 ui_vst-x11
all: ui_lv2-gtk2 ui_lv2-gtk3 ui_lv2-qt4 ui_lv2-qt5 ui_lv2-x11 ui_vst-x11

ifeq ($(shell pkg-config --exists gtk+-2.0 && echo true),true)
ui_lv2-gtk2: carla-bridge-lv2-gtk2
@@ -96,9 +95,17 @@ else
ui_lv2-gtk3:
endif

ui_lv2-qt4: carla-bridge-lv2-qt4
ui_lv2-qt5: carla-bridge-lv2-qt5
ifneq ($(HAVE_QT5),true)
ui_lv2-qt4: carla-bridge-lv2-qt4
ui_lv2-qt5:
else
ui_lv2-qt4:
ui_lv2-qt5: carla-bridge-lv2-qt5
endif

ui_lv2-hwnd: carla-bridge-lv2-hwnd.exe
ui_lv2-x11: carla-bridge-lv2-x11

ui_vst-hwnd: carla-bridge-vst-hwnd.exe
ui_vst-x11: carla-bridge-vst-x11

@@ -114,7 +121,7 @@ win32: carla-bridge-win32.exe
win64: carla-bridge-win64.exe

# --------------------------------------------------------------
# common
# UI common

carla_bridge_osc__lv2.o: carla_bridge_osc.cpp
$(CXX) $< $(BUILD_UI_LV2_FLAGS) -c -o $@
@@ -125,139 +132,97 @@ carla_bridge_osc__vst.o: carla_bridge_osc.cpp
# --------------------------------------------------------------
# ui_lv2-gtk2

OBJS_UI_LV2_GTK2 = \
carla_bridge_ui-lv2__lv2-gtk2.o carla_bridge_toolkit-gtk2__lv2-gtk2.o carla_bridge_osc__lv2.o \
OBJS_UI_LV2_GTK2 = carla_bridge_ui-lv2__lv2-gtk2.o \
carla_bridge_client__lv2-gtk2.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-gtk2.o carla_bridge_toolkit-gtk__lv2-gtk2.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a

carla-bridge-lv2-gtk2: $(OBJS_UI_LV2_GTK2)
$(CXX) $^ $(LINK_UI_LV2_GTK2_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_ui-lv2__lv2-gtk2.o: carla_bridge_ui-lv2.cpp
$(CXX) $< $(BUILD_UI_LV2_GTK2_FLAGS) -c -o $@

carla_bridge_toolkit-gtk2__lv2-gtk2.o: carla_bridge_toolkit-gtk2.cpp
%__lv2-gtk2.o: %.cpp
$(CXX) $< $(BUILD_UI_LV2_GTK2_FLAGS) -c -o $@

# --------------------------------------------------------------
# ui_lv2-gtk3

OBJS_UI_LV2_GTK3 = \
carla_bridge_ui-lv2__lv2-gtk3.o carla_bridge_toolkit-gtk3__lv2-gtk3.o carla_bridge_osc__lv2.o \
OBJS_UI_LV2_GTK3 = carla_bridge_ui-lv2__lv2-gtk3.o \
carla_bridge_client__lv2-gtk3.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-gtk3.o carla_bridge_toolkit-gtk__lv2-gtk3.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a

carla-bridge-lv2-gtk3: $(OBJS_UI_LV2_GTK3)
$(CXX) $^ $(LINK_UI_LV2_GTK3_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_ui-lv2__lv2-gtk3.o: carla_bridge_ui-lv2.cpp
$(CXX) $< $(BUILD_UI_LV2_GTK3_FLAGS) -c -o $@

carla_bridge_toolkit-gtk3__lv2-gtk3.o: carla_bridge_toolkit-gtk3.cpp
$(CXX) $< $(BUILD_UI_LV2_GTK3_FLAGS) -c -o $@

carla_bridge_osc__lv2-gtk3.o: carla_bridge_osc.cpp
%__lv2-gtk3.o: %.cpp
$(CXX) $< $(BUILD_UI_LV2_GTK3_FLAGS) -c -o $@

# --------------------------------------------------------------
# ui_lv2-qt4

OBJS_UI_LV2_QT4 = \
carla_bridge_ui-lv2__lv2-qt4.o carla_bridge_toolkit-qt__lv2-qt4.o carla_bridge_osc__lv2.o \
OBJS_UI_LV2_QT4 = carla_bridge_ui-lv2__lv2-qt4.o \
carla_bridge_client__lv2-qt4.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-qt4.o carla_bridge_toolkit-qt__lv2-qt4.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a

carla-bridge-lv2-qt4: $(OBJS_UI_LV2_QT4)
$(CXX) $^ $(LINK_UI_LV2_QT4_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_ui-lv2__lv2-qt4.o: carla_bridge_ui-lv2.cpp
$(CXX) $< $(BUILD_UI_LV2_QT4_FLAGS) -c -o $@

carla_bridge_toolkit-qt__lv2-qt4.o: carla_bridge_toolkit-qt.cpp
$(CXX) $< $(BUILD_UI_LV2_QT4_FLAGS) -c -o $@

carla_bridge_osc__lv2-qt4.o: carla_bridge_osc.cpp
%__lv2-qt4.o: %.cpp
$(CXX) $< $(BUILD_UI_LV2_QT4_FLAGS) -c -o $@

# --------------------------------------------------------------
# ui_lv2-qt5

OBJS_UI_LV2_QT5 = \
carla_bridge_ui-lv2__lv2-qt5.o carla_bridge_toolkit-qt__lv2-qt5.o carla_bridge_osc__lv2.o \
OBJS_UI_LV2_QT5 = carla_bridge_ui-lv2__lv2-qt5.o \
carla_bridge_client__lv2-qt5.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-qt5.o carla_bridge_toolkit-qt__lv2-qt5.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a

carla-bridge-lv2-qt5: $(OBJS_UI_LV2_QT5)
$(CXX) $^ $(LINK_UI_LV2_QT5_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_ui-lv2__lv2-qt5.o: carla_bridge_ui-lv2.cpp
$(CXX) $< $(BUILD_UI_LV2_QT5_FLAGS) -c -o $@

carla_bridge_toolkit-qt__lv2-qt5.o: carla_bridge_toolkit-qt.cpp
$(CXX) $< $(BUILD_UI_LV2_QT5_FLAGS) -c -o $@

carla_bridge_osc__lv2-qt5.o: carla_bridge_osc.cpp
%__lv2-qt5.o: %.cpp
$(CXX) $< $(BUILD_UI_LV2_QT5_FLAGS) -c -o $@

# --------------------------------------------------------------
# ui_lv2-x11

OBJS_UI_LV2_X11 = \
carla_bridge_ui-lv2__lv2-x11.o carla_bridge_toolkit-qt__lv2-x11.o carla_bridge_osc__lv2.o \
OBJS_UI_LV2_X11 = carla_bridge_ui-lv2__lv2-x11.o \
carla_bridge_client__lv2-x11.o carla_bridge_osc__lv2.o \
carla_bridge_toolkit__lv2-x11.o carla_bridge_toolkit-qt__lv2-x11.o \
../carla-lilv/carla_lilv.a ../carla-rtmempool/carla_rtmempool.a

carla-bridge-lv2-x11: $(OBJS_UI_LV2_X11)
$(CXX) $^ $(LINK_UI_LV2_X11_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_ui-lv2__lv2-x11.o: carla_bridge_ui-lv2.cpp
$(CXX) $< $(BUILD_UI_LV2_X11_FLAGS) -c -o $@

carla_bridge_toolkit-qt__lv2-x11.o: carla_bridge_toolkit-qt.cpp
$(CXX) $< $(BUILD_UI_LV2_X11_FLAGS) -c -o $@

carla_bridge_osc__lv2-x11.o: carla_bridge_osc.cpp
%__lv2-x11.o: %.cpp
$(CXX) $< $(BUILD_UI_LV2_X11_FLAGS) -c -o $@

# --------------------------------------------------------------
# ui_vst-hwnd

OBJS_UI_VST_HWND = \
OBJS_UI_VST_HWND = carla_bridge_ui-vst__vst-hwnd.o \
carla_bridge_client__vst-hwnd.o carla_bridge_osc__vst.o \
carla_bridge_toolkit__vst-hwnd.o carla_bridge_toolkit-qt__vst-hwnd.o \
carla_bridge_ui-vst__vst-hwnd.o
carla_bridge_toolkit__vst-hwnd.o carla_bridge_toolkit-qt__vst-hwnd.o

carla-bridge-vst-hwnd.exe: $(OBJS_UI_VST_HWND)
$(CXX) $^ $(LINK_UI_VST_HWND_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_client__vst-hwnd.o: carla_bridge_client.cpp
$(CXX) $< $(BUILD_UI_VST_HWND_FLAGS) -c -o $@

carla_bridge_toolkit__vst-hwnd.o: carla_bridge_toolkit.cpp
$(CXX) $< $(BUILD_UI_VST_HWND_FLAGS) -c -o $@

carla_bridge_toolkit-qt__vst-hwnd.o: carla_bridge_toolkit-qt.cpp
$(CXX) $< $(BUILD_UI_VST_HWND_FLAGS) -c -o $@

carla_bridge_ui-vst__vst-hwnd.o: carla_bridge_ui-vst.cpp
%__vst-hwnd.o: %.cpp
$(CXX) $< $(BUILD_UI_VST_HWND_FLAGS) -c -o $@

# --------------------------------------------------------------
# ui_vst-x11

OBJS_UI_VST_X11 = \
OBJS_UI_VST_X11 = carla_bridge_ui-vst__vst-x11.o \
carla_bridge_client__vst-x11.o carla_bridge_osc__vst.o \
carla_bridge_toolkit__vst-x11.o carla_bridge_toolkit-qt__vst-x11.o \
carla_bridge_ui-vst__vst-x11.o
carla_bridge_toolkit__vst-x11.o carla_bridge_toolkit-qt__vst-x11.o

carla-bridge-vst-x11: $(OBJS_UI_VST_X11)
$(CXX) $^ $(LINK_UI_VST_X11_FLAGS) -o $@ && $(STRIP) $@

carla_bridge_client__vst-x11.o: carla_bridge_client.cpp
$(CXX) $< $(BUILD_UI_VST_X11_FLAGS) -c -o $@

carla_bridge_toolkit__vst-x11.o: carla_bridge_toolkit.cpp
$(CXX) $< $(BUILD_UI_VST_X11_FLAGS) -c -o $@

carla_bridge_toolkit-qt__vst-x11.o: carla_bridge_toolkit-qt.cpp
$(CXX) $< $(BUILD_UI_VST_X11_FLAGS) -c -o $@

carla_bridge_ui-vst__vst-x11.o: carla_bridge_ui-vst.cpp
%__vst-x11.o: %.cpp
$(CXX) $< $(BUILD_UI_VST_X11_FLAGS) -c -o $@

# --------------------------------------------------------------
@@ -497,5 +462,5 @@ doxygen: carla_bridge.doxygen

clean:
rm -f *.o *.dll *.so *.exe
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-x11 carla-bridge-vst-x11
rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-x11 carla-bridge-vst-x11
rm -f carla-bridge-posix32 carla-bridge-posix64

+ 39
- 30
c++/carla-bridge/carla_bridge_toolkit-gtk.cpp View File

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

#include "carla_bridge_client.hpp"
#include "carla_bridge_toolkit.hpp"

#if defined(BRIDGE_COCOA) || defined(BRIDGE_HWND) || defined(BRIDGE_X11)
# error Cocoa/HWND/X11 UI uses Qt
# error Embed UI uses Qt
#endif

#include <gtk/gtk.h>
@@ -28,14 +29,27 @@ CARLA_BRIDGE_START_NAMESPACE

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

class CarlaToolkitGtk : public CarlaToolkit
#if defined(BRIDGE_GTK2)
static const char* const appName = "Carla-Gtk2UIs";
#elif defined(BRIDGE_GTK3)
static const char* const appName = "Carla-Gtk3UIs";
#else
static const char* const appName = "Carla-UIs";
#endif

static int gargc = 0;
static char** gargv = {};

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

class CarlaToolkitGtk : public CarlaBridgeToolkit
{
public:
CarlaToolkitGtk(const char* const title)
: CarlaToolkit(title),
settings("Cadence", "Carla-Gtk2UIs")
CarlaToolkitGtk(CarlaBridgeClient* const client, const char* const uiTitle)
: CarlaBridgeToolkit(client, uiTitle),
settings("Cadence", appName)
{
qDebug("CarlaToolkitGtk::CarlaToolkitGtk(%s)", title);
qDebug("CarlaToolkitGtk::CarlaToolkitGtk(%p, \"%s\")", client, uiTitle);

window = nullptr;

@@ -51,38 +65,35 @@ public:
void init()
{
qDebug("CarlaToolkitGtk::init()");
CARLA_ASSERT(! window);

static int argc = 0;
static char** argv = { nullptr };
gtk_init(&argc, &argv);
gtk_init(&gargc, &gargv);
}

void exec(CarlaClient* const client, const bool showGui)
void exec(const bool showGui)
{
qDebug("CarlaToolkitGtk::exec(%p)", client);
qDebug("CarlaToolkitGtk::exec(%s)", bool2str(showGui));
CARLA_ASSERT(client);

m_client = client;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_add(GTK_CONTAINER(window), (GtkWidget*)client->getWidget());

gtk_window_set_resizable(GTK_WINDOW(window), client->isResizable());
gtk_window_set_title(GTK_WINDOW(window), m_title);
gtk_window_set_title(GTK_WINDOW(window), uiTitle);

gtk_window_get_position(GTK_WINDOW(window), &lastX, &lastY);
gtk_window_get_size(GTK_WINDOW(window), &lastWidth, &lastHeight);

if (settings.contains(QString("%1/pos_x").arg(m_title)))
if (settings.contains(QString("%1/pos_x").arg(uiTitle)))
{
lastX = settings.value(QString("%1/pos_x").arg(m_title), lastX).toInt();
lastY = settings.value(QString("%1/pos_y").arg(m_title), lastY).toInt();
lastX = settings.value(QString("%1/pos_x").arg(uiTitle), lastX).toInt();
lastY = settings.value(QString("%1/pos_y").arg(uiTitle), lastY).toInt();
gtk_window_move(GTK_WINDOW(window), lastX, lastY);

if (client->isResizable())
{
lastWidth = settings.value(QString("%1/width").arg(m_title), lastWidth).toInt();
lastHeight = settings.value(QString("%1/height").arg(m_title), lastHeight).toInt();
lastWidth = settings.value(QString("%1/width").arg(uiTitle), lastWidth).toInt();
lastHeight = settings.value(QString("%1/height").arg(uiTitle), lastHeight).toInt();
gtk_window_resize(GTK_WINDOW(window), lastWidth, lastHeight);
}
}
@@ -93,7 +104,7 @@ public:
if (showGui)
show();
else
m_client->sendOscUpdate();
client->sendOscUpdate();

// Main loop
gtk_main();
@@ -110,8 +121,6 @@ public:

window = nullptr;
}

m_client = nullptr;
}

void show()
@@ -155,12 +164,11 @@ protected:
qDebug("CarlaToolkitGtk::handleDestroy()");

window = nullptr;
m_client = nullptr;

settings.setValue(QString("%1/pos_x").arg(m_title), lastX);
settings.setValue(QString("%1/pos_y").arg(m_title), lastY);
settings.setValue(QString("%1/width").arg(m_title), lastWidth);
settings.setValue(QString("%1/height").arg(m_title), lastHeight);
settings.setValue(QString("%1/pos_x").arg(uiTitle), lastX);
settings.setValue(QString("%1/pos_y").arg(uiTitle), lastY);
settings.setValue(QString("%1/width").arg(uiTitle), lastWidth);
settings.setValue(QString("%1/height").arg(uiTitle), lastHeight);
settings.sync();
}

@@ -172,7 +180,8 @@ protected:
gtk_window_get_size(GTK_WINDOW(window), &lastWidth, &lastHeight);
}

return m_client ? m_client->oscIdle() : false;
// FIXME
return client->isOscControlRegistered() ? client->oscIdle() : false;
}

// ---------------------------------------------------------------------
@@ -200,9 +209,9 @@ private:

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

CarlaToolkit* CarlaToolkit::createNew(const char* const title)
CarlaBridgeToolkit* CarlaBridgeToolkit::createNew(CarlaBridgeClient* const client, const char* const uiTitle)
{
return new CarlaToolkitGtk(title);
return new CarlaToolkitGtk(client, uiTitle);
}

CARLA_BRIDGE_END_NAMESPACE

+ 12
- 22
c++/carla-bridge/carla_bridge_ui-lv2.cpp View File

@@ -98,11 +98,11 @@ struct Lv2PluginOptions {

Lv2PluginOptions lv2Options;

class CarlaLv2Client : public CarlaClient
class CarlaLv2Client : public CarlaBridgeClient
{
public:
CarlaLv2Client(CarlaToolkit* const toolkit)
: CarlaClient(toolkit)
CarlaLv2Client(const char* const uiTitle)
: CarlaBridgeClient(uiTitle)
{
handle = nullptr;
widget = nullptr;
@@ -328,7 +328,7 @@ public:
// -----------------------------------------------------------------
// init

CarlaClient::init(pluginURI, uiURI);
CarlaBridgeClient::init(pluginURI, uiURI);

// -----------------------------------------------------------------
// get plugin from lv2_rdf (lilv)
@@ -357,13 +357,13 @@ public:
// -----------------------------------------------------------------
// open DLL

if (! libOpen(rdf_ui_descriptor->Binary))
if (! uiLibOpen(rdf_ui_descriptor->Binary))
return false;

// -----------------------------------------------------------------
// get DLL main entry

const LV2UI_DescriptorFunction ui_descFn = (LV2UI_DescriptorFunction)libSymbol("lv2ui_descriptor");
const LV2UI_DescriptorFunction ui_descFn = (LV2UI_DescriptorFunction)uiLibSymbol("lv2ui_descriptor");

if (! ui_descFn)
return false;
@@ -425,12 +425,12 @@ public:

void close()
{
CarlaClient::close();
CarlaBridgeClient::close();

if (handle && descriptor && descriptor->cleanup)
descriptor->cleanup(handle);

libClose();
uiLibClose();
}

// ---------------------------------------------------------------------
@@ -1077,18 +1077,12 @@ int main(int argc, char* argv[])
if (sampleRateStr)
sampleRate = atof(sampleRateStr);

// Init toolkit
CarlaToolkit* const toolkit = CarlaToolkit::createNew(uiTitle);
toolkit->init();

// Init LV2-UI
CarlaLv2Client client(toolkit);
// Init LV2 client
CarlaLv2Client client(uiTitle);

// Init OSC
if (useOsc && ! client.oscInit(oscUrl))
{
toolkit->quit();
delete toolkit;
return -1;
}

@@ -1097,7 +1091,7 @@ int main(int argc, char* argv[])

if (client.init(pluginURI, uiURI))
{
toolkit->exec(&client, !useOsc);
client.toolkitExec(!useOsc);
ret = 0;
}
else
@@ -1112,13 +1106,9 @@ int main(int argc, char* argv[])
client.oscClose();
}

// Close LV2-UI
// Close LV2 client
client.close();

// Close toolkit
toolkit->quit();
delete toolkit;

return ret;
}



+ 86
- 11
c++/carla-bridge/carla_bridge_ui-vst.cpp View File

@@ -48,8 +48,10 @@ public:
effect = nullptr;

idleTimer = 0;
needIdle = false;

// make client valid
srand(uiTitle[0]);
unique1 = unique2 = rand();
}

@@ -92,7 +94,9 @@ public:
// -----------------------------------------------------------------
// initialize plugin

lastVstPlugin = this;
effect = vstFn(hostCallback);
lastVstPlugin = nullptr;

if (! (effect && effect->magic == kEffectMagic))
return false;
@@ -103,7 +107,7 @@ public:
#ifdef VESTIGE_HEADER
effect->ptr1 = this;
#else
effect->resvd1 = (intptr_t)this;
effect->resvd1 = ToVstPtr(this);
#endif

int32_t value = 0;
@@ -112,6 +116,8 @@ public:
#endif

effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f);
effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0.0f);

#if ! VST_FORCE_DEPRECATED
effect->dispatcher(effect, effSetBlockSizeAndSampleRate, 0, bufferSize, nullptr, sampleRate);
#endif
@@ -217,6 +223,39 @@ public:
return kVstProcessLevelUser;
}

intptr_t handleAudioMasterGetBlockSize()
{
return bufferSize;
}

intptr_t handleAudioMasterGetSampleRate()
{
return sampleRate;
}

intptr_t handleAudioMasterGetTime()
{
memset(&vstTimeInfo, 0, sizeof(VstTimeInfo_R));

vstTimeInfo.sampleRate = sampleRate;

// Tempo
vstTimeInfo.tempo = 120.0;
vstTimeInfo.flags |= kVstTempoValid;

// Time Signature
vstTimeInfo.timeSigNumerator = 4;
vstTimeInfo.timeSigDenominator = 4;
vstTimeInfo.flags |= kVstTimeSigValid;

return (intptr_t)&vstTimeInfo;
}

void handleAudioMasterNeedIdle()
{
needIdle = true;
}

intptr_t handleAudioMasterProcessEvents(const VstEvents* const vstEvents)
{
if (isOscControlRegistered())
@@ -310,20 +349,46 @@ public:
qDebug("CarlaVstClient::hostCallback(%p, %s, %i, " P_INTPTR ", %p, %f", effect, vstMasterOpcode2str(opcode), index, value, ptr, opt);
#endif

// Check if 'resvd1' points to this client
// Check if 'resvd1' points to this client, or register ourselfs if possible
CarlaVstClient* self = nullptr;

#ifdef VESTIGE_HEADER
if (effect && effect->ptr1)
if (effect)
{
self = (CarlaVstClient*)effect->ptr1;
#ifdef VESTIGE_HEADER
if (effect && effect->ptr1)
{
self = (CarlaVstClient*)effect->ptr1;
#else
if (effect && effect->resvd1)
{
self = (CarlaVstClient*)effect->resvd1;
if (effect && effect->resvd1)
{
self = FromVstPtr<CarlaVstClient>(effect->resvd1);
#endif
if (self->unique1 != self->unique2)
self = nullptr;
}

if (self)
{
if (! self->effect)
self->effect = effect;

CARLA_ASSERT(self->effect == effect);

if (self->effect != effect)
{
qWarning("CarlaVstClient::hostCallback() - host pointer mismatch: %p != %p", self->effect, effect);
self = nullptr;
}
}
else if (lastVstPlugin)
{
#ifdef VESTIGE_HEADER
effect->ptr1 = lastVstPlugin;
#else
effect->resvd1 = ToVstPtr(lastVstPlugin);
#endif
if (self->unique1 != self->unique2)
self = nullptr;
self = lastVstPlugin;
}
}

intptr_t ret = 0;
@@ -441,7 +506,9 @@ protected:
{
if (event->timerId() == idleTimer && effect)
{
effect->dispatcher(effect, effIdle, 0, 0, nullptr, 0.0f);
if (needIdle)
effect->dispatcher(effect, effIdle, 0, 0, nullptr, 0.0f);

effect->dispatcher(effect, effEditIdle, 0, 0, nullptr, 0.0f);
}

@@ -450,11 +517,19 @@ protected:

private:
int unique1;

AEffect* effect;
VstTimeInfo_R vstTimeInfo;

int idleTimer;
bool needIdle;
static CarlaVstClient* lastVstPlugin;

int unique2;
};

CarlaVstClient* CarlaVstClient::lastVstPlugin = nullptr;

CARLA_BRIDGE_END_NAMESPACE

int main(int argc, char* argv[])


+ 2
- 1
c++/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro View File

@@ -27,7 +27,8 @@ HEADERS = \
../../carla-utils/carla_lv2_utils.hpp

INCLUDEPATH = .. \
../../carla-includes
../../carla-includes \
../../carla-utils

LIBS = \
../../carla-lilv/carla_lilv.a \


+ 6
- 6
c++/carla-plugin/vst.cpp View File

@@ -454,16 +454,16 @@ public:
void idleGui()
{
#ifdef VESTIGE_HEADER
if (effect && effect->ptr1)
if (effect /*&& effect->ptr1*/)
#else
if (effect && effect->resvd1)
if (effect /*&& effect->resvd1*/)
#endif
{
if (gui.type != GUI_EXTERNAL_OSC)
effect->dispatcher(effect, effEditIdle, 0, 0, nullptr, 0.0f);

if (needIdle)
effect->dispatcher(effect, effIdle, 0, 0, nullptr, 0.0f);

if (gui.type != GUI_EXTERNAL_OSC)
effect->dispatcher(effect, effEditIdle, 0, 0, nullptr, 0.0f);
}

CarlaPlugin::idleGui();
@@ -2268,7 +2268,7 @@ public:
#ifdef VESTIGE_HEADER
effect->ptr1 = this;
#else
effect->resvd1 = ToVstPtr(this);
effect->resvd1 = getAddressFromPointer(this);
#endif

effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f);


Loading…
Cancel
Save