DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

lv2_rtmempool.h (3729B)


      1 /*
      2   LV2 realtime safe memory pool extension definition
      3   This work is in public domain.
      4 
      5   This file is distributed in the hope that it will be useful,
      6   but WITHOUT ANY WARRANTY; without even the implied warranty of
      7   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      8 
      9   If you have questions, contact Filipe Coelho (aka falkTX) <falktx@falktx.com>
     10   or ask in #lad channel, FreeNode IRC network.
     11 */
     12 
     13 /**
     14  * @file lv2_rtmempool.h
     15  * C header for the LV2 rtmempool extension <http://kxstudio.sf.net/ns/lv2ext/rtmempool>.
     16  *
     17  */
     18 
     19 #ifndef LV2_RTMEMPOOL_H
     20 #define LV2_RTMEMPOOL_H
     21 
     22 #define LV2_RTSAFE_MEMORY_POOL_URI    "http://kxstudio.sf.net/ns/lv2ext/rtmempool"
     23 #define LV2_RTSAFE_MEMORY_POOL_PREFIX LV2_RTSAFE_MEMORY_POOL_URI "#"
     24 
     25 #define LV2_RTSAFE_MEMORY_POOL__Pool  LV2_RTSAFE_MEMORY_POOL_URI "Pool"
     26 
     27 /** max size of memory pool name, in chars, including terminating zero char */
     28 #define LV2_RTSAFE_MEMORY_POOL_NAME_MAX 128
     29 
     30 /** This extension used to be defined by a different URI */
     31 #define LV2_RTSAFE_MEMORY_POOL_DEPRECATED_URI "http://home.gna.org/lv2dynparam/rtmempool/v1"
     32 
     33 #ifdef __cplusplus
     34 extern "C" {
     35 #else
     36 #include <stdbool.h>
     37 #endif
     38 
     39 /**
     40  * Opaque data to host data for LV2_RtMemPool_Pool.
     41  */
     42 typedef void* LV2_RtMemPool_Handle;
     43 
     44 /**
     45  * On instantiation, host must supply LV2_RTSAFE_MEMORY_POOL__Pool feature.
     46  * LV2_Feature::data must be pointer to LV2_RtMemPool_Pool.
     47  */
     48 typedef struct _LV2_RtMemPool_Pool {
     49   /**
     50    * This function is called when plugin wants to create memory pool
     51    *
     52    * <b>may/will sleep</b>
     53    *
     54    * @param pool_name pool name, for debug purposes, max RTSAFE_MEMORY_POOL_NAME_MAX chars, including terminating zero char. May be NULL.
     55    * @param data_size memory chunk size
     56    * @param min_preallocated min chunks preallocated
     57    * @param max_preallocated max chunks preallocated
     58    *
     59    * @return Success status, true if successful
     60    */
     61   bool (*create)(LV2_RtMemPool_Handle * handle_ptr,
     62                  const char * pool_name,
     63                  size_t data_size,
     64                  size_t min_preallocated,
     65                  size_t max_preallocated);
     66 
     67   /**
     68    * This function is called when plugin wants to destroy previously created memory pool
     69    *
     70    * <b>may/will sleep</b>
     71    */
     72   void (*destroy)(LV2_RtMemPool_Handle handle);
     73 
     74   /**
     75    * This function is called when plugin wants to allocate memory in context where sleeping is not allowed
     76    *
     77    * <b>will not sleep</b>
     78    *
     79    * @return Pointer to allocated memory or NULL if memory no memory is available
     80    */
     81   void * (*allocate_atomic)(LV2_RtMemPool_Handle handle);
     82 
     83   /**
     84    * This function is called when plugin wants to allocate memory in context where sleeping is allowed
     85    *
     86    * <b>may/will sleep</b>
     87    *
     88    * @return Pointer to allocated memory or NULL if memory no memory is available (should not happen under normal conditions)
     89    */
     90   void * (*allocate_sleepy)(LV2_RtMemPool_Handle handle);
     91 
     92   /**
     93    * This function is called when plugin wants to deallocate previously allocated memory
     94    *
     95    * <b>will not sleep</b>
     96    *
     97    * @param memory_ptr pointer to previously allocated memory chunk
     98    */
     99   void (*deallocate)(LV2_RtMemPool_Handle handle,
    100                      void * memory_ptr);
    101 
    102 } LV2_RtMemPool_Pool;
    103 
    104 /**
    105  * Deprecated feature for backwards compatibility.
    106  */
    107 typedef struct _LV2_RtMemPool_Pool_Deprecated {
    108   unsigned char (*create)(const char*,size_t,size_t,size_t,LV2_RtMemPool_Handle*);
    109   void  (*destroy)(LV2_RtMemPool_Handle);
    110   void* (*allocate_atomic)(LV2_RtMemPool_Handle);
    111   void* (*allocate_sleepy)(LV2_RtMemPool_Handle);
    112   void  (*deallocate)(LV2_RtMemPool_Handle,void*);
    113 } LV2_RtMemPool_Pool_Deprecated;
    114 
    115 #ifdef __cplusplus
    116 } /* extern "C" */
    117 #endif
    118 
    119 #endif /* LV2_RTMEMPOOL_H */