From bd34e47e1a4645f9a1a4dbdde097df675a65dd53 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 31 Dec 2014 22:09:24 +0000 Subject: [PATCH] Minor tweaks; Work-around issues in rncbc lv2 UIs --- source/backend/engine/CarlaEngineBridge.cpp | 8 ++++--- source/backend/plugin/CarlaPluginBridge.cpp | 2 +- source/backend/plugin/CarlaPluginLV2.cpp | 26 +++++++++++++++++---- source/bridges-plugin/CarlaBridgePlugin.cpp | 4 ++-- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/source/backend/engine/CarlaEngineBridge.cpp b/source/backend/engine/CarlaEngineBridge.cpp index 46d18184a..f4d870517 100644 --- a/source/backend/engine/CarlaEngineBridge.cpp +++ b/source/backend/engine/CarlaEngineBridge.cpp @@ -345,7 +345,7 @@ struct BridgeNonRtServerControl : public CarlaRingBufferControl { if (getAvailableDataSize() >= HugeStackBuffer::size*3/4) { - carla_stdout("Client waitIfDataIsReachingLimit() reached and waited successfully"); + //carla_stdout("Client waitIfDataIsReachingLimit() reached and waited successfully"); writeOpcode(kPluginBridgeNonRtServerPong); commitWrite(); return; @@ -768,8 +768,10 @@ public: fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterValue2); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeFloat(plugin->getParameterValue(i)); - fShmNonRtServerControl.commitWrite(); - fShmNonRtServerControl.waitIfDataIsReachingLimit(); + + // parameter outputs are not that important, we can skip some + if (! fShmNonRtServerControl.commitWrite()) + break; } } diff --git a/source/backend/plugin/CarlaPluginBridge.cpp b/source/backend/plugin/CarlaPluginBridge.cpp index 4b7903f75..b7333b90c 100644 --- a/source/backend/plugin/CarlaPluginBridge.cpp +++ b/source/backend/plugin/CarlaPluginBridge.cpp @@ -362,7 +362,7 @@ struct BridgeNonRtClientControl : public CarlaRingBufferControl { if (getAvailableDataSize() >= BigStackBuffer::size*3/4) { - carla_stdout("Server waitIfDataIsReachingLimit() reached and waited successfully"); + //carla_stdout("Server waitIfDataIsReachingLimit() reached and waited successfully"); writeOpcode(kPluginBridgeNonRtClientPing); commitWrite(); return; diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp index beecae9b8..6d2fb2d8f 100644 --- a/source/backend/plugin/CarlaPluginLV2.cpp +++ b/source/backend/plugin/CarlaPluginLV2.cpp @@ -1496,7 +1496,7 @@ public: fUI.window->idle(); // note: UI might have been closed by ext-ui or window idle - if (fUI.handle != nullptr && fExt.uiidle != nullptr && fExt.uiidle->idle(fUI.handle) != 0) + if (fUI.type != UI::TYPE_EXTERNAL && fUI.handle != nullptr && fExt.uiidle != nullptr && fExt.uiidle->idle(fUI.handle) != 0) { showCustomUI(false); pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0.0f, nullptr); @@ -5066,6 +5066,12 @@ public: } } + if (fRdfDescriptor->Author != nullptr && std::strcmp(fRdfDescriptor->Author, "rncbc aka. Rui Nuno Capela") == 0) + { + eExt = -1; + iExt = -1; + } + if (eQt4 >= 0) iFinal = eQt4; else if (eQt5 >= 0) @@ -5114,6 +5120,15 @@ public: { LV2_RDF_UI* const ui(&fRdfDescriptor->UIs[i]); + if (std::strcmp(ui->URI, "http://drumkv1.sourceforge.net/lv2#ui") == 0 || + std::strcmp(ui->URI, "http://samplv1.sourceforge.net/lv2#ui") == 0 || + std::strcmp(ui->URI, "http://synthv1.sourceforge.net/lv2#ui") == 0 ) + { + iFinal = static_cast(i); + hasShowInterface = true; + break; + } + for (uint32_t j=0; j < ui->ExtensionCount; ++j) { CARLA_SAFE_ASSERT_CONTINUE(ui->Extensions[j] != nullptr); @@ -5144,9 +5159,12 @@ public: for (uint32_t i=0; i < fUI.rdfDescriptor->FeatureCount; ++i) { - if (! is_lv2_ui_feature_supported(fUI.rdfDescriptor->Features[i].URI)) + const char* const uri(fUI.rdfDescriptor->Features[i].URI); + CARLA_SAFE_ASSERT_CONTINUE(uri != nullptr && uri[0] != '\0'); + + if (! is_lv2_ui_feature_supported(uri)) { - carla_stderr("Plugin UI requires a feature that is not supported:\n%s", fUI.rdfDescriptor->Features[i].URI); + carla_stderr("Plugin UI requires a feature that is not supported:\n%s", uri); if (LV2_IS_FEATURE_REQUIRED(fUI.rdfDescriptor->Features[i].Type)) { @@ -5154,7 +5172,7 @@ public: break; } } - if (std::strcmp(fUI.rdfDescriptor->Features[i].URI, LV2_UI__makeResident) == 0) + if (std::strcmp(uri, LV2_UI__makeResident) == 0) canDelete = false; } diff --git a/source/bridges-plugin/CarlaBridgePlugin.cpp b/source/bridges-plugin/CarlaBridgePlugin.cpp index ff9c3a81f..f9d7b11da 100644 --- a/source/bridges-plugin/CarlaBridgePlugin.cpp +++ b/source/bridges-plugin/CarlaBridgePlugin.cpp @@ -130,7 +130,7 @@ public: void initialise(const String&) override { - startTimer(15); + startTimer(8); } void shutdown() override @@ -230,7 +230,7 @@ public: for (; ! gCloseNow;) { gIdle(); - carla_msleep(15); + carla_msleep(8); } #endif