Browse Source

JACK: update metadata plugin id when changed

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.1-rc2
falkTX 5 years ago
parent
commit
f781db3bb3
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
2 changed files with 62 additions and 2 deletions
  1. +2
    -2
      source/backend/CarlaEngine.hpp
  2. +60
    -0
      source/backend/engine/CarlaEngineJack.cpp

+ 2
- 2
source/backend/CarlaEngine.hpp View File

@@ -978,7 +978,7 @@ public:
* Remove plugin with id @a id.
* @see ENGINE_CALLBACK_PLUGIN_REMOVED
*/
bool removePlugin(uint id);
virtual bool removePlugin(uint id);

/*!
* Remove all plugins.
@@ -1009,7 +1009,7 @@ public:
/*!
* Switch plugins with id @a idA and @a idB.
*/
bool switchPlugins(uint idA, uint idB) noexcept;
virtual bool switchPlugins(uint idA, uint idB) noexcept;
#endif

/*!


+ 60
- 0
source/backend/engine/CarlaEngineJack.cpp View File

@@ -1041,6 +1041,24 @@ public:
fJackClient = newClient;
}

void setNewPluginId(const uint id) const
{
if (const char* const uuidchar = jackbridge_client_get_uuid(fJackClient))
{
jack_uuid_t uuid;

if (jackbridge_uuid_parse(uuidchar, &uuid))
{
char buf[32];
std::snprintf(buf, 32, "%u", id);
jackbridge_set_property(fJackClient, uuid,
"https://kx.studio/ns/carla/plugin-id",
buf,
"http://www.w3.org/2001/XMLSchema#integer");
}
}
}

private:
jack_client_t* fJackClient;
const bool fUseClient;
@@ -1710,6 +1728,48 @@ public:
}

#ifndef BUILD_BRIDGE
bool removePlugin(const uint id) override
{
if (! CarlaEngine::removePlugin(id))
return false;

for (uint i=id; i < pData->curPluginCount; ++i)
{
CarlaPlugin* const plugin = pData->plugins[i].plugin;
CARLA_SAFE_ASSERT_BREAK(plugin != nullptr);

CarlaEngineJackClient* const client = dynamic_cast<CarlaEngineJackClient*>(plugin->getEngineClient());
CARLA_SAFE_ASSERT_BREAK(client != nullptr);

client->setNewPluginId(i);
}

return true;
}

bool switchPlugins(const uint idA, const uint idB) noexcept override
{
if (! CarlaEngine::switchPlugins(idA, idB))
return false;

CarlaPlugin* const newPluginA(pData->plugins[idA].plugin);
CARLA_SAFE_ASSERT_RETURN(newPluginA != nullptr, true);

CarlaPlugin* const newPluginB(pData->plugins[idB].plugin);
CARLA_SAFE_ASSERT_RETURN(newPluginB != nullptr, true);

CarlaEngineJackClient* const clientA = dynamic_cast<CarlaEngineJackClient*>(newPluginA->getEngineClient());
CARLA_SAFE_ASSERT_RETURN(clientA != nullptr, true);

CarlaEngineJackClient* const clientB = dynamic_cast<CarlaEngineJackClient*>(newPluginB->getEngineClient());
CARLA_SAFE_ASSERT_RETURN(clientB != nullptr, true);

clientA->setNewPluginId(idA);
clientB->setNewPluginId(idB);

return true;
}

bool renamePlugin(const uint id, const char* const newName) override
{
if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK ||


Loading…
Cancel
Save