@@ -160,7 +160,7 @@ endif | |||
# -------------------------------------------------------------- | |||
# Check for optional libs (required by backend or bridges) | |||
HAVE_FFMPEG = $(shell pkg-config --exists libavcodec libavformat libavutil && pkg-config --max-version=1.9 libavcodec && echo true) | |||
HAVE_FFMPEG = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true) | |||
HAVE_GTK2 = $(shell pkg-config --exists gtk+-2.0 && echo true) | |||
HAVE_GTK3 = $(shell pkg-config --exists gtk+-3.0 && echo true) | |||
HAVE_QT4 = $(shell pkg-config --exists QtCore QtGui && echo true) | |||
@@ -784,6 +784,7 @@ typedef enum { | |||
* A patchbay client has been added. | |||
* @param pluginId Client Id | |||
* @param value1 Client icon | |||
* @param value2 Plugin Id (-1 if not a plugin) | |||
* @param valueStr Client name | |||
* @see PatchbayIcon | |||
*/ | |||
@@ -155,12 +155,6 @@ typedef struct _CarlaPluginInfo { | |||
*/ | |||
const char* iconName; | |||
/*! | |||
* Patchbay client Id for this plugin.\n | |||
* When 0, Id is considered invalid or unused. | |||
*/ | |||
int patchbayClientId; | |||
/*! | |||
* Plugin unique Id.\n | |||
* This Id is dependant on the plugin type and may sometimes be 0. | |||
@@ -183,7 +177,6 @@ typedef struct _CarlaPluginInfo { | |||
maker(nullptr), | |||
copyright(nullptr), | |||
iconName(nullptr), | |||
patchbayClientId(0), | |||
uniqueId(0) {} | |||
/*! | |||
@@ -122,12 +122,6 @@ public: | |||
*/ | |||
unsigned int getOptionsEnabled() const noexcept; | |||
/*! | |||
* Get the plugin's patchbay client id.\n | |||
* Id 0 means no client. | |||
*/ | |||
unsigned int getPatchbayClientId() const noexcept; | |||
/*! | |||
* Check if the plugin is enabled.\n | |||
* When a plugin is disabled, it will never be processed or managed in any way. | |||
@@ -1349,17 +1349,12 @@ protected: | |||
groupNameToId.setData(groupId, groupName); | |||
fUsedGroupNames.append(groupNameToId); | |||
if (jackPortFlags & JackPortIsPhysical) | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, static_cast<uint>(groupId), PATCHBAY_ICON_HARDWARE, 0, 0.0f, groupName); | |||
// hardware | |||
} | |||
else | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, static_cast<uint>(groupId), 0, 0, 0.0f, groupName); | |||
//fGroupIconsChanged.append(groupId); | |||
// "application" | |||
} | |||
int pluginId = -1; | |||
PatchbayIcon icon = (jackPortFlags & JackPortIsPhysical) ? PATCHBAY_ICON_HARDWARE : PATCHBAY_ICON_APPLICATION; | |||
findPluginIdAndIcon(groupName.getBuffer(), pluginId, icon); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, static_cast<uint>(groupId), icon, pluginId, 0.0f, groupName); | |||
} | |||
bool portIsInput = (jackPortFlags & JackPortIsInput); | |||
@@ -1724,6 +1719,51 @@ private: | |||
nameBuf[0] = '\0'; | |||
} | |||
bool findPluginIdAndIcon(const char* const clientName, int& pluginId, PatchbayIcon& icon) | |||
{ | |||
carla_debug("CarlaEngineJack::findPluginIdAndIcon(\"%s\", ...)"); | |||
for (uint i=0; i < pData->curPluginCount; ++i) | |||
{ | |||
CarlaPlugin* const plugin(pData->plugins[i].plugin); | |||
if (plugin == nullptr || ! plugin->isEnabled()) | |||
continue; | |||
const CarlaEngineJackClient* const engClient((const CarlaEngineJackClient*)plugin->getEngineClient()); | |||
CARLA_SAFE_ASSERT_CONTINUE(engClient != nullptr && engClient->fClient != nullptr); | |||
const char* const thisClientName(jackbridge_get_client_name(engClient->fClient)); | |||
CARLA_SAFE_ASSERT_CONTINUE(thisClientName != nullptr && thisClientName[0] != '\0'); | |||
if (std::strcmp(clientName, thisClientName) == 0) | |||
{ | |||
carla_stdout("CarlaEngineJack::findPluginIdAndIcon(\"%s\", ...) - found plugin, yes!!!"); | |||
pluginId = static_cast<int>(i); | |||
if (const char* const pluginIcon = plugin->getIconName()) | |||
{ | |||
if (std::strcmp(pluginIcon, "app") == 0 || std::strcmp(pluginIcon, "application") == 0) | |||
icon = PATCHBAY_ICON_APPLICATION; | |||
else if (std::strcmp(pluginIcon, "plugin") == 0) | |||
icon = PATCHBAY_ICON_PLUGIN; | |||
else if (std::strcmp(pluginIcon, "hardware") == 0) | |||
icon = PATCHBAY_ICON_HARDWARE; | |||
else if (std::strcmp(pluginIcon, "carla") == 0) | |||
icon = PATCHBAY_ICON_CARLA; | |||
else if (std::strcmp(pluginIcon, "distrho") == 0) | |||
icon = PATCHBAY_ICON_DISTRHO; | |||
else if (std::strcmp(pluginIcon, "file") == 0) | |||
icon = PATCHBAY_ICON_FILE; | |||
} | |||
return true; | |||
} | |||
} | |||
carla_stdout("CarlaEngineJack::findPluginIdAndIcon(\"%s\", ...) - nothing here..."); | |||
return false; | |||
} | |||
void initJackPatchbay(const char* const ourName) | |||
{ | |||
CARLA_SAFE_ASSERT_RETURN(fLastGroupId == 0,); | |||
@@ -1742,7 +1782,7 @@ private: | |||
groupNameToId.setData(fLastGroupId++, ourName); | |||
fUsedGroupNames.append(groupNameToId); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, 0 /* our client */, PATCHBAY_ICON_CARLA, 0, 0.0f, ourName); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, 0 /* our client */, PATCHBAY_ICON_CARLA, -1, 0.0f, ourName); | |||
} | |||
if (const char** ports = jackbridge_get_ports(fClient, nullptr, nullptr, 0)) | |||
@@ -1782,39 +1822,12 @@ private: | |||
groupNameToId.setData(groupId, groupName); | |||
fUsedGroupNames.append(groupNameToId); | |||
PatchbayIcon groupIcon = PATCHBAY_ICON_APPLICATION; | |||
int pluginId = -1; | |||
PatchbayIcon icon = (jackPortFlags & JackPortIsPhysical) ? PATCHBAY_ICON_HARDWARE : PATCHBAY_ICON_APPLICATION; | |||
#if 0 | |||
void* data = nullptr; | |||
size_t dataSize = 0; | |||
#endif | |||
if (jackPortFlags & JackPortIsPhysical) | |||
{ | |||
groupIcon = PATCHBAY_ICON_HARDWARE; | |||
} | |||
#if 0 | |||
else if (jackbridge_custom_get_data(fClient, groupName, URI_CANVAS_ICON, &data, &dataSize) && data != nullptr && dataSize != 0) | |||
{ | |||
const char* const icon((const char*)data); | |||
CARLA_ASSERT(std::strlen(icon)+1 == dataSize); | |||
if (std::strcmp(icon, "app") == 0 || std::strcmp(icon, "application") == 0) | |||
groupIcon = PATCHBAY_ICON_APPLICATION; | |||
else if (std::strcmp(icon, "hardware") == 0) | |||
groupIcon = PATCHBAY_ICON_HARDWARE; | |||
else if (std::strcmp(icon, "carla") == 0) | |||
groupIcon = PATCHBAY_ICON_CARLA; | |||
else if (std::strcmp(icon, "distrho") == 0) | |||
groupIcon = PATCHBAY_ICON_DISTRHO; | |||
else if (std::strcmp(icon, "file") == 0) | |||
groupIcon = PATCHBAY_ICON_FILE; | |||
else if (std::strcmp(icon, "plugin") == 0) | |||
groupIcon = PATCHBAY_ICON_PLUGIN; | |||
} | |||
#endif | |||
findPluginIdAndIcon(groupName.getBuffer(), pluginId, icon); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, static_cast<uint>(groupId), groupIcon, 0, 0.0f, groupName); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, static_cast<uint>(groupId), icon, pluginId, 0.0f, groupName); | |||
} | |||
bool portIsInput = (jackPortFlags & JackPortIsInput); | |||
@@ -224,7 +224,7 @@ public: | |||
// Main | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_CARLA, 0, 0, 0.0f, getName()); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_CARLA, PATCHBAY_ICON_CARLA, -1, 0.0f, getName()); | |||
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_IN1, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in1"); | |||
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_IN2, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in2"); | |||
@@ -243,7 +243,7 @@ public: | |||
else | |||
std::strncpy(strBuf, "Capture", STR_MAX); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, 0, 0, 0.0f, strBuf); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, PATCHBAY_ICON_HARDWARE, -1, 0.0f, strBuf); | |||
StringArray inputNames(fDevice->getInputChannelNames()); | |||
CARLA_ASSERT(inputNames.size() == static_cast<int>(pData->bufAudio.inCount)); | |||
@@ -268,7 +268,7 @@ public: | |||
else | |||
std::strncpy(strBuf, "Playback", STR_MAX); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, 0, 0, 0.0f, strBuf); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, PATCHBAY_ICON_HARDWARE, -1, 0.0f, strBuf); | |||
StringArray outputNames(fDevice->getOutputChannelNames()); | |||
CARLA_ASSERT(outputNames.size() == static_cast<int>(pData->bufAudio.outCount)); | |||
@@ -289,7 +289,7 @@ public: | |||
#if 0 // midi implemented yet | |||
// MIDI In | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_IN, 0, 0, 0.0f, "Readable MIDI ports"); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_IN, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Readable MIDI ports"); | |||
for (unsigned int i=0, count=fDummyMidiIn.getPortCount(); i < count; ++i) | |||
{ | |||
@@ -304,7 +304,7 @@ public: | |||
// MIDI Out | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, 0, RACK_PATCHBAY_GROUP_MIDI_OUT, 0, 0.0f, "Writable MIDI ports"); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_OUT, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Writable MIDI ports"); | |||
for (unsigned int i=0, count=fDummyMidiOut.getPortCount(); i < count; ++i) | |||
{ | |||
@@ -423,7 +423,7 @@ public: | |||
// Main | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_CARLA, 0, 0, 0.0f, getName()); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_CARLA, PATCHBAY_ICON_CARLA, -1, 0.0f, getName()); | |||
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_IN1, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in1"); | |||
callback(ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, RACK_PATCHBAY_GROUP_CARLA, RACK_PATCHBAY_PORT_AUDIO_IN2, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0.0f, "audio-in2"); | |||
@@ -440,7 +440,7 @@ public: | |||
else | |||
std::strncpy(strBuf, "Capture", STR_MAX); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, 0, 0, 0.0f, strBuf); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_IN, PATCHBAY_ICON_HARDWARE, -1, 0.0f, strBuf); | |||
for (uint i=0; i < pData->bufAudio.inCount; ++i) | |||
{ | |||
@@ -456,7 +456,7 @@ public: | |||
else | |||
std::strncpy(strBuf, "Playback", STR_MAX); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, 0, 0, 0.0f, strBuf); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_AUDIO_OUT, PATCHBAY_ICON_HARDWARE, -1, 0.0f, strBuf); | |||
for (uint i=0; i < pData->bufAudio.outCount; ++i) | |||
{ | |||
@@ -467,7 +467,7 @@ public: | |||
// MIDI In | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_IN, 0, 0, 0.0f, "Readable MIDI ports"); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_IN, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Readable MIDI ports"); | |||
for (uint i=0, count=fDummyMidiIn.getPortCount(); i < count; ++i) | |||
{ | |||
@@ -484,7 +484,7 @@ public: | |||
#if 0 // midi-out not implemented yet | |||
// MIDI Out | |||
{ | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, 0, RACK_PATCHBAY_GROUP_MIDI_OUT, 0, 0.0f, "Writable MIDI ports"); | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, RACK_PATCHBAY_GROUP_MIDI_OUT, PATCHBAY_ICON_HARDWARE, -1, 0.0f, "Writable MIDI ports"); | |||
for (unsigned int i=0, count=fDummyMidiOut.getPortCount(); i < count; ++i) | |||
{ | |||
@@ -171,11 +171,6 @@ unsigned int CarlaPlugin::getOptionsEnabled() const noexcept | |||
return pData->options; | |||
} | |||
unsigned int CarlaPlugin::getPatchbayClientId() const noexcept | |||
{ | |||
return pData->patchbayClientId; | |||
} | |||
bool CarlaPlugin::isEnabled() const noexcept | |||
{ | |||
return pData->enabled; | |||
@@ -465,7 +465,6 @@ CarlaPluginProtectedData::CarlaPluginProtectedData(CarlaEngine* const eng, const | |||
uiLib(nullptr), | |||
ctrlChannel(0), | |||
extraHints(0x0), | |||
patchbayClientId(0), | |||
transientTryCounter(0), | |||
latency(0), | |||
latencyBuffers(nullptr), | |||
@@ -242,7 +242,6 @@ struct CarlaPluginProtectedData { | |||
// misc | |||
int8_t ctrlChannel; | |||
uint extraHints; | |||
int patchbayClientId; | |||
uint transientTryCounter; | |||
// latency | |||
@@ -993,7 +993,6 @@ const CarlaPluginInfo* carla_get_plugin_info(uint pluginId) | |||
info.filename = nullptr; | |||
info.name = nullptr; | |||
info.iconName = nullptr; | |||
info.patchbayClientId = 0; | |||
info.uniqueId = 0; | |||
// cleanup | |||
@@ -1037,7 +1036,6 @@ const CarlaPluginInfo* carla_get_plugin_info(uint pluginId) | |||
info.optionsAvailable = plugin->getOptionsAvailable(); | |||
info.optionsEnabled = plugin->getOptionsEnabled(); | |||
info.patchbayClientId = plugin->getPatchbayClientId(); | |||
plugin->getLabel(strBufLabel); | |||
info.label = carla_strdup(strBufLabel); | |||
@@ -559,6 +559,7 @@ ENGINE_CALLBACK_RELOAD_ALL = 18 | |||
# A patchbay client has been added. | |||
# @param pluginId Client Id | |||
# @param value1 Client icon | |||
# @param value2 Plugin Id (-1 if not a plugin) | |||
# @param valueStr Client name | |||
# @see PatchbayIcon | |||
ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED = 19 | |||
@@ -1001,10 +1002,6 @@ class CarlaPluginInfo(Structure): | |||
# Default is "plugin". | |||
("iconName", c_char_p), | |||
# Patchbay client Id for this plugin. | |||
# When 0, Id is considered invalid or unused. | |||
("patchbayClientId", c_int), | |||
# Plugin unique Id. | |||
# This Id is dependant on the plugin type and may sometimes be 0. | |||
("uniqueId", c_long) | |||
@@ -1133,7 +1130,6 @@ PyCarlaPluginInfo = { | |||
'maker': None, | |||
'copyright': None, | |||
'iconName': None, | |||
'patchbayClientId': 0, | |||
'uniqueId': 0 | |||
} | |||