From e762a57c0d6537b9d5487e2e1679d4baea1ab442 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sun, 10 May 2020 13:03:41 +0200 Subject: [PATCH] Move AEffect updating to a function --- src/common/events.h | 18 +----------------- src/common/serialization.cpp | 17 +++++++++++++++++ src/common/serialization.h | 13 ++++++++++++- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/common/events.h b/src/common/events.h index e21c8ad9..5df65d74 100644 --- a/src/common/events.h +++ b/src/common/events.h @@ -313,23 +313,7 @@ auto passthrough_event(AEffect* plugin, F callback) { // return value, we will update values on the native VST // plugin's `AEffect` object. This is triggered by the // `audioMasterIOChanged` callback from the hosted VST plugin. - - // These are the same fields written by bitsery in the - // initialization of `PluginBridge`. I can't think of a way to - // reuse the serializer without first having to serialize - // `updated_plugin` first though. - plugin->magic = updated_plugin.magic; - plugin->numPrograms = updated_plugin.numPrograms; - plugin->numParams = updated_plugin.numParams; - plugin->numInputs = updated_plugin.numInputs; - plugin->numOutputs = updated_plugin.numOutputs; - plugin->flags = updated_plugin.flags; - plugin->initialDelay = updated_plugin.initialDelay; - plugin->empty3a = updated_plugin.empty3a; - plugin->empty3b = updated_plugin.empty3b; - plugin->unkown_float = updated_plugin.unkown_float; - plugin->uniqueID = updated_plugin.uniqueID; - plugin->version = updated_plugin.version; + update_aeffect(*plugin, updated_plugin); return nullptr; }, diff --git a/src/common/serialization.cpp b/src/common/serialization.cpp index a5403438..cb9662d3 100644 --- a/src/common/serialization.cpp +++ b/src/common/serialization.cpp @@ -91,3 +91,20 @@ std::vector& DynamicSpeakerArrangement::as_raw_data() { return speaker_arrangement_buffer; } + +AEffect& update_aeffect(AEffect& plugin, const AEffect& updated_plugin) { + plugin.magic = updated_plugin.magic; + plugin.numPrograms = updated_plugin.numPrograms; + plugin.numParams = updated_plugin.numParams; + plugin.numInputs = updated_plugin.numInputs; + plugin.numOutputs = updated_plugin.numOutputs; + plugin.flags = updated_plugin.flags; + plugin.initialDelay = updated_plugin.initialDelay; + plugin.empty3a = updated_plugin.empty3a; + plugin.empty3b = updated_plugin.empty3b; + plugin.unkown_float = updated_plugin.unkown_float; + plugin.uniqueID = updated_plugin.uniqueID; + plugin.version = updated_plugin.version; + + return plugin; +} diff --git a/src/common/serialization.h b/src/common/serialization.h index 1384190a..31153852 100644 --- a/src/common/serialization.h +++ b/src/common/serialization.h @@ -85,10 +85,21 @@ struct overload : Ts... { template overload(Ts...) -> overload; +/** + * Update an `AEffect` object, copying values from `updated_plugin` to `plugin`. + * This will copy all flags and regular values, leaving all pointers in `plugin` + * untouched. This should be updating the same values as the serialization + * function right below this. + */ +AEffect& update_aeffect(AEffect& plugin, const AEffect& updated_plugin); + /** * The serialization function for `AEffect` structs. This will s serialize all * of the values but it will not touch any of the pointer fields. That way you - * can deserialize to an existing `AEffect` instance. + * can deserialize to an existing `AEffect` instance. Since we can't always + * deserialize directly into an existing `AEffect`, there is also another + * function called `update_aeffect()` that copies values from one `AEffect` to + * another. Both of these functions should be updating the same values. */ template void serialize(S& s, AEffect& plugin) {