commit d26a66b80812eb36e0d3ff37b8b9a75521c637e2
parent ecd743283f2c0436237ebf0a4e7e462374fdb164
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date: Fri, 14 May 2021 01:09:11 +0200
Improve the parameters rescanning interface
Diffstat:
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/include/clap/ext/params.h b/include/clap/ext/params.h
@@ -84,6 +84,34 @@ typedef struct clap_plugin_params {
clap_param_value *plain_value);
} clap_plugin_params;
+enum {
+ // The parameter values did change.
+ // The host will scan the parameter value and value_to_text
+ CLAP_PARAM_RESCAN_VALUES = 1 << 0,
+
+ // The parameter info did change
+ CLAP_PARAM_RESCAN_INFO = 1 << 1,
+
+ // The parameter range did change, or enum definition did change.
+ // This change can't be performed immediately because there might be
+ // param updates pending in the host's queues.
+ // The change will apply once the host deactivates the plugin.
+ CLAP_PARAM_RESCAN_RANGES = 1 << 2,
+
+ // The parameter list did change
+ // It means that some parameters maybe added or removed,
+ // the index <-> id mapping is invalidated
+ //
+ // The plugin can't perform the parameter list change immediately:
+ // 1. the plugin sends CLAP_PARAM_RESCAN_LIST
+ // 2. the host deactivates the plugin, be aware that it may happen a bit later
+ // because the host needs to flush its parameters update queues and suspend
+ // the plugin execution in the audio engine
+ // 3. the plugin can switch to its new parameter set
+ // 4. the host activates the plugin
+ CLAP_PARAM_RESCAN_LIST = 1 << 3,
+};
+
typedef struct clap_host_params {
/* [main-thread] */
void (*touch_begin)(clap_host *host, clap_id param_id);
@@ -97,9 +125,13 @@ typedef struct clap_host_params {
// [main-thread]
void (*changed)(clap_host *host, clap_id param_id, clap_param_value plain_value);
+ // Rescan the full list of parameters according to the flags.
+ // [main-thread]
+ void (*rescan)(clap_host *host, uint32_t flags);
+
+ // Only rescan the given subset of parameters according to the flags.
// [main-thread]
- void (*rescan)(clap_host *host, bool did_parameter_list_change);
- void (*rescan_params)(clap_host *host, const uint32_t *indexes, uint32_t count);
+ void (*rescan_params)(clap_host *host, uint32_t flags, const uint32_t *indexes, uint32_t count);
} clap_host_params;
#ifdef __cplusplus