diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | lilv/lilv.h | 20 | ||||
-rw-r--r-- | src/state.c | 4 |
3 files changed, 14 insertions, 12 deletions
@@ -1,5 +1,7 @@ lilv (0.16.1) unstable; + * Allow lilv_state_restore() to be used without passing an instance, + for restoring port values via a callback only * lilvmm.hpp: Add wrappers for UI API -- David Robillard <d@drobilla.net> Tue, 19 Mar 2013 00:01:12 -0400 diff --git a/lilv/lilv.h b/lilv/lilv.h index f2dd17a..d349fb1 100644 --- a/lilv/lilv.h +++ b/lilv/lilv.h @@ -1393,21 +1393,21 @@ typedef void (*LilvSetPortValueFunc)(const char* port_symbol, /** Restore a plugin instance from a state snapshot. @param state The state to restore, which must apply to the correct plugin. - @param instance An instance of the plugin @c state applies to. + @param instance An instance of the plugin @c state applies to, or NULL. @param set_value A function to set a port value (may be NULL). @param flags Bitwise OR of LV2_State_Flags values. @param features Features to pass LV2_State_Interface.restore(). - This will set all the properties of @c instance to the values stored in @c - state. If @c set_value is provided, it will be called (with the given @c - user_data) to restore each port value, otherwise the host must restore the - port values itself (using lilv_state_get_port_value) in order to completely - restore @c state. + This will set all the properties of @c instance, if given, to the values + stored in @c state. If @c set_value is provided, it will be called (with + the given @c user_data) to restore each port value, otherwise the host must + restore the port values itself (using lilv_state_get_port_value) in order to + completely restore @c state. - If the state has properties, this function is in the "instantiation" - threading class, i.e. it MUST NOT be called simultaneously with any function - on the same plugin instance. If the state has no properties, only port - values are set via @c set_value. + If the state has properties and @c instance is given, this function is in + the "instantiation" threading class, i.e. it MUST NOT be called + simultaneously with any function on the same plugin instance. If the state + has no properties, only port values are set via @c set_value. See <a href="http://lv2plug.in/ns/ext/state/state.h">state.h</a> from the LV2 State extension for details on the @c flags and @c features parameters. diff --git a/src/state.c b/src/state.c index 9ab441f..b2953a4 100644 --- a/src/state.c +++ b/src/state.c @@ -411,8 +411,8 @@ lilv_state_restore(const LilvState* state, const LV2_Feature** sfeatures = add_features(features, &map_feature, NULL); - const LV2_Descriptor* desc = instance->lv2_descriptor; - const LV2_State_Interface* iface = (desc->extension_data) + const LV2_Descriptor* desc = instance ? instance->lv2_descriptor : NULL; + const LV2_State_Interface* iface = (desc && desc->extension_data) ? (LV2_State_Interface*)desc->extension_data(LV2_STATE__interface) : NULL; |