| @@ -1034,20 +1034,14 @@ public: | |||||
| for (uint32_t i=0, count=plugin->getCustomDataCount(); i<count; ++i) | for (uint32_t i=0, count=plugin->getCustomDataCount(); i<count; ++i) | ||||
| { | { | ||||
| using namespace juce; | |||||
| const CustomData& cdata(plugin->getCustomData(i)); | const CustomData& cdata(plugin->getCustomData(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<uint32_t>(std::strlen(cdata.type))); | const uint32_t typeLen(static_cast<uint32_t>(std::strlen(cdata.type))); | ||||
| const uint32_t keyLen(static_cast<uint32_t>(std::strlen(cdata.key))); | const uint32_t keyLen(static_cast<uint32_t>(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<uint32_t>(valueBase64.length())); | |||||
| CARLA_SAFE_ASSERT_CONTINUE(valueBase64Len > 0); | |||||
| const uint32_t valueLen(static_cast<uint32_t>(std::strlen(cdata.value))); | |||||
| { | { | ||||
| const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); | const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); | ||||
| @@ -1060,10 +1054,11 @@ public: | |||||
| fShmNonRtServerControl.writeUInt(keyLen); | fShmNonRtServerControl.writeUInt(keyLen); | ||||
| fShmNonRtServerControl.writeCustomData(cdata.key, 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.commitWrite(); | ||||
| fShmNonRtServerControl.waitIfDataIsReachingLimit(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1046,18 +1046,9 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); | CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); | ||||
| CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | ||||
| using namespace juce; | |||||
| const uint32_t typeLen(static_cast<uint32_t>(std::strlen(type))); | const uint32_t typeLen(static_cast<uint32_t>(std::strlen(type))); | ||||
| const uint32_t keyLen(static_cast<uint32_t>(std::strlen(key))); | const uint32_t keyLen(static_cast<uint32_t>(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<uint32_t>(valueBase64.length())); | |||||
| CARLA_SAFE_ASSERT_RETURN(valueBase64.length() > 0,); | |||||
| const uint32_t valueLen(static_cast<uint32_t>(std::strlen(value))); | |||||
| { | { | ||||
| const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); | const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); | ||||
| @@ -1070,8 +1061,8 @@ public: | |||||
| fShmNonRtClientControl.writeUInt(keyLen); | fShmNonRtClientControl.writeUInt(keyLen); | ||||
| fShmNonRtClientControl.writeCustomData(key, keyLen); | fShmNonRtClientControl.writeCustomData(key, keyLen); | ||||
| fShmNonRtClientControl.writeUInt(valueBase64Len); | |||||
| fShmNonRtClientControl.writeCustomData(valueBase64.buffer(), valueBase64Len); | |||||
| fShmNonRtClientControl.writeUInt(valueLen); | |||||
| fShmNonRtClientControl.writeCustomData(value, valueLen); | |||||
| fShmNonRtClientControl.commitWrite(); | fShmNonRtClientControl.commitWrite(); | ||||
| } | } | ||||
| @@ -2179,9 +2170,7 @@ public: | |||||
| } break; | } break; | ||||
| case kPluginBridgeNonRtServerSetCustomData: { | 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 | // type | ||||
| const uint32_t typeSize(fShmNonRtServerControl.readUInt()); | const uint32_t typeSize(fShmNonRtServerControl.readUInt()); | ||||
| @@ -2196,17 +2185,12 @@ public: | |||||
| fShmNonRtServerControl.readCustomData(key, keySize); | fShmNonRtServerControl.readCustomData(key, keySize); | ||||
| // value | // value | ||||
| const uint32_t valueBase64Size(fShmNonRtServerControl.readUInt()); | |||||
| char valueBase64[valueBase64Size+1]; | |||||
| carla_zeroChar(valueBase64, valueBase64Size+1); | |||||
| fShmNonRtServerControl.readCustomData(valueBase64, valueBase64Size); | |||||
| const std::vector<uint8_t> 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; | } break; | ||||
| case kPluginBridgeNonRtServerSetChunkDataFile: { | case kPluginBridgeNonRtServerSetChunkDataFile: { | ||||
| @@ -56,7 +56,7 @@ enum PluginBridgeNonRtClientOpcode { | |||||
| kPluginBridgeNonRtClientSetParameterMidiCC, // uint, short | kPluginBridgeNonRtClientSetParameterMidiCC, // uint, short | ||||
| kPluginBridgeNonRtClientSetProgram, // int | kPluginBridgeNonRtClientSetProgram, // int | ||||
| kPluginBridgeNonRtClientSetMidiProgram, // 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) | kPluginBridgeNonRtClientSetChunkDataFile, // uint/size, str[] (filename, base64 content) | ||||
| kPluginBridgeNonRtClientSetCtrlChannel, // short | kPluginBridgeNonRtClientSetCtrlChannel, // short | ||||
| kPluginBridgeNonRtClientSetOption, // uint/option, bool | kPluginBridgeNonRtClientSetOption, // uint/option, bool | ||||
| @@ -92,7 +92,7 @@ enum PluginBridgeNonRtServerOpcode { | |||||
| kPluginBridgeNonRtServerCurrentMidiProgram, // int/index | kPluginBridgeNonRtServerCurrentMidiProgram, // int/index | ||||
| kPluginBridgeNonRtServerProgramName, // uint/index, uint/size, str[] (name) | kPluginBridgeNonRtServerProgramName, // uint/index, uint/size, str[] (name) | ||||
| kPluginBridgeNonRtServerMidiProgramData, // uint/index, uint/bank, uint/program, 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) | kPluginBridgeNonRtServerSetChunkDataFile, // uint/size, str[] (filename, base64 content) | ||||
| kPluginBridgeNonRtServerSetLatency, // uint | kPluginBridgeNonRtServerSetLatency, // uint | ||||
| kPluginBridgeNonRtServerReady, | kPluginBridgeNonRtServerReady, | ||||