2008-06-02 17:41:35 -04:00
|
|
|
#ifndef __fst_fst_h__
|
|
|
|
#define __fst_fst_h__
|
|
|
|
|
|
|
|
#include <setjmp.h>
|
|
|
|
#include <signal.h>
|
|
|
|
#include <pthread.h>
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Display FST error message.
|
|
|
|
*
|
2009-02-27 12:11:21 -05:00
|
|
|
* Set via fst_set_error_function(), otherwise a FST-provided
|
|
|
|
* default will print @a msg (plus a newline) to stderr.
|
|
|
|
*
|
|
|
|
* @param msg error message text (no newline at end).
|
2008-06-02 17:41:35 -04:00
|
|
|
*/
|
2009-02-27 12:11:21 -05:00
|
|
|
extern void (*fst_error_callback)(const char *msg);
|
2008-06-02 17:41:35 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the @ref fst_error_callback for error message display.
|
|
|
|
*
|
|
|
|
* The FST library provides two built-in callbacks for this purpose:
|
2009-02-27 12:11:21 -05:00
|
|
|
* default_fst_error_callback() and silent_fst_error_callback().
|
2008-06-02 17:41:35 -04:00
|
|
|
*/
|
|
|
|
void fst_set_error_function (void (*func)(const char *));
|
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
void fst_error (const char *fmt, ...);
|
|
|
|
|
|
|
|
#define VESTIGE_HEADER
|
|
|
|
|
|
|
|
#ifdef VESTIGE_HEADER
|
|
|
|
#include <vestige/aeffectx.h>
|
|
|
|
#endif
|
2008-06-02 17:41:35 -04:00
|
|
|
|
|
|
|
typedef struct _FST FST;
|
|
|
|
typedef struct _FSTHandle FSTHandle;
|
|
|
|
typedef struct _FSTInfo FSTInfo;
|
2010-12-29 18:31:02 -05:00
|
|
|
typedef struct _FSTKey FSTKey;
|
2008-06-02 17:41:35 -04:00
|
|
|
|
|
|
|
struct _FSTInfo
|
|
|
|
{
|
|
|
|
char *name;
|
2009-02-27 12:11:21 -05:00
|
|
|
char *creator;
|
2008-06-02 17:41:35 -04:00
|
|
|
int UniqueID;
|
|
|
|
char *Category;
|
|
|
|
|
|
|
|
int numInputs;
|
|
|
|
int numOutputs;
|
|
|
|
int numParams;
|
|
|
|
|
|
|
|
int wantMidi;
|
|
|
|
int wantEvents;
|
|
|
|
int hasEditor;
|
|
|
|
int canProcessReplacing; // what do we need this for ?
|
|
|
|
|
|
|
|
// i think we should save the parameter Info Stuff soon.
|
|
|
|
// struct VstParameterInfo *infos;
|
|
|
|
char **ParamNames;
|
|
|
|
char **ParamLabels;
|
|
|
|
};
|
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
typedef struct AEffect * (*main_entry_t)(audioMasterCallback);
|
|
|
|
|
2008-06-02 17:41:35 -04:00
|
|
|
struct _FSTHandle
|
|
|
|
{
|
|
|
|
void* dll;
|
|
|
|
char* name;
|
|
|
|
char* nameptr; /* ptr returned from strdup() etc. */
|
2009-02-27 12:11:21 -05:00
|
|
|
//struct AEffect* (*main_entry)(audioMasterCallback);
|
|
|
|
main_entry_t main_entry;
|
2008-06-02 17:41:35 -04:00
|
|
|
|
|
|
|
int plugincnt;
|
|
|
|
};
|
|
|
|
|
2010-12-29 18:31:02 -05:00
|
|
|
struct _FSTKey
|
|
|
|
{
|
|
|
|
/** virtual-key code, or 0 if this _FSTKey is a `character' key */
|
|
|
|
int special;
|
|
|
|
/** `character' key, or 0 if this _FSTKey is a virtual-key */
|
|
|
|
int character;
|
|
|
|
};
|
|
|
|
|
2008-06-02 17:41:35 -04:00
|
|
|
struct _FST
|
|
|
|
{
|
2009-02-27 12:11:21 -05:00
|
|
|
struct AEffect* plugin;
|
2008-06-02 17:41:35 -04:00
|
|
|
void* window; /* win32 HWND */
|
|
|
|
int xid; /* X11 XWindow */
|
|
|
|
FSTHandle* handle;
|
|
|
|
int width;
|
|
|
|
int height;
|
2009-02-27 12:11:21 -05:00
|
|
|
int wantIdle;
|
2008-06-02 17:41:35 -04:00
|
|
|
int destroy;
|
2009-04-15 20:43:41 -04:00
|
|
|
int vst_version;
|
2010-12-29 19:53:37 -05:00
|
|
|
int has_editor;
|
2008-06-02 17:41:35 -04:00
|
|
|
|
2010-12-29 19:53:37 -05:00
|
|
|
int program_set_without_editor;
|
2009-02-27 12:11:21 -05:00
|
|
|
int want_program;
|
2010-12-06 21:56:11 -05:00
|
|
|
int want_chunk;
|
|
|
|
unsigned char *wanted_chunk;
|
|
|
|
int wanted_chunk_size;
|
2009-04-15 20:43:41 -04:00
|
|
|
int current_program;
|
2009-02-27 12:11:21 -05:00
|
|
|
float *want_params;
|
|
|
|
float *set_params;
|
2010-12-29 18:31:02 -05:00
|
|
|
|
|
|
|
FSTKey pending_keys[16];
|
|
|
|
int n_pending_keys;
|
2009-02-27 12:11:21 -05:00
|
|
|
|
|
|
|
int dispatcher_wantcall;
|
|
|
|
int dispatcher_opcode;
|
|
|
|
int dispatcher_index;
|
|
|
|
int dispatcher_val;
|
|
|
|
void * dispatcher_ptr;
|
|
|
|
float dispatcher_opt;
|
|
|
|
int dispatcher_retval;
|
2008-06-02 17:41:35 -04:00
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
struct _FST* next;
|
2008-06-02 17:41:35 -04:00
|
|
|
pthread_mutex_t lock;
|
|
|
|
pthread_cond_t window_status_change;
|
2009-02-27 12:11:21 -05:00
|
|
|
pthread_cond_t plugin_dispatcher_called;
|
2008-06-02 17:41:35 -04:00
|
|
|
int been_activated;
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
extern int fst_init (void* possible_hmodule);
|
2009-04-15 20:43:41 -04:00
|
|
|
extern void fst_exit ();
|
2008-06-02 17:41:35 -04:00
|
|
|
|
|
|
|
extern FSTHandle* fst_load (const char*);
|
|
|
|
extern int fst_unload (FSTHandle*);
|
|
|
|
|
|
|
|
extern FST* fst_instantiate (FSTHandle*, audioMasterCallback amc, void* userptr);
|
|
|
|
extern void fst_close (FST*);
|
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
extern int fst_create_editor (FST* fst);
|
2008-06-02 17:41:35 -04:00
|
|
|
extern int fst_run_editor (FST*);
|
|
|
|
extern void fst_destroy_editor (FST*);
|
|
|
|
extern int fst_get_XID (FST*);
|
2009-02-27 12:11:21 -05:00
|
|
|
extern void fst_move_window_into_view (FST*);
|
2008-06-02 17:41:35 -04:00
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
extern FSTInfo *fst_get_info (char *dllpathname);
|
|
|
|
extern void fst_free_info (FSTInfo *info);
|
|
|
|
extern void fst_event_loop_remove_plugin (FST* fst);
|
|
|
|
extern int fst_call_dispatcher(FST *fst, int opcode, int index, int val, void *ptr, float opt );
|
2008-06-02 17:41:35 -04:00
|
|
|
|
2009-02-27 12:11:21 -05:00
|
|
|
/**
|
|
|
|
* Load a plugin state from a file.
|
|
|
|
*/
|
|
|
|
extern int fst_load_state (FST * fst, char * filename);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save a plugin state to a file.
|
|
|
|
*/
|
|
|
|
extern int fst_save_state (FST * fst, char * filename);
|
2008-06-02 17:41:35 -04:00
|
|
|
|
2009-04-15 20:43:41 -04:00
|
|
|
extern int wine_pthread_create (pthread_t* thread_id, const pthread_attr_t* attr, void *(*function)(void*), void* arg);
|
|
|
|
|
|
|
|
|
2008-06-02 17:41:35 -04:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* __fst_fst_h__ */
|