fixed custom state load/save in test plugin

This commit is contained in:
Stefano D'Angelo 2025-01-13 10:42:38 +01:00
parent 18ca2f9cb5
commit 3f55be309d

View File

@ -121,7 +121,7 @@ static void plugin_midi_msg_in(plugin *instance, size_t index, const uint8_t * d
instance->cutoff_k = data[1] < 64 ? (-0.19558034980097166f * data[1] - 2.361735109225749f) / (data[1] - 75.57552349522389f) : (393.95397927344214f - 7.660826245588588f * data[1]) / (data[1] - 139.0755234952239f);
}
static void serialize_float(char *dest, float f) {
static void serialize_float(uint8_t *dest, float f) {
union { float f; uint32_t u; } v;
v.f = f;
dest[0] = v.u & 0xff;
@ -130,30 +130,29 @@ static void serialize_float(char *dest, float f) {
dest[3] = (v.u & 0xff000000) >> 24;
}
static float parse_float(const char *data) {
static float parse_float(const uint8_t *data) {
union { float f; uint32_t u; } v;
v.u = 0;
v.u |= data[0];
v.u |= (data[1] << 8);
v.u |= (data[2] << 16);
v.u |= (data[3] << 24);
v.u = data[0];
v.u |= data[1] << 8;
v.u |= data[2] << 16;
v.u |= data[3] << 24;
return v.f;
}
static int plugin_state_save(plugin *instance) {
char data[13];
uint8_t data[13];
serialize_float(data, instance->gain);
serialize_float(data + 4, instance->delay);
serialize_float(data + 8, instance->cutoff);
data[12] = instance->bypass ? 1 : 0;
return instance->cbs.write_state(instance->cbs.handle, data, 13);
return instance->cbs.write_state(instance->cbs.handle, (const char *)data, 13);
}
static void plugin_state_load(plugin *instance, const char *data, size_t length) {
(void)length;
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_gain, parse_float(data));
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_delay, parse_float(data + 4));
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_cutoff, parse_float(data + 8));
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_bypass, data[12] ? 1.f : 0.f);
const uint8_t *d = (const uint8_t *)data;
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_gain, parse_float(d));
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_delay, parse_float(d + 4));
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_cutoff, parse_float(d + 8));
instance->cbs.load_parameter(instance->cbs.handle, plugin_parameter_bypass, d[12] ? 1.f : 0.f);
}