Browse Source

Fixes for internal client and osc

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.1-rc1
falkTX 6 years ago
parent
commit
dc7a0adb3f
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 56 additions and 8 deletions
  1. +20
    -4
      source/backend/engine/CarlaEngineJack.cpp
  2. +2
    -0
      source/backend/engine/CarlaEngineOsc.cpp
  3. +13
    -1
      source/backend/engine/CarlaEngineOscHandlers.cpp
  4. +1
    -2
      source/backend/engine/CarlaEngineOscSend.cpp
  5. +17
    -0
      source/frontend/carla_control.py
  6. +3
    -1
      source/frontend/carla_host.py

+ 20
- 4
source/backend/engine/CarlaEngineJack.cpp View File

@@ -821,7 +821,8 @@ public:
fPatchbayProcThreadProtectionMutex(),
fRetConns(),
fPostPonedEvents(),
fPostPonedEventsMutex()
fPostPonedEventsMutex(),
fIsInternalClient(false)
#endif
{
carla_debug("CarlaEngineJack::CarlaEngineJack()");
@@ -881,7 +882,7 @@ public:

bool init(const char* const clientName) override
{
CARLA_SAFE_ASSERT_RETURN(fClient == nullptr || (clientName != nullptr && clientName[0] != '\0'), false);
CARLA_SAFE_ASSERT_RETURN(fClient != nullptr || (clientName != nullptr && clientName[0] != '\0'), false);
CARLA_SAFE_ASSERT_RETURN(jackbridge_is_ok(), false);
carla_debug("CarlaEngineJack::init(\"%s\")", clientName);

@@ -1066,11 +1067,15 @@ public:
#endif
}

#ifndef BUILD_BRIDGE
bool initInternal(jack_client_t* const client)
{
fClient = client;
fIsInternalClient = true;

return init(nullptr);
}
#endif

bool close() override
{
@@ -1496,6 +1501,7 @@ public:
bool patchbayRefresh(const bool sendHost, const bool sendOSC, const bool external) override
{
CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false);
carla_debug("patchbayRefresh(%s, %s, %s)", bool2str(sendHost), bool2str(sendOSC), bool2str(external));

if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY)
{
@@ -2366,8 +2372,10 @@ private:
}

// query all jack ports
if (const char** const ports = jackbridge_get_ports(fClient, nullptr, nullptr, 0))
{
const char** const ports = jackbridge_get_ports(fClient, nullptr, nullptr, 0);
CARLA_SAFE_ASSERT_RETURN(ports != nullptr,);

for (int i=0; ports[i] != nullptr; ++i)
{
const char* const fullPortName(ports[i]);
@@ -2617,6 +2625,8 @@ private:
LinkedList<PostPonedJackEvent> fPostPonedEvents;
CarlaMutex fPostPonedEventsMutex;

bool fIsInternalClient;

void postPoneJackCallback(const PostPonedJackEvent& ev)
{
const CarlaMutexLocker cml(fPostPonedEventsMutex);
@@ -2633,6 +2643,9 @@ private:

for (; ! shouldThreadExit();)
{
if (fIsInternalClient)
idle();

{
const CarlaMutexLocker cml(fPostPonedEventsMutex);

@@ -2648,7 +2661,7 @@ private:

if (events.count() == 0 && newPlugins.count() == 0)
{
carla_msleep(200);
carla_msleep(fIsInternalClient ? 10 : 200);
continue;
}

@@ -2897,6 +2910,7 @@ CarlaEngine* CarlaEngine::newJack()

CARLA_BACKEND_END_NAMESPACE

#ifndef BUILD_BRIDGE
// -----------------------------------------------------------------------
// internal jack client

@@ -2943,6 +2957,7 @@ int jack_initialize(jack_client_t* const client, const char* const load_init)
#if 0 //def CARLA_OS_UNIX
sThreadSafeFFTW.init();
#endif

return 0;
}
else
@@ -2978,3 +2993,4 @@ void jack_finish(void *arg)
}

// -----------------------------------------------------------------------
#endif

+ 2
- 0
source/backend/engine/CarlaEngineOsc.cpp View File

@@ -110,6 +110,7 @@ void CarlaEngineOsc::init(const char* const name, int tcpPort, int udpPort) noex
}

lo_server_add_method(fServerTCP, nullptr, nullptr, osc_message_handler_TCP, this);
carla_debug("OSC TCP server running and listening at %s", fServerPathTCP.buffer());
}

// ----------------------------------------------------------------------------------------------------------------
@@ -142,6 +143,7 @@ void CarlaEngineOsc::init(const char* const name, int tcpPort, int udpPort) noex
}

lo_server_add_method(fServerUDP, nullptr, nullptr, osc_message_handler_UDP, this);
carla_debug("OSC UDP server running and listening at %s", fServerPathUDP.buffer());
}

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


+ 13
- 1
source/backend/engine/CarlaEngineOscHandlers.cpp View File

@@ -418,12 +418,24 @@ int CarlaEngineOsc::handleMsgControl(const char* const method,
CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[5] == 's');
CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[7] == 'i');

const int32_t btype = argv[1]->i;
int32_t btype = argv[1]->i;
CARLA_SAFE_ASSERT_RETURN_OSC_ERR(btype >= 0);

