diff --git a/source/backend/engine/CarlaEngineBridge.cpp b/source/backend/engine/CarlaEngineBridge.cpp index 10f7f45de..bb0be55a6 100644 --- a/source/backend/engine/CarlaEngineBridge.cpp +++ b/source/backend/engine/CarlaEngineBridge.cpp @@ -1034,20 +1034,14 @@ public: for (uint32_t i=0, count=plugin->getCustomDataCount(); igetCustomData(i)); + if (std::strcmp(cdata.type, CUSTOM_DATA_TYPE_STRING) == 0 && std::strcmp(cdata.key, "CarlaLoadLv2StateNow") == 0 && std::strcmp(cdata.value, "true") == 0) + continue; + const uint32_t typeLen(static_cast(std::strlen(cdata.type))); const uint32_t keyLen(static_cast(std::strlen(cdata.key))); - - MemoryOutputStream valueMemStream; - GZIPCompressorOutputStream compressedValueStream(&valueMemStream, 9, false); - compressedValueStream.write(cdata.value, std::strlen(cdata.value)); - - const CarlaString valueBase64(CarlaString::asBase64(valueMemStream.getData(), valueMemStream.getDataSize())); - const uint32_t valueBase64Len(static_cast(valueBase64.length())); - CARLA_SAFE_ASSERT_CONTINUE(valueBase64Len > 0); + const uint32_t valueLen(static_cast(std::strlen(cdata.value))); { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); @@ -1060,10 +1054,11 @@ public: fShmNonRtServerControl.writeUInt(keyLen); fShmNonRtServerControl.writeCustomData(cdata.key, keyLen); - fShmNonRtServerControl.writeUInt(valueBase64Len); - fShmNonRtServerControl.writeCustomData(valueBase64.buffer(), valueBase64Len); + fShmNonRtServerControl.writeUInt(valueLen); + fShmNonRtServerControl.writeCustomData(cdata.value, valueLen); fShmNonRtServerControl.commitWrite(); + fShmNonRtServerControl.waitIfDataIsReachingLimit(); } } diff --git a/source/backend/plugin/CarlaPluginBridge.cpp b/source/backend/plugin/CarlaPluginBridge.cpp index c1c5b68a3..da56425e1 100644 --- a/source/backend/plugin/CarlaPluginBridge.cpp +++ b/source/backend/plugin/CarlaPluginBridge.cpp @@ -1046,18 +1046,9 @@ public: CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); - using namespace juce; - const uint32_t typeLen(static_cast(std::strlen(type))); const uint32_t keyLen(static_cast(std::strlen(key))); - - MemoryOutputStream valueMemStream; - GZIPCompressorOutputStream compressedValueStream(&valueMemStream, 9, false); - compressedValueStream.write(value, std::strlen(value)); - - const CarlaString valueBase64(CarlaString::asBase64(valueMemStream.getData(), valueMemStream.getDataSize())); - const uint32_t valueBase64Len(static_cast(valueBase64.length())); - CARLA_SAFE_ASSERT_RETURN(valueBase64.length() > 0,); + const uint32_t valueLen(static_cast(std::strlen(value))); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); @@ -1070,8 +1061,8 @@ public: fShmNonRtClientControl.writeUInt(keyLen); fShmNonRtClientControl.writeCustomData(key, keyLen); - fShmNonRtClientControl.writeUInt(valueBase64Len); - fShmNonRtClientControl.writeCustomData(valueBase64.buffer(), valueBase64Len); + fShmNonRtClientControl.writeUInt(valueLen); + fShmNonRtClientControl.writeCustomData(value, valueLen); fShmNonRtClientControl.commitWrite(); } @@ -2179,9 +2170,7 @@ public: } break; case kPluginBridgeNonRtServerSetCustomData: { - // uint/size, str[], uint/size, str[], uint/size, str[] (compressed) - - using namespace juce; + // uint/size, str[], uint/size, str[], uint/size, str[] // type const uint32_t typeSize(fShmNonRtServerControl.readUInt()); @@ -2196,17 +2185,12 @@ public: fShmNonRtServerControl.readCustomData(key, keySize); // value - const uint32_t valueBase64Size(fShmNonRtServerControl.readUInt()); - char valueBase64[valueBase64Size+1]; - carla_zeroChar(valueBase64, valueBase64Size+1); - fShmNonRtServerControl.readCustomData(valueBase64, valueBase64Size); - - const std::vector valueChunk(carla_getChunkFromBase64String(valueBase64)); - - MemoryInputStream valueMemStream(valueChunk.data(), valueChunk.size(), false); - GZIPDecompressorInputStream decompressedValueStream(valueMemStream); + const uint32_t valueSize(fShmNonRtServerControl.readUInt()); + char value[valueSize+1]; + carla_zeroChar(value, valueSize+1); + fShmNonRtServerControl.readCustomData(value, valueSize); - CarlaPlugin::setCustomData(type, key, decompressedValueStream.readEntireStreamAsString().toRawUTF8(), false); + CarlaPlugin::setCustomData(type, key, value, false); } break; case kPluginBridgeNonRtServerSetChunkDataFile: { diff --git a/source/utils/CarlaBridgeUtils.hpp b/source/utils/CarlaBridgeUtils.hpp index bd4b00bbe..f32193362 100644 --- a/source/utils/CarlaBridgeUtils.hpp +++ b/source/utils/CarlaBridgeUtils.hpp @@ -56,7 +56,7 @@ enum PluginBridgeNonRtClientOpcode { kPluginBridgeNonRtClientSetParameterMidiCC, // uint, short kPluginBridgeNonRtClientSetProgram, // int kPluginBridgeNonRtClientSetMidiProgram, // int - kPluginBridgeNonRtClientSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[] (base64, compressed) + kPluginBridgeNonRtClientSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[] kPluginBridgeNonRtClientSetChunkDataFile, // uint/size, str[] (filename, base64 content) kPluginBridgeNonRtClientSetCtrlChannel, // short kPluginBridgeNonRtClientSetOption, // uint/option, bool @@ -92,7 +92,7 @@ enum PluginBridgeNonRtServerOpcode { kPluginBridgeNonRtServerCurrentMidiProgram, // int/index kPluginBridgeNonRtServerProgramName, // uint/index, uint/size, str[] (name) kPluginBridgeNonRtServerMidiProgramData, // uint/index, uint/bank, uint/program, uint/size, str[] (name) - kPluginBridgeNonRtServerSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[] (base64, compressed) + kPluginBridgeNonRtServerSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[] kPluginBridgeNonRtServerSetChunkDataFile, // uint/size, str[] (filename, base64 content) kPluginBridgeNonRtServerSetLatency, // uint kPluginBridgeNonRtServerReady,