Browse Source

Use CarlaThread in CarlaPluginThread; add aboutToClose to standalone

tags/1.9.4
falkTX 12 years ago
parent
commit
0848bdf804
13 changed files with 161 additions and 149 deletions
  1. +1
    -0
      source/backend/CarlaStandalone.hpp
  2. +70
    -61
      source/backend/plugin/CarlaPlugin.cpp
  3. +29
    -47
      source/backend/plugin/CarlaPlugin.pro
  4. +7
    -5
      source/backend/plugin/CarlaPluginInternal.hpp
  5. +19
    -6
      source/backend/plugin/CarlaPluginThread.cpp
  6. +5
    -3
      source/backend/plugin/CarlaPluginThread.hpp
  7. +10
    -23
      source/backend/plugin/DssiPlugin.cpp
  8. +9
    -0
      source/backend/standalone/CarlaStandalone.cpp
  9. +1
    -1
      source/backend/standalone/Makefile
  10. +1
    -0
      source/carla.py
  11. +7
    -1
      source/carla_backend.py
  12. +1
    -1
      source/tests/ANSI.cpp
  13. +1
    -1
      source/tests/Makefile

+ 1
- 0
source/backend/CarlaStandalone.hpp View File

@@ -159,6 +159,7 @@ CARLA_EXPORT bool carla_engine_init(const char* driverName, const char* clientNa
CARLA_EXPORT bool carla_engine_close();
CARLA_EXPORT void carla_engine_idle();
CARLA_EXPORT bool carla_is_engine_running();
CARLA_EXPORT void carla_set_engine_about_to_close();

CARLA_EXPORT bool carla_load_project(const char* filename);
CARLA_EXPORT bool carla_save_project(const char* filename);


+ 70
- 61
source/backend/plugin/CarlaPlugin.cpp View File

@@ -17,7 +17,6 @@

#include "CarlaPluginInternal.hpp"
#include "CarlaLibUtils.hpp"
#include "CarlaStateUtils.hpp"
#include "CarlaMIDI.h"

//#include <QtGui/QtEvents>
@@ -60,12 +59,12 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned int id)
fHints(0x0),
fOptions(0x0),
fEnabled(false),
kData(new CarlaPluginProtectedData(engine))
kData(new CarlaPluginProtectedData(engine, this, CarlaPluginThread::PLUGIN_THREAD_NULL))
{
CARLA_ASSERT(kData != nullptr);
CARLA_ASSERT(engine != nullptr);
CARLA_ASSERT(id < engine->maxPluginNumber());
qDebug("CarlaPlugin::CarlaPlugin(%p, %i)", engine, id);
carla_debug("CarlaPlugin::CarlaPlugin(%p, %i)", engine, id);

switch (engine->getProccessMode())
{
@@ -90,7 +89,7 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned int id)

CarlaPlugin::~CarlaPlugin()
{
qDebug("CarlaPlugin::~CarlaPlugin()");
carla_debug("CarlaPlugin::~CarlaPlugin()");

// Remove client and ports
if (kData->client != nullptr)
@@ -163,7 +162,7 @@ uint32_t CarlaPlugin::parameterScalePointCount(const uint32_t parameterId) const
return 0;

// unused
Q_UNUSED(parameterId);
(void)parameterId;
}

uint32_t CarlaPlugin::programCount() const
@@ -235,7 +234,7 @@ int32_t CarlaPlugin::chunkData(void** const dataPtr)
return 0;

// unused
Q_UNUSED(dataPtr);
(void)dataPtr;
}

// -------------------------------------------------------------------
@@ -247,7 +246,7 @@ float CarlaPlugin::getParameterValue(const uint32_t parameterId)
return 0.0f;

// unused
Q_UNUSED(parameterId);
(void)parameterId;
}

float CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId)
@@ -257,8 +256,8 @@ float CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const
return 0.0f;

// unused
Q_UNUSED(parameterId);
Q_UNUSED(scalePointId);
(void)parameterId;
(void)scalePointId;
}

void CarlaPlugin::getLabel(char* const strBuf)
@@ -288,7 +287,7 @@ void CarlaPlugin::getParameterName(const uint32_t parameterId, char* const strBu
return;

// unused
Q_UNUSED(parameterId);
(void)parameterId;
}

void CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf)
@@ -298,7 +297,7 @@ void CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const str
return;