const int32_t ptype = argv[2]->i;
CARLA_SAFE_ASSERT_RETURN_OSC_ERR(ptype >= 0);

// Force binary type to be native in some cases
switch (ptype)
{
case PLUGIN_INTERNAL:
case PLUGIN_LV2:
case PLUGIN_SF2:
case PLUGIN_SFZ:
case PLUGIN_JACK:
btype = BINARY_NATIVE;
break;
}

const char* filename = &argv[3]->s;

if (filename != nullptr && std::strcmp(filename, "(null)") == 0)


+ 1
- 2
source/backend/engine/CarlaEngineOscSend.cpp View File

@@ -288,7 +288,7 @@ void CarlaEngineOsc::sendResponse(const int messageId, const char* const error)
{
CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',);
CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,);
carla_debug("CarlaEngineOsc::sendExit()");
carla_debug("CarlaEngineOsc::sendResponse()");

char targetPath[std::strlen(fControlDataTCP.path)+6];
std::strcpy(targetPath, fControlDataTCP.path);
@@ -314,7 +314,6 @@ void CarlaEngineOsc::sendRuntimeInfo() const noexcept
{
CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.path != nullptr && fControlDataUDP.path[0] != '\0',);
CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.target != nullptr,);
carla_debug("CarlaEngineOsc::sendRuntimeInfo()");

const EngineTimeInfo timeInfo(fEngine->getTimeInfo());



+ 17
- 0
source/frontend/carla_control.py View File

@@ -42,6 +42,10 @@ from liblo import (

from random import random

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

DEBUG = False

# ------------------------------------------------------------------------------------------------------------
# Host OSC object

@@ -217,6 +221,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/cb', 'iiiiifs')
def carla_cb(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
action, pluginId, value1, value2, value3, valuef, valueStr = args
self.host._setViaCallback(action, pluginId, value1, value2, value3, valuef, valueStr)
@@ -224,6 +229,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/info', 'iiiihiisssssss')
def carla_info(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
(
pluginId, type_, category, hints, uniqueId, optsAvail, optsEnabled,
@@ -252,6 +258,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/ports', 'iiiiiiii')
def carla_ports(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, audioIns, audioOuts, midiIns, midiOuts, paramIns, paramOuts, paramTotal = args
self.host._set_audioCountInfo(pluginId, {'ins': audioIns, 'outs': audioOuts})
@@ -260,6 +267,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/param', 'iiiiiissfffffff')
def carla_param(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
(
pluginId, paramId, type_, hints, midiChan, midiCC, name, unit,
@@ -300,6 +308,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/count', 'iiiiii')
def carla_count(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, pcount, mpcount, cdcount, cp, cmp = args
self.host._set_programCount(pluginId, pcount)
@@ -309,6 +318,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/pcount', 'iii')
def carla_pcount(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, pcount, mpcount = args
self.host._set_programCount(pluginId, pcount)
@@ -316,24 +326,28 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/prog', 'iis')
def carla_prog(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, progId, progName = args
self.host._set_programName(pluginId, progId, progName)

@make_method('/ctrl/mprog', 'iiiis')
def carla_mprog(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, midiProgId, bank, program, name = args
self.host._set_midiProgramData(pluginId, midiProgId, {'bank': bank, 'program': program, 'name': name})

@make_method('/ctrl/cdata', 'iisss')
def carla_cdata(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, index, type_, key, value = args
self.host._set_customData(pluginId, index, { 'type': type_, 'key': key, 'value': value })

@make_method('/ctrl/iparams', 'ifffffff')
def carla_iparams(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
pluginId, active, drywet, volume, balLeft, balRight, pan, ctrlChan = args
self.host._set_internalValue(pluginId, PARAMETER_ACTIVE, active)
@@ -346,6 +360,7 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/resp', 'is')
def carla_resp(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
messageId, error = args
self.host.responses[messageId] = error
@@ -353,12 +368,14 @@ class CarlaControlServerTCP(Server):

@make_method('/ctrl/exit', '')
def carla_exit(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
#self.host.lo_target_tcp = None
self.host.QuitCallback.emit()

@make_method('/ctrl/exit-error', 's')
def carla_exit_error(self, path, args):
if DEBUG: print(path, args)
self.fReceivedMsgs = True
error, = args
self.host.lo_target_tcp = None


+ 3
- 1
source/frontend/carla_host.py View File

@@ -912,11 +912,13 @@ class HostWindow(QMainWindow):
self.ui.act_canvas_show_internal.setVisible(True)
self.ui.act_canvas_show_external.setChecked(False)
self.ui.act_canvas_show_external.setVisible(True)
self.fExternalPatchbay = False
else:
self.ui.act_canvas_show_internal.setChecked(False)
self.ui.act_canvas_show_internal.setVisible(False)
self.ui.act_canvas_show_external.setChecked(False)
self.ui.act_canvas_show_external.setChecked(True)
self.ui.act_canvas_show_external.setVisible(False)
self.fExternalPatchbay = True

self.ui.act_canvas_show_internal.blockSignals(False)
self.ui.act_canvas_show_external.blockSignals(False)


Loading…
Cancel
Save