[SCM] calf/master: Persist extension 0.2
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:40:37 UTC 2013
The following commit has been merged in the master branch:
commit 71d1071e9c70a350d92c451c15bbe90f0f79952e
Author: David Robillard <d at drobilla.net>
Date: Tue Mar 29 17:29:57 2011 -0400
Persist extension 0.2
From the original mail:
Well, it seems clear the subject parameter is a can of worms. I have
removed it. It is still possible to express resources as objects by
using a specific value type for them (e.g. a dictionary). This is more
inline with how implementations would work with such things anyway (and
there are Atom types for this).
diff --git a/src/calf/Makefile.am b/src/calf/Makefile.am
index 9f3c6bf..2518fec 100644
--- a/src/calf/Makefile.am
+++ b/src/calf/Makefile.am
@@ -4,7 +4,7 @@ noinst_HEADERS = audio_fx.h benchmark.h biquad.h buffer.h custom_ctl.h \
gui.h gui_config.h gui_controls.h inertia.h jackhost.h \
host_session.h ladspa_wrap.h loudness.h \
lv2_data_access.h lv2_event.h lv2_external_ui.h \
- lv2_persist.h lv2_persist2.h lv2_progress.h lv2_ui.h lv2_uri_map.h lv2helpers.h lv2wrap.h \
+ lv2_persist.h lv2_progress.h lv2_ui.h lv2_uri_map.h lv2helpers.h lv2wrap.h \
metadata.h modmatrix.h \
modules.h modules_comp.h modules_dev.h modules_dist.h modules_eq.h modules_mod.h modules_synths.h \
modulelist.h \
diff --git a/src/calf/lv2_persist.h b/src/calf/lv2_persist.h
index 86ac865..6879a86 100644
--- a/src/calf/lv2_persist.h
+++ b/src/calf/lv2_persist.h
@@ -1,130 +1,228 @@
-// This file is in the public domain.
-// Written by Leonard Ritter <paniq at paniq.org>
+/*
+ Copyright 2010-2011 David Robillard <http://drobilla.net>
+ Copyright 2010 Leonard Ritter <paniq at paniq.org>
+
+ This header is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This header is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this header; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 01222-1307 USA
+*/
+
+/**
+ @file
+ C API for the LV2 Persist extension <http://lv2plug.in/ns/ext/persist>.
+*/
+
+#ifndef LV2_PERSIST_H
+#define LV2_PERSIST_H
-#ifndef __LV2_PERSIST_H__
-#define __LV2_PERSIST_H__
+#include <stdbool.h>
+#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
-
-/*
- Indicates that the plugin supports persistence, which means
- being able to save and restore internal state, allowing hosts to
- save configuration with a project, or to clone a plugin, including
- internal state.
-
- The plugin should always expose this feature as optional.
+
+#define LV2_PERSIST_URI "http://lv2plug.in/ns/ext/persist"
+
+/**
+ Flags describing value characteristics.
+
+ These flags are used along with the value's type URI to determine how to
+ (de-)serialise the value data, or whether it is even possible to do so.
*/
-#define LV2_PERSIST_URI "http://paniq.org/lv2/persist"
-
-/*
- Causes the host to store a binary blob in a map.
-
- A callback provided by the host to LV2_Persist.save(). 'callback_data'
- must be the callback_data argument passed to save(). 'key' is a private
- string or URI under which the data is to be stored. 'value' points to
- the binary blob to be stored. 'size' is the size of the binary blob in
- bytes.
-
- The host is expected store a copy of the blob under the provided key.
-
- A 'size' of 0 is valid. The host may choose to store nothing.
-
- A 'size' of -1 indicates that 'value' points to a zero-terminated string.
- This is a convenience function which requires the host to calculate the
- size from strlen(value)+1.
+typedef enum {
+
+ /**
+ Plain Old Data.
+
+ Values with this flag contain no references to non-persistent or
+ non-global resources (e.g. pointers, handles, local paths, etc.). It is
+ safe to copy POD values with a simple memcpy and store them for use at
+ any time in the future on a machine with a compatible architecture
+ (e.g. the same endianness and alignment).
+
+ Implementations MUST NOT attempt to copy or serialise a non-POD value if
+ they do not understand its type (and thus know how to correctly do so).
+ */
+ LV2_PERSIST_IS_POD = 1,
+
+ /**
+ Portable (architecture independent) data.
+
+ Values with this flag are in a format that is usable on any
+ architecture, i.e. if the value is saved on one machine it can safely be
+ restored on another machine regardless of endianness, alignment, etc.
+ */
+ LV2_PERSIST_IS_PORTABLE = 1 << 1
+
+} LV2_Persist_Flags;
+
+/**
+ A host-provided function to store a plugin instance property.
+ @param callback_data Must be the callback_data passed to LV2_Persist.save().
+ @param key The key (predicate) to store @a value under (URI mapped integer).
+ @param value Pointer to the value (object) to be stored.
+ @param size The size of the data at @a value in bytes.
+ @param type The type of @a value (URI).
+ @param flags LV2_Persist_Flags for @a value.
+ @return 0 on success, otherwise a non-zero error code.
+
+ The host passes a callback of this type to LV2_Persist.save(). This callback
+ is called repeatedly by the plugin within LV2_Persist.save() to store all
+ the statements that describe its current state.
+
+ The host MAY fail to store a property if the type is not understood and is
+ not LV2_PERSIST_IS_POD and/or LV2_PERSIST_IS_PORTABLE. Implementations are
+ encouraged to use POD and portable values (e.g. string literals) wherever
+ possible, and use common types (e.g. types from
+ http://lv2plug.in/ns/ext/atom) regardless, since hosts are likely to already
+ contain the necessary implementation.
+
+ Note that @a size MUST be > 0, and @a value MUST point to a valid region of
+ memory @a size bytes long (this is required to make restore unambiguous).
+
+ The plugin MUST NOT attempt to use this function outside of the
+ LV2_Persist.restore() context.
*/
-typedef void (*LV2_Persist_Store_Function)(void *callback_data, const char *key,
- const void *value, ssize_t size);
+typedef int (*LV2_Persist_Store_Function)(
+ void* callback_data,
+ uint32_t key,
+ const void* value,
+ size_t size,
+ uint32_t type,
+ uint32_t flags);
-/*
- Causes the host to retrieve a binary blob from the map.
-
- A callback provided by the host to LV2_Persist.restore(). 'callback_data'
- must be the callback_data argument passed to restore(). 'key' is a private
- string or URI under which a blob has been previously stored.
-
- When the blob could be successfully retrieved, retrieve() must return
- a pointer to the blob and set 'size' to the length of value in bytes.
-
- 'size' may be NULL. In this case, no return of the blob size is required.
- This is a convenience function to retrieve zero-terminated strings.
-
- The returned value must remain valid until restore() returns. The plugin
- is required to make a copy if it needs to continue working with the
- data. It must not attempt to access a retrieved blob pointer outside
- of the restore context.
+/**
+ A host-provided function to retrieve a property.
+ @param callback_data Must be the callback_data passed to LV2_Persist.restore().
+ @param key The key (predicate) of the property to retrieve (URI).
+ @param size (Output) If non-NULL, set to the size of the restored value.
+ @param type (Output) If non-NULL, set to the type of the restored value.
+ @param flags (Output) If non-NULL, set to the LV2_Persist_Flags for
+ the returned value.
+ @return A pointer to the restored value (object), or NULL if no value
+ has been stored under @a key.
+
+ A callback of this type is passed by the host to LV2_Persist.restore(). This
+ callback is called repeatedly by the plugin within LV2_Persist.restore() to
+ retrieve any properties it requires to restore its state.
+
+ The returned value MUST remain valid until LV2_Persist.restore() returns.
+
+ The plugin MUST NOT attempt to use this function, or any value returned from
+ it, outside of the LV2_Persist.restore() context. Returned values MAY be
+ copied for later use if necessary, assuming the plugin knows how to do so
+ correctly (e.g. the value is POD, or the plugin understands the type).
*/
-typedef const void *(*LV2_Persist_Retrieve_Function)(void *callback_data,
- const char *key, size_t *size);
+typedef const void* (*LV2_Persist_Retrieve_Function)(
+ void* callback_data,
+ uint32_t key,
+ size_t* size,
+ uint32_t* type,
+ uint32_t* flags);
-/*
- When the plugins extension_data is called with argument LV2_PERSIST_URI,
- the plugin is expected to return an LV2_Persist structure, which remains
- valid indefinitely.
-
- The host can use the exposed function pointers to save and restore
- the state of a plugin to a map of string keys to binary blobs at any
- time.
-
- The usual application would be to save the plugins state when the
- project document is to be saved, and to restore the state when
- a project document has been loaded. Other applications are possible.
-
- Blob maps are meant to be only compatible between instances of the
- same plugin. However, should a future extension require persistent
- data to follow an URI key naming scheme, this restriction no longer
- applies.
+/**
+ Persist Extension Data.
+
+ When the plugin's extension_data is called with argument LV2_PERSIST_URI,
+ the plugin MUST return an LV2_Persist structure, which remains valid for the
+ lifetime of the plugin.
+
+ The host can use the contained function pointers to save and restore the
+ state of a plugin instance at any time (provided the threading restrictions
+ for the given function are met).
+
+ The typical use case is to save the plugin's state when a project is saved,
+ and to restore the state when a project has been loaded. Other uses are
+ possible (e.g. cloning plugin instances or taking a snapshot of plugin
+ state).
+
+ Stored data is only guaranteed to be compatible between instances of plugins
+ with the same URI (i.e. if a change to a plugin would cause a fatal error
+ when restoring state saved by a previous version of that plugin, the plugin
+ URI MUST change just as it must when ports change incompatibly). Plugin
+ authors should consider this possibility, and always store sensible data
+ with meaningful types to avoid such compatibility issues in the future.
*/
-struct LV2_Persist {
- /*
- Causes the plugin to save state data which it wants to preserve
- across plugin lifetime using a store callback provided by
- the host.
-
- 'instance' is the instance handle of the plugin. 'callback_data'
- is an opaque pointer to host data, e.g. the map or file where
- the blobs are to be stored, it should be passed to 'store',
- which is a host-supplied function to store a blob. For more
- information, see LV2_Persist_Store_Function.
-
- The map on which save() operates must always be empty before
- the first call to store(). The plugin is expected to store all
- blobs of interest.
-
- The callback data pointer and store function may not be used
- beyond the scope of save().
- */
- void (*save)(LV2_Handle instance,
- LV2_Persist_Store_Function store, void *callback_data);
-
- /*
- Causes the plugin to restore state data using a retrieve callback
- provided by the host.
-
- 'instance' is the instance handle of the plugin. 'callback_data'
- is an opaque pointer to host data, e.g. the map or file where
- the blobs are to be retrieved from; it should be passed to
- 'retrieve', which is a host-supplied function to retrieve blobs.
- For more information, see LV2_Persist_Retrieve_Function.
-
- The map on which restore() operates must contain values stored
- by a plugin instance of the same class, or be empty.
-
- The plugin must gracefully fall back to a default value
- when a blob can not be retrieved. This allows the host to reset
- the plugin state with an empty map.
-
- The callback data pointer and store function may not be used
- beyond the scope of save().
- */
- void (*restore)(LV2_Handle instance,
- LV2_Persist_Retrieve_Function retrieve, void *callback_data);
-};
+typedef struct _LV2_Persist {
+
+ /**
+ Save plugin state using a host-provided @a store callback.
+
+ @param instance The instance handle of the plugin.
+ @param store The host-provided store callback.
+ @param callback_data An opaque pointer to host data, e.g. the map or
+ file where the values are to be stored. If @a store is called,
+ this MUST be passed as its callback_data parameter.
+
+ The plugin is expected to store everything necessary to completely
+ restore its state later (possibly much later, in a different process, on
+ a completely different machine, etc.)
+
+ The @a callback_data pointer and @a store function MUST NOT be used
+ beyond the scope of save().
+
+ This function has its own special threading class: it may not be called
+ concurrently with any "Instantiation" function, but it may be called
+ concurrently with functions in any other class, unless the definition of
+ that class prohibits it (e.g. it may not be called concurrently with a
+ "Discovery" function, but it may be called concurrently with an "Audio"
+ function. The plugin is responsible for any locking or lock-free
+ techniques necessary to make this possible.
+
+ Note that in the simple case where state is only modified by restore(),
+ there are no synchronization issues since save() is never called
+ concurrently with restore() (though run() may read it during a save).
+
+ Plugins that dynamically modify state while running, however, must take
+ care to do so in such a way that a concurrent call to save() will save a
+ consistent representation of plugin state for a single instant in time.
+ */
+ void (*save)(LV2_Handle instance,
+ LV2_Persist_Store_Function store,
+ void* callback_data);
+
+ /**
+ Restore plugin state using a host-provided @a retrieve callback.
+
+ @param instance The instance handle of the plugin.
+ @param retrieve The host-provided retrieve callback.
+ @param callback_data An opaque pointer to host data, e.g. the map or
+ file from which the values are to be restored. If @a retrieve is
+ called, this MUST be passed as its callback_data parameter.
+
+ The plugin MAY assume a restored value was set by a previous call to
+ LV2_Persist.save() by a plugin with the same URI.
+
+ The plugin MUST gracefully fall back to a default value when a value can
+ not be retrieved. This allows the host to reset the plugin state with an
+ empty map.
+
+ The @a callback_data pointer and @a store function MUST NOT be used
+ beyond the scope of restore().
+
+ This function is in the "Instantiation" threading class as defined by
+ LV2. This means it MUST NOT be called concurrently with any other
+ function on the same plugin instance.
+ */
+ void (*restore)(LV2_Handle instance,
+ LV2_Persist_Retrieve_Function retrieve,
+ void* callback_data);
+
+} LV2_Persist;
#ifdef __cplusplus
} /* extern "C" */
#endif
-#endif /* __LV2_PERSIST_H__ */
\ No newline at end of file
+#endif /* LV2_PERSIST_H */
diff --git a/src/calf/lv2_persist2.h b/src/calf/lv2_persist2.h
deleted file mode 100644
index 2ac4880..0000000
--- a/src/calf/lv2_persist2.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* lv2_persist.h - C header file for the LV2 Persist extension.
- * Copyright (C) 2010 Leonard Ritter <paniq at paniq.org>
- *
- * This header is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This header is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this header; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA 01222-1307 USA
- */
-
-/** @file
- * C header for the LV2 Persist extension <http://lv2plug.in/ns/ext/persist>.
- */
-
-#ifndef LV2_PERSIST_H
-#define LV2_PERSIST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LV2_PERSIST_URI "http://lv2plug.in/ns/ext/persist"
-
-/** A host-provided function to store a value under a given key.
- * @param callback_data Must be the callback_data passed to LV2_Persist.save().
- * @param key The URI key (predicate) under which the value is to be stored.
- * @param value Pointer to the value (object) to be stored.
- * @param size The size of the data at @a value in bytes.
- * @param type The type of @a value, as a URI mapped to an integer.
- *
- * The host passes a callback of this type to LV2_Persist.save(). This
- * callback is called repeatedly by the plugin within LV2_Persist.save() to
- * store all the key/value records that describe its current state.
- *
- * Unless @a type is 0, @a value is guaranteed to be POD (i.e. a region
- * of memory that does not contain pointers and can safely be copied
- * and persisted indefinitely with a simple memcpy). If @a type is 0,
- * then @a value is a reference, as defined by the LV2 Atom extension
- * <http://lv2plug.in/ns/ext/atom/>. Hosts are not required to support
- * references: a plugin MUST NOT expect a host to persist references unless
- * the host supports the feature <http://lv2plug.in/ns/ext/atom#blobSupport>.
- * Plugins SHOULD express their state entirely with POD values.
- *
- * Note that @a size MUST be > 0, and @a value MUST point to a valid region of
- * memory @a size bytes long (this is required to make restore unambiguous).
- *
- * The plugin MUST NOT attempt to use this function outside of the
- * LV2_Persist.restore() context.
- */
-typedef void (*LV2_Persist_Store_Function)(
- void* callback_data,
- const char* key,
- const void* value,
- size_t size,
- uint32_t type);
-
-/** A host-provided function to retrieve a value under a given key.
- * @param callback_data Must be the callback_data passed to LV2_Persist.restore().
- * @param key The URI key (predicate) under which a value has been stored.
- * @param size (Output) If non-NULL, set to the size of the restored value.
- * @param type (Output) If non-NULL, set to the type of the restored value.
- * @return A pointer to the restored value (object), or NULL if no value
- * has been stored under @a key.
- *
- * A callback of this type is passed by the host to LV2_Persist.restore(). This
- * callback is called repeatedly by the plugin within LV2_Persist.restore() to
- * retrieve the values of any keys it requires to restore its state.
- *
- * The returned value MUST remain valid until LV2_Persist.restore() returns.
- *
- * The plugin MUST NOT attempt to use this function, or any value returned from
- * it, outside of the LV2_Persist.restore() context. Returned values MAY be
- * copied for later use if necessary.
- */
-typedef const void* (*LV2_Persist_Retrieve_Function)(
- void* callback_data,
- const char* key,
- size_t* size,
- uint32_t* type);
-
-/** When the plugin's extension_data is called with argument LV2_PERSIST_URI,
- * the plugin MUST return an LV2_Persist structure, which remains valid for
- * the lifetime of the plugin.
- *
- * The host can use the contained function pointers to save and restore the
- * state of a plugin instance at any time (provided the threading restrictions
- * for the given function are met).
- *
- * The typical use case is to save the plugin's state when a project is
- * saved, and to restore the state when a project has been loaded. Other
- * uses are possible (e.g. cloning plugin instances or taking a snapshot
- * of plugin state).
- *
- * Stored data is only guaranteed to be compatible between instances of plugins
- * with the same URI (i.e. if a change to a plugin would cause a fatal error
- * when restoring state saved by a previous version of that plugin, the plugin
- * URI must change just as it must when a plugin's ports change). Plugin
- * authors should consider this possibility, and always store sensible data
- * with meaningful types to avoid such compatibility issues in the future.
- */
-typedef struct _LV2_Persist {
-
- /** Save plugin state using a host-provided @a store callback.
- *
- * @param instance The instance handle of the plugin.
- * @param store The host-provided store callback.
- * @param callback_data An opaque pointer to host data, e.g. the map or
- * file where the values are to be stored. If @a store is called,
- * this MUST be passed as its callback_data parameter.
- *
- * The plugin is expected to store everything necessary to completely
- * restore its state later (possibly much later, in a different
- * process, on a completely different machine, etc.)
- *
- * The @a callback_data pointer and @a store function MUST NOT be
- * used beyond the scope of save().
- *
- * This function has its own special threading class: it may not be
- * called concurrently with any "Instantiation" function, but it
- * may be called concurrently with functions in any other class,
- * unless the definition of that class prohibits it (e.g. it may
- * not be called concurrently with a "Discovery" function, but it
- * may be called concurrently with an "Audio" function. The plugin
- * is responsible for any locking or lock-free techniques necessary
- * to make this possible.
- *
- * Note that in the simple case where state is only modified by
- * restore(), there are no synchronization issues since save() is
- * never called concurrently with restore() (though run() may read
- * it during a save).
- *
- * Plugins that dynamically modify state while running, however,
- * must take care to do so in such a way that a concurrent call to
- * save() will save a consistent representation of plugin state for a
- * single instant in time. The simplest way to do this is to modify a
- * copy of the state map and atomically swap a pointer to the entire
- * map once the changes are complete (for very large state maps,
- * a purely functional map data structure may be more appropriate
- * since a complete copy is not necessary).
- */
- void (*save)(LV2_Handle instance,
- LV2_Persist_Store_Function store,
- void* callback_data);
-
- /** Restore plugin state using a host-provided @a retrieve callback.
- *
- * @param instance The instance handle of the plugin.
- * @param retrieve The host-provided retrieve callback.
- * @param callback_data An opaque pointer to host data, e.g. the map or
- * file from which the values are to be restored. If @a retrieve is
- * called, this MUST be passed as its callback_data parameter.
- *
- * The plugin MAY assume a restored value was set by a previous call to
- * LV2_Persist.save() by a plugin with the same URI.
- *
- * The plugin MUST gracefully fall back to a default value when a
- * value can not be retrieved. This allows the host to reset the
- * plugin state with an empty map.
- *
- * The @a callback_data pointer and @a store function MUST NOT be used
- * beyond the scope of restore().
- *
- * This function is in the "Instantiation" threading class as defined
- * by LV2. This means it MUST NOT be called concurrently with any other
- * function on the same plugin instance.
- */
- void (*restore)(LV2_Handle instance,
- LV2_Persist_Retrieve_Function retrieve,
- void* callback_data);
-
-} LV2_Persist;
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* LV2_PERSIST_H */
diff --git a/src/calf/lv2wrap.h b/src/calf/lv2wrap.h
index 35f746b..d4ae1ed 100644
--- a/src/calf/lv2wrap.h
+++ b/src/calf/lv2wrap.h
@@ -28,7 +28,7 @@
#include <lv2.h>
#include <calf/giface.h>
#include <calf/lv2_event.h>
-#include <calf/lv2_persist2.h>
+#include <calf/lv2_persist.h>
#include <calf/lv2_progress.h>
#include <calf/lv2_uri_map.h>
#include <string.h>
@@ -92,13 +92,15 @@ struct lv2_instance: public plugin_ctl_iface, public progress_report_iface
if (!vars)
return;
assert(uri_map);
- uint32_t string_type = uri_map->uri_to_id(uri_map, NULL, "http://lv2plug.in/ns/ext/atom#String");
+ uint32_t string_type = uri_map->uri_to_id(uri_map, NULL, "http://www.w3.org/2001/XMLSchema#string");
assert(string_type);
for (unsigned int i = 0; vars[i]; i++)
{
- size_t len = 0;
- uint32_t type = 0;
- const void *ptr = (*retrieve)(callback_data, vars[i], &len, &type);
+ const uint32_t key = uri_map->uri_to_id(uri_map, NULL, vars[i]);
+ size_t len = 0;
+ uint32_t type = 0;
+ uint32_t flags = 0;
+ const void *ptr = (*retrieve)(callback_data, key, &len, &type, &flags);
if (ptr)
{
if (type != string_type)
@@ -303,19 +305,26 @@ struct lv2_wrapper
{
LV2_Persist_Store_Function store;
void *callback_data;
+ instance *inst;
uint32_t string_data_type;
virtual void send_configure(const char *key, const char *value)
{
- (*store)(callback_data, key, value, strlen(value) + 1, string_data_type);
+ (*store)(callback_data,
+ inst->uri_map->uri_to_id(inst->uri_map, NULL, key),
+ value,
+ strlen(value) + 1,
+ string_data_type,
+ LV2_PERSIST_IS_POD|LV2_PERSIST_IS_PORTABLE);
}
};
- // A host that supports a Persist extension should support an URI map extension as well.
+ // A host that supports Persist MUST support URI-Map as well.
assert(inst->uri_map);
store_state s;
s.store = store;
s.callback_data = callback_data;
- s.string_data_type = inst->uri_map->uri_to_id(inst->uri_map, NULL, "http://lv2plug.in/ns/ext/atom#String");
+ s.inst = inst;
+ s.string_data_type = inst->uri_map->uri_to_id(inst->uri_map, NULL, "http://www.w3.org/2001/XMLSchema#string");
inst->send_configures(&s);
}
diff --git a/src/makerdf.cpp b/src/makerdf.cpp
index 3515234..437309b 100644
--- a/src/makerdf.cpp
+++ b/src/makerdf.cpp
@@ -23,7 +23,7 @@
#if USE_LV2
#include <lv2.h>
#include <calf/lv2_event.h>
-#include <calf/lv2_persist2.h>
+#include <calf/lv2_persist.h>
#include <calf/lv2_uri_map.h>
#endif
#include <getopt.h>
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list