// unused
Q_UNUSED(parameterId);
(void)parameterId;
}

void CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf)
@@ -308,7 +307,7 @@ void CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBu
return;

// unused
Q_UNUSED(parameterId);
(void)parameterId;
}

void CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf)
@@ -318,7 +317,7 @@ void CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBu
return;

// unused
Q_UNUSED(parameterId);
(void)parameterId;
}

void CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf)
@@ -329,8 +328,8 @@ void CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const
return;

// unused
Q_UNUSED(parameterId);
Q_UNUSED(scalePointId);
(void)parameterId;
(void)scalePointId;
}

void CarlaPlugin::getProgramName(const uint32_t index, char* const strBuf)
@@ -380,6 +379,7 @@ void CarlaPlugin::getParameterCountInfo(uint32_t* const ins, uint32_t* const out
// -------------------------------------------------------------------
// Set data (state)

#if 0
const SaveState& CarlaPlugin::getSaveState()
{
static SaveState saveState;
@@ -393,6 +393,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState)
// TODO
Q_UNUSED(saveState);
}
#endif

// -------------------------------------------------------------------
// Set data (internal stuff)
@@ -420,7 +421,8 @@ void CarlaPlugin::setActive(const bool active, const bool sendOsc, const bool se
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_ACTIVE, value);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -443,7 +445,8 @@ void CarlaPlugin::setDryWet(const float value, const bool sendOsc, const bool se
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_DRYWET, fixedValue);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -466,7 +469,8 @@ void CarlaPlugin::setVolume(const float value, const bool sendOsc, const bool se
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_VOLUME, fixedValue);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -489,7 +493,8 @@ void CarlaPlugin::setBalanceLeft(const float value, const bool sendOsc, const bo
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_BALANCE_LEFT, fixedValue);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -512,7 +517,8 @@ void CarlaPlugin::setBalanceRight(const float value, const bool sendOsc, const b
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_BALANCE_RIGHT, fixedValue);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -535,7 +541,8 @@ void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool s
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_PANNING, fixedValue);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -546,13 +553,6 @@ void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool s
#endif
}

#if 0 //ndef BUILD_BRIDGE
int CarlaPlugin::setOscBridgeInfo(const PluginBridgeInfoType, const int, const lo_arg* const* const, const char* const)
{
return 1;
}
#endif

// -------------------------------------------------------------------
// Set data (plugin-specific stuff)

