diff DPF-Prymula-audioplugins/dpf/distrho/src/lv2/lv2_rtmempool.h @ 3:84e66ea83026

DPF-Prymula-audioplugins-0.231015-2
author prymula <prymula76@outlook.com>
date Mon, 16 Oct 2023 21:53:34 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DPF-Prymula-audioplugins/dpf/distrho/src/lv2/lv2_rtmempool.h	Mon Oct 16 21:53:34 2023 +0200
@@ -0,0 +1,119 @@
+/*
+  LV2 realtime safe memory pool extension definition
+  This work is in public domain.
+
+  This file 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.
+
+  If you have questions, contact Filipe Coelho (aka falkTX) <falktx@falktx.com>
+  or ask in #lad channel, FreeNode IRC network.
+*/
+
+/**
+ * @file lv2_rtmempool.h
+ * C header for the LV2 rtmempool extension <http://kxstudio.sf.net/ns/lv2ext/rtmempool>.
+ *
+ */
+
+#ifndef LV2_RTMEMPOOL_H
+#define LV2_RTMEMPOOL_H
+
+#define LV2_RTSAFE_MEMORY_POOL_URI    "http://kxstudio.sf.net/ns/lv2ext/rtmempool"
+#define LV2_RTSAFE_MEMORY_POOL_PREFIX LV2_RTSAFE_MEMORY_POOL_URI "#"
+
+#define LV2_RTSAFE_MEMORY_POOL__Pool  LV2_RTSAFE_MEMORY_POOL_URI "Pool"
+
+/** max size of memory pool name, in chars, including terminating zero char */
+#define LV2_RTSAFE_MEMORY_POOL_NAME_MAX 128
+
+/** This extension used to be defined by a different URI */
+#define LV2_RTSAFE_MEMORY_POOL_DEPRECATED_URI "http://home.gna.org/lv2dynparam/rtmempool/v1"
+
+#ifdef __cplusplus
+extern "C" {
+#else
+#include <stdbool.h>
+#endif
+
+/**
+ * Opaque data to host data for LV2_RtMemPool_Pool.
+ */
+typedef void* LV2_RtMemPool_Handle;
+
+/**
+ * On instantiation, host must supply LV2_RTSAFE_MEMORY_POOL__Pool feature.
+ * LV2_Feature::data must be pointer to LV2_RtMemPool_Pool.
+ */
+typedef struct _LV2_RtMemPool_Pool {
+  /**
+   * This function is called when plugin wants to create memory pool
+   *
+   * <b>may/will sleep</b>
+   *
+   * @param pool_name pool name, for debug purposes, max RTSAFE_MEMORY_POOL_NAME_MAX chars, including terminating zero char. May be NULL.
+   * @param data_size memory chunk size
+   * @param min_preallocated min chunks preallocated
+   * @param max_preallocated max chunks preallocated
+   *
+   * @return Success status, true if successful
+   */
+  bool (*create)(LV2_RtMemPool_Handle * handle_ptr,
+                 const char * pool_name,
+                 size_t data_size,
+                 size_t min_preallocated,
+                 size_t max_preallocated);
+
+  /**
+   * This function is called when plugin wants to destroy previously created memory pool
+   *
+   * <b>may/will sleep</b>
+   */
+  void (*destroy)(LV2_RtMemPool_Handle handle);
+
+  /**
+   * This function is called when plugin wants to allocate memory in context where sleeping is not allowed
+   *
+   * <b>will not sleep</b>
+   *
+   * @return Pointer to allocated memory or NULL if memory no memory is available
+   */
+  void * (*allocate_atomic)(LV2_RtMemPool_Handle handle);
+
+  /**
+   * This function is called when plugin wants to allocate memory in context where sleeping is allowed
+   *
+   * <b>may/will sleep</b>
+   *
+   * @return Pointer to allocated memory or NULL if memory no memory is available (should not happen under normal conditions)
+   */
+  void * (*allocate_sleepy)(LV2_RtMemPool_Handle handle);
+
+  /**
+   * This function is called when plugin wants to deallocate previously allocated memory
+   *
+   * <b>will not sleep</b>
+   *
+   * @param memory_ptr pointer to previously allocated memory chunk
+   */
+  void (*deallocate)(LV2_RtMemPool_Handle handle,
+                     void * memory_ptr);
+
+} LV2_RtMemPool_Pool;
+
+/**
+ * Deprecated feature for backwards compatibility.
+ */
+typedef struct _LV2_RtMemPool_Pool_Deprecated {
+  unsigned char (*create)(const char*,size_t,size_t,size_t,LV2_RtMemPool_Handle*);
+  void  (*destroy)(LV2_RtMemPool_Handle);
+  void* (*allocate_atomic)(LV2_RtMemPool_Handle);
+  void* (*allocate_sleepy)(LV2_RtMemPool_Handle);
+  void  (*deallocate)(LV2_RtMemPool_Handle,void*);
+} LV2_RtMemPool_Pool_Deprecated;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* LV2_RTMEMPOOL_H */