From feacbe3ad18e1a918debd3359de414c8ccde48bc Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 25 Mar 2019 23:38:27 +0100 Subject: [PATCH] Cleanup inline data and other last commits Signed-off-by: falkTX --- source/backend/plugin/CarlaPluginLV2.cpp | 5 +-- source/backend/plugin/CarlaPluginNative.cpp | 31 +++++++++++++++++++ source/includes/CarlaNative.hpp | 7 +++++ .../distrho/src/DistrhoPluginCarla.cpp | 2 +- source/native-plugins/bigmeter.cpp | 31 +++++++++++++++++++ 5 files changed, 71 insertions(+), 5 deletions(-) diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp index 9af05fbf2..3388861ff 100644 --- a/source/backend/plugin/CarlaPluginLV2.cpp +++ b/source/backend/plugin/CarlaPluginLV2.cpp @@ -4737,11 +4737,8 @@ public: if (pData->hints & PLUGIN_HAS_EXTENSION_WORKER) fExt.worker = (const LV2_Worker_Interface*)fDescriptor->extension_data(LV2_WORKER__interface); - // FIXME - // if (pData->hints & PLUGIN_HAS_EXTENSION_INLINE_DISPLAY) - { + if (pData->hints & PLUGIN_HAS_EXTENSION_INLINE_DISPLAY) fExt.inlineDisplay = (const LV2_Inline_Display_Interface*)fDescriptor->extension_data(LV2_INLINEDISPLAY__interface); - } // check if invalid if (fExt.options != nullptr && fExt.options->get == nullptr && fExt.options->set == nullptr) diff --git a/source/backend/plugin/CarlaPluginNative.cpp b/source/backend/plugin/CarlaPluginNative.cpp index ddeb31ce1..d3f161e2d 100644 --- a/source/backend/plugin/CarlaPluginNative.cpp +++ b/source/backend/plugin/CarlaPluginNative.cpp @@ -21,6 +21,7 @@ #include "CarlaMathUtils.hpp" #include "CarlaNative.h" +#include "water/misc/Time.h" #include "water/text/StringArray.h" using water::jmax; @@ -252,6 +253,7 @@ public: fIsUiAvailable(false), fIsUiVisible(false), fInlineDisplayNeedsRedraw(false), + fInlineDisplayLastRedrawTime(0), fAudioInBuffers(nullptr), fAudioOutBuffers(nullptr), fMidiEventInCount(0), @@ -291,6 +293,8 @@ public: { carla_debug("CarlaPluginNative::~CarlaPluginNative()"); + fInlineDisplayNeedsRedraw = false; + // close UI if (pData->hints & PLUGIN_HAS_CUSTOM_UI) { @@ -915,6 +919,32 @@ public: } } + void idle() override + { + if (fInlineDisplayNeedsRedraw) + { + // TESTING + CARLA_SAFE_ASSERT(pData->enabled) + CARLA_SAFE_ASSERT(!pData->engine->isAboutToClose()); + CARLA_SAFE_ASSERT(pData->client->isActive()); + + if (pData->enabled && !pData->engine->isAboutToClose() && pData->client->isActive()) + { + const int64_t timeNow = water::Time::currentTimeMillis(); + + if (timeNow - fInlineDisplayLastRedrawTime > (1000 / 30)) + { + fInlineDisplayNeedsRedraw = false; + fInlineDisplayLastRedrawTime = timeNow; + pData->engine->callback(true, true, + ENGINE_CALLBACK_INLINE_DISPLAY_REDRAW, + pData->id, + 0, 0, 0, 0.0f, nullptr); + } + } + } + } + void uiIdle() override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); @@ -2666,6 +2696,7 @@ private: bool fIsUiAvailable; bool fIsUiVisible; bool fInlineDisplayNeedsRedraw; + int64_t fInlineDisplayLastRedrawTime; float** fAudioInBuffers; float** fAudioOutBuffers; diff --git a/source/includes/CarlaNative.hpp b/source/includes/CarlaNative.hpp index 7bb0d8283..dc229d198 100644 --- a/source/includes/CarlaNative.hpp +++ b/source/includes/CarlaNative.hpp @@ -225,6 +225,13 @@ protected: pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_HOST_IDLE, 0, 0, nullptr, 0.0f); } + void hostQueueDrawInlineDisplay() + { + CARLA_SAFE_ASSERT_RETURN(pHost != nullptr,); + + pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_QUEUE_INLINE_DISPLAY, 0, 0, nullptr, 0.0f); + } + // ------------------------------------------------------------------- // Plugin parameter calls diff --git a/source/modules/distrho/src/DistrhoPluginCarla.cpp b/source/modules/distrho/src/DistrhoPluginCarla.cpp index 2a1fe068a..600e676ac 100644 --- a/source/modules/distrho/src/DistrhoPluginCarla.cpp +++ b/source/modules/distrho/src/DistrhoPluginCarla.cpp @@ -100,7 +100,7 @@ public: protected: void handleEditParameter(const uint32_t rindex, const bool touch) { - pHost->dispatcher(pHost->handle, + fHost->dispatcher(fHost->handle, NATIVE_HOST_OPCODE_UI_TOUCH_PARAMETER, static_cast(rindex), touch ? 1 : 0, diff --git a/source/native-plugins/bigmeter.cpp b/source/native-plugins/bigmeter.cpp index 4f3d70eda..3751fc6f5 100644 --- a/source/native-plugins/bigmeter.cpp +++ b/source/native-plugins/bigmeter.cpp @@ -159,6 +159,37 @@ protected: { fOutLeft = carla_findMaxNormalizedFloat(inputs[0], frames); fOutRight = carla_findMaxNormalizedFloat(inputs[1], frames); + + hostQueueDrawInlineDisplay(); + } + + // ------------------------------------------------------------------- + // Plugin dispatcher calls + + const NativeInlineDisplayImageSurface* renderInlineDisplay(const uint32_t width, const uint32_t height) override + { + CARLA_SAFE_ASSERT_RETURN(width > 0 && height > 0, nullptr); + +#if 0 + static unsigned char data[0xffff]; + + for (uint i=0; i < 0xffff-4; i+=4) + { + data[i+0] = 200; + data[i+1] = 0; + data[i+2] = 0; + data[i+3] = 255; + } + + static const NativeInlineDisplayImageSurface nidims = { + data, (int)width, (int)height, (int)width * 4, + }; + + carla_stdout("rendering bigmeter %u %u | %i %i %i %i", width, height, data[0], data[1], data[2], data[3]); + return &nidims; +#else + return nullptr; +#endif } private: