diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 03ed88d..f246738 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -26,6 +26,11 @@ #include "water/streams/MemoryOutputStream.h" #include "water/xml/XmlDocument.h" +extern "C" { +// private method that takes ownership, we can use it to avoid superfulous allocations +json_t *jsonp_stringn_nocheck_own(const char* value, size_t len); +} + #define BUFFER_SIZE 128 // generates a warning if this is defined as anything else @@ -221,6 +226,34 @@ struct IldaeilModule : Module { return 0; } + json_t* dataToJson() override + { + if (fCarlaHostHandle == nullptr) + return nullptr; + + CarlaEngine* const engine = carla_get_engine_from_handle(fCarlaHostHandle); + + water::MemoryOutputStream projectState; + engine->saveProjectInternal(projectState); + + const size_t dataSize = projectState.getDataSize(); + return jsonp_stringn_nocheck_own(static_cast(projectState.getDataAndRelease()), dataSize); + } + + void dataFromJson(json_t* const rootJ) override + { + if (fCarlaHostHandle == nullptr) + return; + + const char* const projectState = json_string_value(rootJ); + DISTRHO_SAFE_ASSERT_RETURN(projectState != nullptr,); + + CarlaEngine* const engine = carla_get_engine_from_handle(fCarlaHostHandle); + + water::XmlDocument xml(projectState); + engine->loadProjectInternal(xml, true); + } + void process(const ProcessArgs&) override { if (fCarlaPluginHandle == nullptr) diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index 59cbeb1..407d596 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -42,18 +42,18 @@ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/zita-resampler.a # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/eel2.a # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jsusfx.a -ifeq ($(USING_JUCE),true) -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_audio_basics.a -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_audio_processors.a -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_core.a -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_data_structures.a -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_events.a -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_graphics.a -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_gui_basics.a -ifeq ($(USING_JUCE_GUI_EXTRA),true) -CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_gui_extra.a -endif -endif +# # ifeq ($(USING_JUCE),true) +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_audio_basics.a +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_audio_processors.a +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_core.a +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_data_structures.a +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_events.a +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_graphics.a +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_gui_basics.a +# # ifeq ($(USING_JUCE_GUI_EXTRA),true) +# # CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/juce_gui_extra.a +# # endif +# # endif # ifneq ($(MACOS),true) # CARLA_EXTRA_LIBS += -Wl,--no-whole-archive -Wl,--end-group # endif