@@ -567,7 +567,8 @@ void CarlaPlugin::setParameterValue(const uint32_t parameterId, const float valu
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, parameterId, value);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -616,7 +617,8 @@ void CarlaPlugin::setParameterMidiChannel(const uint32_t parameterId, uint8_t ch
if (sendOsc)
kData->engine->osc_send_control_set_parameter_midi_channel(fId, parameterId, channel);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -637,7 +639,8 @@ void CarlaPlugin::setParameterMidiCC(const uint32_t parameterId, int16_t cc, con
if (sendOsc)
kData->engine->osc_send_control_set_parameter_midi_cc(fId, parameterId, cc);
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -651,13 +654,13 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c
CARLA_ASSERT(value != nullptr);

if (type == nullptr)
return qCritical("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is invalid", type, key, value, bool2str(sendGui));
return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is invalid", type, key, value, bool2str(sendGui));

if (key == nullptr)
return qCritical("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - key is null", type, key, value, bool2str(sendGui));
return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - key is null", type, key, value, bool2str(sendGui));

if (value == nullptr)
return qCritical("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - value is null", type, key, value, bool2str(sendGui));
return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - value is null", type, key, value, bool2str(sendGui));

bool saveData = true;

@@ -700,7 +703,7 @@ void CarlaPlugin::setChunkData(const char* const stringData)
return;

// unused
Q_UNUSED(stringData);
(void)stringData;
}

void CarlaPlugin::setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool)
@@ -806,7 +809,10 @@ void CarlaPlugin::setMidiProgramById(const uint32_t bank, const uint32_t program

void CarlaPlugin::showGui(const bool yesNo)
{
Q_UNUSED(yesNo);
return;

// unused
(void)yesNo;
}

void CarlaPlugin::idleGui()
@@ -1024,7 +1030,7 @@ void CarlaPlugin::registerToOscClient()
void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
{
// FIXME - remove debug prints later
qWarning("CarlaPlugin::updateOscData(%p, \"%s\")", source, url);
carla_stdout("CarlaPlugin::updateOscData(%p, \"%s\")", source, url);

kData->osc.data.free();

@@ -1035,7 +1041,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
const char* port = lo_address_get_port(source);
kData->osc.data.source = lo_address_new_with_proto(proto, host, port);

qWarning("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port);
carla_stdout("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port);
}

{
@@ -1043,7 +1049,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
char* port = lo_url_get_port(url);
kData->osc.data.path = carla_strdup_free(lo_url_get_path(url));
kData->osc.data.target = lo_address_new_with_proto(proto, host, port);
qWarning("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, kData->osc.data.path);
carla_stdout("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, kData->osc.data.path);

std::free(host);
std::free(port);
@@ -1084,7 +1090,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url)
for (uint32_t i=0; i < kData->param.count; i++)
osc_send_control(&kData->osc.data, kData->param.data[i].rindex, getParameterValue(i));

qWarning("CarlaPlugin::updateOscData() - done");
carla_stdout("CarlaPlugin::updateOscData() - done");
}

void CarlaPlugin::freeOscData()
@@ -1094,14 +1100,14 @@ void CarlaPlugin::freeOscData()

bool CarlaPlugin::waitForOscGuiShow()
{
qWarning("CarlaPlugin::waitForOscGuiShow()");
carla_stdout("CarlaPlugin::waitForOscGuiShow()");

// wait for UI 'update' call
for (uint i=0, oscUiTimeout = kData->engine->getOptions().oscUiTimeout; i < oscUiTimeout; i++)
{
if (kData->osc.data.target)
{
qWarning("CarlaPlugin::waitForOscGuiShow() - got response, asking UI to show itself now");
carla_stdout("CarlaPlugin::waitForOscGuiShow() - got response, asking UI to show itself now");
osc_send_show(&kData->osc.data);
return true;
}
@@ -1109,7 +1115,7 @@ bool CarlaPlugin::waitForOscGuiShow()
carla_msleep(100);
}

qWarning("CarlaPlugin::waitForOscGuiShow() - Timeout while waiting for UI to respond (waited %u msecs)", kData->engine->getOptions().oscUiTimeout);
carla_stdout("CarlaPlugin::waitForOscGuiShow() - Timeout while waiting for UI to respond (waited %u msecs)", kData->engine->getOptions().oscUiTimeout);
return false;
}

@@ -1151,7 +1157,8 @@ void CarlaPlugin::sendMidiSingleNote(const uint8_t channel, const uint8_t note,
kData->engine->osc_send_control_note_off(fId, channel, note);
}
#else
Q_UNUSED(sendOsc);
// unused
(void)sendOsc;
#endif

if (sendCallback)
@@ -1314,8 +1321,8 @@ void CarlaPlugin::uiParameterChange(const uint32_t index, const float value)
return;

// unused
Q_UNUSED(index);
Q_UNUSED(value);
(void)index;
(void)value;
}

void CarlaPlugin::uiProgramChange(const uint32_t index)
@@ -1324,7 +1331,7 @@ void CarlaPlugin::uiProgramChange(const uint32_t index)
return;

// unused
Q_UNUSED(index);
(void)index;
}

void CarlaPlugin::uiMidiProgramChange(const uint32_t index)
@@ -1333,7 +1340,7 @@ void CarlaPlugin::uiMidiProgramChange(const uint32_t index)
return;

// unused
Q_UNUSED(index);
(void)index;
}

void CarlaPlugin::uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo)
@@ -1344,9 +1351,9 @@ void CarlaPlugin::uiNoteOn(const uint8_t channel, const uint8_t note, const uint
return;

// unused
Q_UNUSED(channel);
Q_UNUSED(note);
Q_UNUSED(velo);
(void)channel;
(void)note;
(void)velo;
}

void CarlaPlugin::uiNoteOff(const uint8_t channel, const uint8_t note)
@@ -1356,8 +1363,8 @@ void CarlaPlugin::uiNoteOff(const uint8_t channel, const uint8_t note)
return;

// unused
Q_UNUSED(channel);
Q_UNUSED(note);
(void)channel;
(void)note;
}

// -------------------------------------------------------------------
@@ -1372,14 +1379,14 @@ void CarlaPlugin::initBuffers()

