| @@ -1034,20 +1034,14 @@ public: | |||
| for (uint32_t i=0, count=plugin->getCustomDataCount(); i<count; ++i) | |||
| { | |||
| using namespace juce; | |||
| 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 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); | |||
| @@ -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(); | |||
| } | |||
| } | |||
| @@ -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<uint32_t>(std::strlen(type))); | |||
| 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); | |||
| @@ -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<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; | |||
| case kPluginBridgeNonRtServerSetChunkDataFile: { | |||
| @@ -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, | |||