@@ -93,14 +93,14 @@ CARLA_ENGINE_THREAD_HPP = $(CWD)/backend/engine/CarlaEngineThread.hpp $ | |||||
CARLA_ENGINE_INTERNAL_HPP = $(CWD)/backend/engine/CarlaEngineInternal.hpp $(CARLA_ENGINE_OSC_HPP) $(CARLA_ENGINE_THREAD_HPP) $(CARLA_ENGINE_UTILS_HPP) | CARLA_ENGINE_INTERNAL_HPP = $(CWD)/backend/engine/CarlaEngineInternal.hpp $(CARLA_ENGINE_OSC_HPP) $(CARLA_ENGINE_THREAD_HPP) $(CARLA_ENGINE_UTILS_HPP) | ||||
CARLA_ENGINE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BINARY_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP) | CARLA_ENGINE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BINARY_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP) | ||||
CARLA_ENGINE_BRIDGE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP) | |||||
CARLA_ENGINE_BRIDGE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BASE64_UTILS_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP) | |||||
CARLA_ENGINE_CLIENT_CPP_DEPS = $(CARLA_ENGINE_UTILS_HPP) | CARLA_ENGINE_CLIENT_CPP_DEPS = $(CARLA_ENGINE_UTILS_HPP) | ||||
CARLA_ENGINE_DATA_CPP_DEPS = $(CARLA_ENGINE_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) | CARLA_ENGINE_DATA_CPP_DEPS = $(CARLA_ENGINE_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) | ||||
CARLA_ENGINE_GRAPH_CPP_DEPS = $(CARLA_ENGINE_GRAPH_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) | CARLA_ENGINE_GRAPH_CPP_DEPS = $(CARLA_ENGINE_GRAPH_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) | ||||
CARLA_ENGINE_INTERNAL_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) | CARLA_ENGINE_INTERNAL_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) | ||||
CARLA_ENGINE_JACK_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) $(CARLA_PATCHBAY_UTILS_HPP) $(JACK_BRIDGE_HPP) | CARLA_ENGINE_JACK_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) $(CARLA_PATCHBAY_UTILS_HPP) $(JACK_BRIDGE_HPP) | ||||
CARLA_ENGINE_JUCE_CPP_DEPS = $(CARLA_ENGINE_GRAPH_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_STRING_LIST_HPP) $(RT_LINKED_LIST_HPP) | CARLA_ENGINE_JUCE_CPP_DEPS = $(CARLA_ENGINE_GRAPH_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_STRING_LIST_HPP) $(RT_LINKED_LIST_HPP) | ||||
CARLA_ENGINE_NATIVE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BASE64_UTILS_HPP) $(CARLA_BINARY_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_EXTERNAL_UI_HPP) $(CARLA_NATIVE_HPP) $(CARLA_PLUGIN_UI_CPP) $(CARLA_DSSI_UTILS_CPP) $(CARLA_STATE_UTILS_CPP) | |||||
CARLA_ENGINE_NATIVE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BASE64_UTILS_HPP) $(CARLA_BINARY_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_EXTERNAL_UI_HPP) $(CARLA_NATIVE_HPP) $(CARLA_PLUGIN_UI_CPP) $(CARLA_DSSI_UTILS_CPP) $(CARLA_STATE_UTILS_CPP) | |||||
CARLA_ENGINE_OSC_CPP_DEPS = $(CARLA_ENGINE_HPP) $(CARLA_ENGINE_OSC_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MIDI_H) | CARLA_ENGINE_OSC_CPP_DEPS = $(CARLA_ENGINE_HPP) $(CARLA_ENGINE_OSC_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MIDI_H) | ||||
CARLA_ENGINE_OSC_SEND_CPP_DEPS = $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_MIDI_H) | CARLA_ENGINE_OSC_SEND_CPP_DEPS = $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_MIDI_H) | ||||
CARLA_ENGINE_PORTS_CPP_DEPS = $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) | CARLA_ENGINE_PORTS_CPP_DEPS = $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) | ||||
@@ -129,7 +129,7 @@ CARLA_PLUGIN_THREAD_HPP = $(CWD)/backend/plugin/CarlaPluginThread.hpp $ | |||||
CARLA_PLUGIN_INTERNAL_HPP = $(CWD)/backend/plugin/CarlaPluginInternal.hpp $(CARLA_PLUGIN_HPP) $(CARLA_PLUGIN_THREAD_HPP) $(CARLA_OSC_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_MUTEX_HPP) $(RT_LINKED_LIST_HPP) $(CARLA_MIDI_H) | CARLA_PLUGIN_INTERNAL_HPP = $(CWD)/backend/plugin/CarlaPluginInternal.hpp $(CARLA_PLUGIN_HPP) $(CARLA_PLUGIN_THREAD_HPP) $(CARLA_OSC_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_MUTEX_HPP) $(RT_LINKED_LIST_HPP) $(CARLA_MIDI_H) | ||||
AU_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_HPP) $(CARLA_ENGINE_HPP) $(CARLA_UTILS_HPP) | AU_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_HPP) $(CARLA_ENGINE_HPP) $(CARLA_UTILS_HPP) | ||||
BRIDGE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_SHM_UTILS_HPP) $(JACK_BRIDGE_HPP) | |||||
BRIDGE_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BASE64_UTILS_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_SHM_UTILS_HPP) $(JACK_BRIDGE_HPP) | |||||
CARLA_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BASE64_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_PLUGIN_UI_HPP) | CARLA_PLUGIN_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BASE64_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_PLUGIN_UI_HPP) | ||||
CARLA_PLUGIN_INTERNAL_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LIB_COUNTER_HPP) $(CARLA_MATH_UTILS_HPP) | CARLA_PLUGIN_INTERNAL_CPP_DEPS = $(CARLA_PLUGIN_INTERNAL_HPP) $(CARLA_ENGINE_HPP) $(CARLA_LIB_COUNTER_HPP) $(CARLA_MATH_UTILS_HPP) | ||||
CARLA_PLUGIN_THREAD_CPP_DEPS = $(CARLA_PLUGIN_HPP) $(CARLA_PLUGIN_THREAD_HPP) $(CARLA_ENGINE_HPP) | CARLA_PLUGIN_THREAD_CPP_DEPS = $(CARLA_PLUGIN_HPP) $(CARLA_PLUGIN_THREAD_HPP) $(CARLA_ENGINE_HPP) | ||||
@@ -23,6 +23,7 @@ | |||||
#include "CarlaPlugin.hpp" | #include "CarlaPlugin.hpp" | ||||
#include "CarlaBackendUtils.hpp" | #include "CarlaBackendUtils.hpp" | ||||
#include "CarlaBase64Utils.hpp" | |||||
#include "CarlaBridgeUtils.hpp" | #include "CarlaBridgeUtils.hpp" | ||||
#include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
@@ -500,22 +501,22 @@ public: | |||||
if (plugin == nullptr || ! plugin->isEnabled()) break; | if (plugin == nullptr || ! plugin->isEnabled()) break; | ||||
String chunkFilePath(chunkFilePathTry); | String chunkFilePath(chunkFilePathTry); | ||||
#ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||
// check if running under Wine | |||||
if (chunkFilePath.startsWith("/")) | if (chunkFilePath.startsWith("/")) | ||||
{ | |||||
// running under Wine, posix host | |||||
chunkFilePath = chunkFilePath.replaceSection(0, 1, "Z:\\").replace("/", "\\"); | chunkFilePath = chunkFilePath.replaceSection(0, 1, "Z:\\").replace("/", "\\"); | ||||
} | |||||
#endif | #endif | ||||
File chunkFile(chunkFilePath); | File chunkFile(chunkFilePath); | ||||
CARLA_SAFE_ASSERT_BREAK(chunkFile.existsAsFile()); | CARLA_SAFE_ASSERT_BREAK(chunkFile.existsAsFile()); | ||||
MemoryBlock memBlock; | |||||
chunkFile.loadFileAsData(memBlock); | |||||
String chunkDataBase64(chunkFile.loadFileAsString()); | |||||
chunkFile.deleteFile(); | chunkFile.deleteFile(); | ||||
CARLA_SAFE_ASSERT_BREAK(chunkDataBase64.isNotEmpty()); | |||||
CARLA_SAFE_ASSERT_BREAK(memBlock.getSize() > 0); | |||||
plugin->setChunkData(memBlock.getData(), memBlock.getSize()); | |||||
std::vector<uint8_t> chunk(carla_getChunkFromBase64String(chunkDataBase64.toRawUTF8())); | |||||
plugin->setChunkData(chunk.data(), chunk.size()); | |||||
break; | break; | ||||
} | } | ||||
@@ -555,13 +556,16 @@ public: | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_BREAK(data != nullptr); | CARLA_SAFE_ASSERT_BREAK(data != nullptr); | ||||
CarlaString dataBase64 = CarlaString::asBase64(data, dataSize); | |||||
CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0,); | |||||
String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | ||||
filePath += OS_SEP_STR; | filePath += OS_SEP_STR; | ||||
filePath += ".CarlaChunk_"; | filePath += ".CarlaChunk_"; | ||||
filePath += fShmAudioPool.filename.buffer() + 18; | |||||
filePath += fShmNonRtControl.filename.buffer() + 24; | |||||
if (File(filePath).replaceWithData(data, dataSize)) | |||||
if (File(filePath).replaceWithText(dataBase64.buffer())) | |||||
oscSend_bridge_set_chunk_data_file(filePath.toRawUTF8()); | oscSend_bridge_set_chunk_data_file(filePath.toRawUTF8()); | ||||
} | } | ||||
} | } | ||||
@@ -21,6 +21,7 @@ | |||||
#ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
#include "CarlaBackendUtils.hpp" | #include "CarlaBackendUtils.hpp" | ||||
#include "CarlaBase64Utils.hpp" | |||||
#include "CarlaBridgeUtils.hpp" | #include "CarlaBridgeUtils.hpp" | ||||
#include "CarlaMathUtils.hpp" | #include "CarlaMathUtils.hpp" | ||||
#include "CarlaShmUtils.hpp" | #include "CarlaShmUtils.hpp" | ||||
@@ -57,7 +58,6 @@ | |||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
using juce::File; | using juce::File; | ||||
using juce::MemoryBlock; | |||||
using juce::String; | using juce::String; | ||||
using juce::StringArray; | using juce::StringArray; | ||||
@@ -379,6 +379,8 @@ public: | |||||
fShmNonRtControl.clear(); | fShmNonRtControl.clear(); | ||||
clearBuffers(); | clearBuffers(); | ||||
fInfo.chunk.clear(); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -424,10 +426,10 @@ public: | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS, 0); | CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS, 0); | ||||
CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); | CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); | ||||
CARLA_SAFE_ASSERT_RETURN(fInfo.chunk.getSize() > 0, 0); | |||||
CARLA_SAFE_ASSERT_RETURN(fInfo.chunk.size() > 0, 0); | |||||
*dataPtr = fInfo.chunk.getData(); | |||||
return fInfo.chunk.getSize(); | |||||
*dataPtr = fInfo.chunk.data(); | |||||
return fInfo.chunk.size(); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -659,13 +661,16 @@ public: | |||||
CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); | CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); | ||||
CarlaString dataBase64 = CarlaString::asBase64(data, dataSize); | |||||
CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0,); | |||||
String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); | ||||
filePath += OS_SEP_STR; | filePath += OS_SEP_STR; | ||||
filePath += ".CarlaChunk_"; | filePath += ".CarlaChunk_"; | ||||
filePath += fShmAudioPool.filename.buffer() + 18; | filePath += fShmAudioPool.filename.buffer() + 18; | ||||
if (File(filePath).replaceWithData(data, dataSize)) | |||||
if (File(filePath).replaceWithText(dataBase64.buffer())) | |||||
{ | { | ||||
const uint32_t ulength(static_cast<uint32_t>(filePath.length())); | const uint32_t ulength(static_cast<uint32_t>(filePath.length())); | ||||
@@ -1753,9 +1758,9 @@ public: | |||||
if (chunkFile.existsAsFile()) | if (chunkFile.existsAsFile()) | ||||
{ | { | ||||
fInfo.chunk.reset(); | |||||
chunkFile.loadFileAsData(fInfo.chunk); | |||||
fInfo.chunk = carla_getChunkFromBase64String(chunkFile.loadFileAsString().toRawUTF8()); | |||||
chunkFile.deleteFile(); | chunkFile.deleteFile(); | ||||
carla_stderr("chunk data final"); | |||||
} | } | ||||
break; | break; | ||||
} | } | ||||
@@ -2030,7 +2035,7 @@ private: | |||||
CarlaString label; | CarlaString label; | ||||
CarlaString maker; | CarlaString maker; | ||||
CarlaString copyright; | CarlaString copyright; | ||||
MemoryBlock chunk; | |||||
std::vector<uint8_t> chunk; | |||||
Info() | Info() | ||||
: aIns(0), | : aIns(0), | ||||
@@ -509,7 +509,7 @@ const StateSave& CarlaPlugin::getStateSave() | |||||
if (data != nullptr && dataSize > 0) | if (data != nullptr && dataSize > 0) | ||||
{ | { | ||||
pData->stateSave.chunk = CarlaString::asBase64(data, static_cast<std::size_t>(dataSize)).dup(); | |||||
pData->stateSave.chunk = CarlaString::asBase64(data, dataSize).dup(); | |||||
// Don't save anything else if using chunks | // Don't save anything else if using chunks | ||||
return pData->stateSave; | return pData->stateSave; | ||||
@@ -305,10 +305,10 @@ bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* cons | |||||
#if defined(CARLA_OS_MAC) | #if defined(CARLA_OS_MAC) | ||||
return true; | return true; | ||||
(void)pid; | |||||
(void)pid; (void)centerUI; | |||||
#elif defined(CARLA_OS_WIN) | #elif defined(CARLA_OS_WIN) | ||||
return true; | return true; | ||||
(void)pid; | |||||
(void)pid; (void)centerUI; | |||||
#elif defined(HAVE_X11) | #elif defined(HAVE_X11) | ||||
struct ScopedDisplay { | struct ScopedDisplay { | ||||
Display* display; | Display* display; | ||||