void CarlaPlugin::deleteBuffers()
{
qDebug("CarlaPlugin::deleteBuffers() - start");
carla_debug("CarlaPlugin::deleteBuffers() - start");

kData->audioIn.clear();
kData->audioOut.clear();
kData->param.clear();
kData->event.clear();

qDebug("CarlaPlugin::deleteBuffers() - end");
carla_debug("CarlaPlugin::deleteBuffers() - end");
}

// -------------------------------------------------------------------
@@ -1432,11 +1439,12 @@ CarlaPlugin::ScopedDisabler::~ScopedDisabler()
// -------------------------------------------------------------------
// CarlaPluginGUI

#if 0
CarlaPluginGUI::CarlaPluginGUI(QWidget* const parent, Callback* const callback)
: QMainWindow(parent),
kCallback(callback)
{
qDebug("CarlaPluginGUI::CarlaPluginGUI(%p)", parent);
carla_debug("CarlaPluginGUI::CarlaPluginGUI(%p)", parent);
//CARLA_ASSERT(callback);

//m_container = new GuiContainer(this);
@@ -1455,12 +1463,13 @@ CarlaPluginGUI::CarlaPluginGUI(QWidget* const parent, Callback* const callback)

CarlaPluginGUI::~CarlaPluginGUI()
{
qDebug("CarlaPluginGUI::~CarlaPluginGUI()");
carla_debug("CarlaPluginGUI::~CarlaPluginGUI()");
//CARLA_ASSERT(m_container);

// FIXME, automatically deleted by parent ?
//delete m_container;
}
#endif

#if 0

@@ -1480,7 +1489,7 @@ WId CarlaPluginGUI::getWinId() const

void CarlaPluginGUI::setNewSize(int width, int height)
{
qDebug("CarlaPluginGUI::setNewSize(%i, %i)", width, height);
carla_debug("CarlaPluginGUI::setNewSize(%i, %i)", width, height);

if (width < 30)
width = 30;
@@ -1517,7 +1526,7 @@ void CarlaPluginGUI::setTitle(const char* const title)

void CarlaPluginGUI::setVisible(const bool yesNo)
{
qDebug("CarlaPluginGUI::setVisible(%s)", bool2str(yesNo));
carla_debug("CarlaPluginGUI::setVisible(%s)", bool2str(yesNo));

if (yesNo)
{
@@ -1534,7 +1543,7 @@ void CarlaPluginGUI::setVisible(const bool yesNo)

void CarlaPluginGUI::hideEvent(QHideEvent* const event)
{
qDebug("CarlaPluginGUI::hideEvent(%p)", event);
carla_debug("CarlaPluginGUI::hideEvent(%p)", event);
CARLA_ASSERT(event);

event->accept();
@@ -1543,7 +1552,7 @@ void CarlaPluginGUI::hideEvent(QHideEvent* const event)

void CarlaPluginGUI::closeEvent(QCloseEvent* const event)
{
qDebug("CarlaPluginGUI::closeEvent(%p)", event);
carla_debug("CarlaPluginGUI::closeEvent(%p)", event);
CARLA_ASSERT(event);

if (event->spontaneous())


+ 29
- 47
source/backend/plugin/CarlaPlugin.pro View File

@@ -1,7 +1,9 @@
# QtCreator project file

QT = core gui

CONFIG = debug
CONFIG += link_pkgconfig shared warn_on
CONFIG += link_pkgconfig shared qt warn_on

DEFINES = DEBUG
DEFINES += QTCREATOR_TEST
@@ -22,65 +24,45 @@ DEFINES += WANT_SUIL

PKGCONFIG = liblo suil-0 fluidsynth linuxsampler

TARGET = carla_plugin
TARGET = CarlaPlugin
TEMPLATE = lib
VERSION = 0.5.0

SOURCES = \
carla_plugin.cpp \
carla_plugin_thread.cpp \
carla_bridge.cpp \
native.cpp \
ladspa.cpp \
dssi.cpp \
lv2.cpp \
vst.cpp \
fluidsynth.cpp \
linuxsampler.cpp
CarlaPlugin.cpp \
CarlaPluginThread.cpp \
CarlaBridge.cpp \
NativePlugin.cpp \
LadspaPlugin.cpp \
DssiPlugin.cpp \
Lv2Plugin.cpp \
VstPlugin.cpp \
FluidSynthPlugin.cpp \
LinuxSamplerPlugin.cpp

HEADERS = \
carla_plugin_internal.hpp \
carla_plugin_thread.hpp
CarlaPluginInternal.hpp \
CarlaPluginThread.hpp

HEADERS += \
../carla_backend.hpp \
../carla_engine.hpp \
../carla_native.h \
../carla_native.hpp \
../carla_plugin.hpp
../CarlaBackend.hpp \
../CarlaEngine.hpp \
../CarlaNative.h \
../CarlaPlugin.hpp

HEADERS += \
../../utils/carla_juce_utils.hpp \
../../utils/carla_lib_utils.hpp \
../../utils/carla_osc_utils.hpp \
../../utils/carla_state_utils.hpp \
../../utils/carla_utils.hpp
../../utils/CarlaUtils.hpp \
../../utils/CarlaJuceUtils.hpp \
../../utils/CarlaLibUtils.hpp \
../../utils/CarlaOscUtils.hpp \
../../utils/CarlaStateUtils.hpp \
../../utils/CarlaMutex.hpp \
../../utils/CarlaString.hpp \
../../utils/CarlaThread.hpp

INCLUDEPATH = . .. \
../../includes \
../../libs \
../../utils

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

PKGCONFIG += QtCore QtGui

# Fake includes
INCLUDEPATH += \
/usr/include/qt4/ \
/opt/kxstudio/include/

# System includes
QMAKE_CXXFLAGS += -isystem /usr/include/qt4/
QMAKE_CXXFLAGS += -isystem /opt/kxstudio/include/

WARN_FLAGS = \
-ansi -pedantic -pedantic-errors -Wall -Wextra -Wunused-parameter -Wuninitialized \
-Wlogical-op -Wno-vla

#-fipa-pure-const -Wsuggest-attribute=const #pure,const,noreturn
#-Waggregate-return
#-Wcast-qual -Wconversion -Wsign-conversion -Wformat=2

QMAKE_CFLAGS += $${WARN_FLAGS} -std=c99 -Wc++-compat -Wunsuffixed-float-constants -Wwrite-strings
QMAKE_CXXFLAGS += $${WARN_FLAGS} -std=c++11 -Wzero-as-null-pointer-constant
QMAKE_CXXFLAGS += -std=c++0x

+ 7
- 5
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -18,6 +18,7 @@
#ifndef __CARLA_PLUGIN_INTERNAL_HPP__
#define __CARLA_PLUGIN_INTERNAL_HPP__

#include "CarlaBackendUtils.hpp"
#include "CarlaPluginThread.hpp"
#include "CarlaPlugin.hpp"
#include "CarlaEngine.hpp"
@@ -483,13 +484,13 @@ struct CarlaPluginProtectedData {

struct OSC {
CarlaOscData data;
CarlaPluginThread* thread;
CarlaPluginThread thread;

OSC()
: thread(nullptr) {}
OSC(CarlaEngine* const engine, CarlaPlugin* const plugin, const CarlaPluginThread::Mode mode)
: thread(engine, plugin, mode) {}
} osc;

CarlaPluginProtectedData(CarlaEngine* const engine_)
CarlaPluginProtectedData(CarlaEngine* const engine_, CarlaPlugin* const plugin, const CarlaPluginThread::Mode mode)
: engine(engine_),
client(nullptr),
gui(nullptr),
@@ -499,7 +500,8 @@ struct CarlaPluginProtectedData {
ctrlInChannel(-1),
extraHints(0x0),
latency(0),
latencyBuffers(nullptr) {}
latencyBuffers(nullptr),
osc(engine_, plugin, mode) {}

CarlaPluginProtectedData() = delete;
CarlaPluginProtectedData(CarlaPluginProtectedData&) = delete;


+ 19
- 6
source/backend/plugin/CarlaPluginThread.cpp View File

@@ -24,10 +24,12 @@

CARLA_BACKEND_START_NAMESPACE

const char* PluginThreadMode2str(const CarlaPluginThread::PluginThreadMode mode)
const char* PluginThreadMode2str(const CarlaPluginThread::Mode mode)
{
switch (mode)
{
case CarlaPluginThread::PLUGIN_THREAD_NULL:
return "PLUGIN_THREAD_NULL";
case CarlaPluginThread::PLUGIN_THREAD_DSSI_GUI:
return "PLUGIN_THREAD_DSSI_GUI";
case CarlaPluginThread::PLUGIN_THREAD_LV2_GUI:
@@ -42,10 +44,10 @@ const char* PluginThreadMode2str(const CarlaPluginThread::PluginThreadMode mode)
return nullptr;
}

CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const PluginThreadMode mode)
CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const Mode mode)
: kEngine(engine),
kPlugin(plugin),
kMode(mode),
fMode(mode),
fProcess(nullptr)
{
carla_debug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->name(), engine->getName(), PluginThreadMode2str(mode));
@@ -57,6 +59,11 @@ CarlaPluginThread::~CarlaPluginThread()
delete fProcess;
}

void CarlaPluginThread::setMode(const CarlaPluginThread::Mode mode)
{
fMode = mode;
}

void CarlaPluginThread::setOscData(const char* const binary, const char* const label, const char* const extra)
{
fBinary = binary;
@@ -73,15 +80,18 @@ void CarlaPluginThread::run()
fProcess = new QProcess(nullptr);
fProcess->setProcessChannelMode(QProcess::ForwardedChannels);
#ifndef BUILD_BRIDGE
fProcess->setProcessEnvironment(kEngine->getOptionsAsProcessEnvironment());
//fProcess->setProcessEnvironment(kEngine->getOptionsAsProcessEnvironment());
#endif
}

QString name(kPlugin->name() ? kPlugin->name() : "(none)");
QStringList arguments;

switch (kMode)
switch (fMode)
{
case PLUGIN_THREAD_NULL:
break;

case PLUGIN_THREAD_DSSI_GUI:
/* osc_url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathUDP()).arg(kPlugin->id());
/* filename */ arguments << kPlugin->filename();
@@ -114,8 +124,11 @@ void CarlaPluginThread::run()
fProcess->start((const char*)fBinary, arguments);
fProcess->waitForStarted();

switch (kMode)
switch (fMode)
{
case PLUGIN_THREAD_NULL:
break;

case PLUGIN_THREAD_DSSI_GUI:
case PLUGIN_THREAD_LV2_GUI:
case PLUGIN_THREAD_VST_GUI:


+ 5
- 3
source/backend/plugin/CarlaPluginThread.hpp View File

@@ -29,16 +29,18 @@ CARLA_BACKEND_START_NAMESPACE
class CarlaPluginThread : public CarlaThread
{
public:
enum PluginThreadMode {
enum Mode {
PLUGIN_THREAD_NULL,
PLUGIN_THREAD_DSSI_GUI,
PLUGIN_THREAD_LV2_GUI,
PLUGIN_THREAD_VST_GUI,
PLUGIN_THREAD_BRIDGE
};

CarlaPluginThread(CarlaEngine* const engine, CarlaPlugin* const plugin, const PluginThreadMode mode);
CarlaPluginThread(CarlaEngine* const engine, CarlaPlugin* const plugin, const Mode mode);
~CarlaPluginThread();

void setMode(const CarlaPluginThread::Mode mode);
void setOscData(const char* const binary, const char* const label, const char* const extra="");

protected:
@@ -47,8 +49,8 @@ protected:
private:
CarlaEngine* const kEngine;
CarlaPlugin* const kPlugin;
const PluginThreadMode kMode;

Mode fMode;
CarlaString fBinary;
CarlaString fLabel;
CarlaString fExtra;


+ 10
- 23
source/backend/plugin/DssiPlugin.cpp View File

@@ -53,16 +53,11 @@ public:
{
showGui(false);

if (kData->osc.thread != nullptr)
// Wait a bit first, try safe quit, then force kill
if (kData->osc.thread.isRunning() && ! kData->osc.thread.stop(kData->engine->getOptions().oscUiTimeout))
{
// Wait a bit first, try safe quit, then force kill
if (kData->osc.thread->isRunning() && ! kData->osc.thread->wait(kData->engine->getOptions().oscUiTimeout))
{
qWarning("Failed to properly stop DSSI GUI thread");
kData->osc.thread->terminate();
}

delete kData->osc.thread;
qWarning("Failed to properly stop DSSI GUI thread");
kData->osc.thread.terminate();
}
}

@@ -322,17 +317,9 @@ public:

void showGui(const bool yesNo)
{
CARLA_ASSERT(kData->osc.thread != nullptr);

if (kData->osc.thread == nullptr)
{
qCritical("DssiPlugin::showGui(%s) - attempt to show gui, but it does not exist!", bool2str(yesNo));
return;
}

if (yesNo)
{
kData->osc.thread->start();
kData->osc.thread.start();
}
else
{
@@ -343,8 +330,8 @@ public:
kData->osc.data.free();
}

if (! kData->osc.thread->wait(500))
kData->osc.thread->quit();
if (kData->osc.thread.isRunning() && ! kData->osc.thread.stop(kData->engine->getOptions().oscUiTimeout))
kData->osc.thread.terminate();
}
}

@@ -1711,10 +1698,10 @@ public:
// ---------------------------------------------------------------
// gui stuff

if (guiFilename)
if (guiFilename != nullptr)
{
kData->osc.thread = new CarlaPluginThread(kData->engine, this, CarlaPluginThread::PLUGIN_THREAD_DSSI_GUI);
kData->osc.thread->setOscData(guiFilename, fDescriptor->Label);
kData->osc.thread.setMode(CarlaPluginThread::PLUGIN_THREAD_DSSI_GUI);
kData->osc.thread.setOscData(guiFilename, fDescriptor->Label);

fHints |= PLUGIN_HAS_GUI;
}


+ 9
- 0
source/backend/standalone/CarlaStandalone.cpp View File

@@ -299,6 +299,15 @@ bool carla_is_engine_running()
return (standalone.engine != nullptr && standalone.engine->isRunning());
}

void carla_set_engine_about_to_close()
{
carla_debug("carla_set_engine_about_to_close()");
CARLA_ASSERT(standalone.engine != nullptr);

if (standalone.engine != nullptr)
standalone.engine->setAboutToClose();
}

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

bool carla_load_project(const char* filename)


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

@@ -75,7 +75,7 @@ debug:
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

$(SHARED): $(OBJS) $(LIBS)
$(CXX) $^ -shared $(LINK_FLAGS) -o $@
$(CXX) $^ -shared $(LINK_FLAGS) -o $@ && $(STRIP) $@

$(STATIC): $(OBJS) $(LIBS)
$(AR) rs $@ $^


+ 1
- 0
source/carla.py View File

@@ -1169,6 +1169,7 @@ class CarlaMainW(QMainWindow):

self.saveSettings()

Carla.host.set_engine_about_to_close()
self.removeAllPlugins()
self.stopEngine()



+ 7
- 1
source/carla_backend.py View File

@@ -173,6 +173,9 @@ class Host(object):

self.lib.carla_is_engine_running.argtypes = None
self.lib.carla_is_engine_running.restype = c_bool
self.lib.carla_set_engine_about_to_close.argtypes = None
self.lib.carla_set_engine_about_to_close.restype = None

self.lib.carla_load_project.argtypes = [c_char_p]
self.lib.carla_load_project.restype = c_bool
@@ -363,11 +366,14 @@ class Host(object):
return self.lib.carla_engine_close()

def engine_idle(self):
return self.lib.carla_engine_idle()
self.lib.carla_engine_idle()

def is_engine_running(self):
return self.lib.carla_is_engine_running()

def set_engine_about_to_close(self):
self.lib.carla_set_engine_about_to_close()

def load_project(self, filename):
return self.lib.carla_load_project(filename.encode("utf-8"))



+ 1
- 1
source/tests/ANSI.cpp View File

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

// still need qt classes check
//#include "CarlaPlugin.hpp"
#include "plugin/CarlaPluginThread.cpp"
#include "plugin/CarlaPlugin.cpp"

#if 0
#include "CarlaDefines.hpp"


+ 1
- 1
source/tests/Makefile View File

@@ -10,7 +10,7 @@ include ../Makefile.mk

BUILD_CXX_FLAGS += -I../backend -I../includes -I../libs -I../utils -Wall -Wextra
BUILD_CXX_FLAGS += -DWANT_JACK -DWANT_RTAUDIO
BUILD_CXX_FLAGS += -isystem /usr/include/qt4
# BUILD_CXX_FLAGS += -isystem /usr/include/qt4
# BUILD_CXX_FLAGS += -isystem ../backend/engine/rtaudio-4.0.11
# BUILD_CXX_FLAGS += -I/opt/mingw32/include



Loading…
Cancel
Save