summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-11-22 02:27:26 +0000
committerCarl Hetherington <carl@carlh.net>2011-11-22 02:27:26 +0000
commit16aece1d47ad1c1137d68ab12989cbc94b112c0f (patch)
tree4d07547a58e4209f3d40642f40907e2b658fef2b
parent51e43ae5a7df65c2d0b7c1f2dcec22511cfb8a98 (diff)
Share main VSTFX / FST struct between windows / linux VSTs.
git-svn-id: svn://localhost/ardour2/branches/3.0@10762 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rwxr-xr-xgtk2_ardour/lxvst_pluginui.cc2
-rwxr-xr-xgtk2_ardour/vstfxwin.cc203
-rw-r--r--gtk2_ardour/windows_vst_plugin_ui.cc2
-rwxr-xr-xlibs/ardour/ardour/lxvst_plugin.h6
-rw-r--r--libs/ardour/ardour/vst_types.h59
-rwxr-xr-xlibs/ardour/ardour/vstfx.h87
-rw-r--r--libs/ardour/ardour/windows_vst_plugin.h8
-rwxr-xr-xlibs/ardour/vstfx.cc19
-rwxr-xr-xlibs/ardour/vstfxinfofile.cc11
-rw-r--r--libs/fst/fst.h64
-rw-r--r--libs/fst/fstinfofile.c12
-rw-r--r--libs/fst/jackvst.h11
-rw-r--r--libs/fst/vstwin.c67
13 files changed, 250 insertions, 301 deletions
diff --git a/gtk2_ardour/lxvst_pluginui.cc b/gtk2_ardour/lxvst_pluginui.cc
index b6c7f34327..b8f751ff08 100755
--- a/gtk2_ardour/lxvst_pluginui.cc
+++ b/gtk2_ardour/lxvst_pluginui.cc
@@ -226,7 +226,7 @@ LXVSTPluginUI::forward_key_event (GdkEventKey* ev)
void
LXVSTPluginUI::create_preset_store ()
{
- VSTFX* vstfx = lxvst->vstfx();
+ VSTState* vstfx = lxvst->vstfx();
int vst_version = vstfx->plugin->dispatcher (vstfx->plugin, effGetVstVersion, 0, 0, NULL, 0.0f);
diff --git a/gtk2_ardour/vstfxwin.cc b/gtk2_ardour/vstfxwin.cc
index 65ff7912e9..4b28170850 100755
--- a/gtk2_ardour/vstfxwin.cc
+++ b/gtk2_ardour/vstfxwin.cc
@@ -36,7 +36,7 @@ struct ERect{
static pthread_mutex_t plugin_mutex;
-static VSTFX* vstfx_first = NULL;
+static VSTState * vstfx_first = NULL;
const char magic[] = "VSTFX Plugin State v002";
@@ -160,7 +160,8 @@ long getXWindowProperty(Window window, Atom atom)
/*The event handler - called from within the main GUI thread to
dispatch events to any VST UIs which have callbacks stuck to them*/
-static void dispatch_x_events(XEvent* event, VSTFX* vstfx)
+static void
+dispatch_x_events (XEvent* event, VSTState* vstfx)
{
/*Handle some of the Events we might be interested in*/
@@ -182,10 +183,8 @@ static void dispatch_x_events(XEvent* event, VSTFX* vstfx)
/*if the size has changed, we flag this so that in lxvst_pluginui.cc we can make the
change to the GTK parent window in ardour, from its UI thread*/
- if(window == (Window)(vstfx->window))
- {
- if((width!=vstfx->width) || (height!=vstfx->height))
- {
+ if (window == (Window) (vstfx->linux_window)) {
+ if (width != vstfx->width || height!=vstfx->height) {
vstfx->width = width;
vstfx->height = height;
vstfx->want_resize = 1;
@@ -194,8 +193,9 @@ static void dispatch_x_events(XEvent* event, VSTFX* vstfx)
position at the same time. We need to re-position the window at the origin of
the parent window*/
- if(vstfx->plugin_ui_window)
- XMoveWindow(LXVST_XDisplay, vstfx->plugin_ui_window, 0, 0);
+ if (vstfx->linux_plugin_ui_window) {
+ XMoveWindow (LXVST_XDisplay, vstfx->linux_plugin_ui_window, 0, 0);
+ }
}
}
@@ -220,18 +220,19 @@ static void dispatch_x_events(XEvent* event, VSTFX* vstfx)
/* present time */
/***********************************************************/
- if(ParentWindow == (Window)(vstfx->window))
- {
+ if (ParentWindow == (Window) (vstfx->linux_window)) {
+
Window PluginUIWindowID = event->xreparent.window;
- vstfx->plugin_ui_window = PluginUIWindowID;
+ vstfx->linux_plugin_ui_window = PluginUIWindowID;
#ifdef LXVST_32BIT
int result = getXWindowProperty(PluginUIWindowID, XInternAtom(LXVST_XDisplay, "_XEventProc", false));
- if(result == 0)
+ if (result == 0) {
vstfx->eventProc = NULL;
- else
+ } else {
vstfx->eventProc = (void (*) (void* event))result;
+ }
#endif
#ifdef LXVST_64BIT
long result = getXWindowProperty(PluginUIWindowID, XInternAtom(LXVST_XDisplay, "_XEventProc", false));
@@ -254,15 +255,13 @@ static void dispatch_x_events(XEvent* event, VSTFX* vstfx)
that the plugin parent window is now valid and can be passed
to effEditOpen when the editor is launched*/
- if(window == (Window)(vstfx->window))
- {
+ if (window == (Window) (vstfx->linux_window)) {
char* message = XGetAtomName(LXVST_XDisplay, message_type);
- if(strcmp(message,"LaunchEditor") == 0)
- {
-
- if(event->xclient.data.l[0] == 0x0FEEDBAC)
- vstfx_launch_editor(vstfx);
+ if (strcmp(message,"LaunchEditor") == 0) {
+ if (event->xclient.data.l[0] == 0x0FEEDBAC) {
+ vstfx_launch_editor (vstfx);
+ }
}
XFree(message);
@@ -283,8 +282,9 @@ static void dispatch_x_events(XEvent* event, VSTFX* vstfx)
UI window after they create it. If that is the case, we need to call it
here, passing the XEvent into it*/
- if(vstfx->eventProc == NULL)
+ if (vstfx->eventProc == NULL) {
return;
+ }
vstfx->eventProc((void*)event);
}
@@ -295,8 +295,7 @@ windows, that is if they don't manage their own UIs **/
void* gui_event_loop (void* ptr)
{
-
- VSTFX* vstfx;
+ VSTState* vstfx;
int LXVST_sched_event_timer = 0;
int LXVST_sched_timer_interval = 50; //ms
XEvent event;
@@ -361,14 +360,13 @@ again:
/*Window scheduled for destruction*/
- if (vstfx->destroy)
- {
- if (vstfx->window)
- {
- vstfx->plugin->dispatcher( vstfx->plugin, effEditClose, 0, 0, NULL, 0.0 );
+ if (vstfx->destroy) {
+ if (vstfx->linux_window) {
+ vstfx->plugin->dispatcher (vstfx->plugin, effEditClose, 0, 0, NULL, 0.0);
- XDestroyWindow (LXVST_XDisplay, vstfx->window);
- vstfx->window = 0; //FIXME - probably safe to assume we never have an XID of 0 but not explicitly true
+ XDestroyWindow (LXVST_XDisplay, vstfx->linux_window);
+ /* FIXME - probably safe to assume we never have an XID of 0 but not explicitly true */
+ vstfx->linux_window = 0;
vstfx->destroy = FALSE;
}
@@ -381,19 +379,16 @@ again:
}
/*Window does not yet exist - scheduled for creation*/
-
- if (vstfx->window == 0) //FIXME - probably safe to assume 0 is not a valid XID but not explicitly true
- {
- if (vstfx_create_editor (vstfx))
- {
+
+ /* FIXME - probably safe to assume 0 is not a valid XID but not explicitly true */
+ if (vstfx->linux_window == 0) {
+ if (vstfx_create_editor (vstfx)) {
vstfx_error ("** ERROR ** VSTFX : Cannot create editor for plugin %s", vstfx->handle->name);
vstfx_event_loop_remove_plugin (vstfx);
pthread_cond_signal (&vstfx->window_status_change);
pthread_mutex_unlock (&vstfx->lock);
goto again;
- }
- else
- {
+ } else {
/* condition/unlock: it was signalled & unlocked in fst_create_editor() */
}
}
@@ -527,27 +522,23 @@ void vstfx_exit()
/*Adds a new plugin (VSTFX) instance to the linked list*/
-int vstfx_run_editor (VSTFX* vstfx)
+int vstfx_run_editor (VSTState* vstfx)
{
pthread_mutex_lock (&plugin_mutex);
- /*Add the new VSTFX instance to the linked list*/
+ /* Add the new VSTFX instance to the linked list */
- if (vstfx_first == NULL)
- {
+ if (vstfx_first == NULL) {
vstfx_first = vstfx;
- }
- else
- {
- VSTFX* p = vstfx_first;
+ } else {
+ VSTState* p = vstfx_first;
- while (p->next)
- {
+ while (p->next) {
p = p->next;
}
p->next = vstfx;
- /*Mark the new end of the list*/
+ /* Mark the new end of the list */
vstfx->next = NULL;
}
@@ -558,15 +549,13 @@ int vstfx_run_editor (VSTFX* vstfx)
pthread_mutex_lock (&vstfx->lock);
- if (!vstfx->window)
- {
+ if (!vstfx->linux_window) {
pthread_cond_wait (&vstfx->window_status_change, &vstfx->lock);
}
pthread_mutex_unlock (&vstfx->lock);
- if (!vstfx->window)
- {
+ if (!vstfx->linux_window) {
return -1;
}
@@ -577,7 +566,7 @@ int vstfx_run_editor (VSTFX* vstfx)
/*Creates an editor for the plugin - normally called from within the gui event loop
after run_editor has added the plugin (editor) to the linked list*/
-int vstfx_create_editor (VSTFX* vstfx)
+int vstfx_create_editor (VSTState* vstfx)
{
Window parent_window;
@@ -614,7 +603,7 @@ int vstfx_create_editor (VSTFX* vstfx)
parent_window,
SubstructureNotifyMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | ExposureMask);
- vstfx->window = parent_window;
+ vstfx->linux_window = parent_window;
vstfx->xid = parent_window; //vstfx->xid will be referenced to connect to GTK UI in ardour later
@@ -654,7 +643,8 @@ int vstfx_create_editor (VSTFX* vstfx)
return 0;
}
-int vstfx_launch_editor(VSTFX* vstfx)
+int
+vstfx_launch_editor (VSTState* vstfx)
{
/*This is the second stage of launching the editor (see vstfx_create editor)
we get called here in response to receiving the ClientMessage on our Window,
@@ -672,7 +662,7 @@ int vstfx_launch_editor(VSTFX* vstfx)
int x_size = 1;
int y_size = 1;
- parent_window = vstfx->window;
+ parent_window = vstfx->linux_window;
/*Open the editor - Bah! we have to pass the int windowID as a void pointer - yuck
it gets cast back to an int as the parent window XID in the plugin - and we have to pass the
@@ -726,93 +716,98 @@ int vstfx_launch_editor(VSTFX* vstfx)
/*May not be needed in the XLib version*/
-void vstfx_move_window_into_view (VSTFX* vstfx)
+void
+vstfx_move_window_into_view (VSTState* vstfx)
{
-
- /*This is probably the equivalent of Mapping an XWindow
- but we most likely don't need it because the window
- will be Mapped by XReparentWindow*/
+ /* This is probably the equivalent of Mapping an XWindow
+ but we most likely don't need it because the window
+ will be Mapped by XReparentWindow
+ */
}
-/*Destroy the editor window*/
-
-void vstfx_destroy_editor (VSTFX* vstfx)
+/** Destroy the editor window */
+void
+vstfx_destroy_editor (VSTState* vstfx)
{
pthread_mutex_lock (&vstfx->lock);
- if (vstfx->window)
- {
+ if (vstfx->linux_window) {
vstfx->destroy = TRUE;
pthread_cond_wait (&vstfx->window_status_change, &vstfx->lock);
}
pthread_mutex_unlock (&vstfx->lock);
}
-/*Remove a vstfx instance from the linked list parsed by the
-event loop*/
-
-void vstfx_event_loop_remove_plugin (VSTFX* vstfx)
+/** Remove a vstfx instance from the linked list parsed by the
+ event loop
+*/
+void
+vstfx_event_loop_remove_plugin (VSTState* vstfx)
{
- /*This only ever gets called from within our GUI thread
- so we don't need to lock here - if we did there would be
- a deadlock anyway*/
+ /* This only ever gets called from within our GUI thread
+ so we don't need to lock here - if we did there would be
+ a deadlock anyway
+ */
- VSTFX* p;
- VSTFX* prev;
+ VSTState* p;
+ VSTState* prev;
- for(p = vstfx_first, prev = NULL; p; prev = p, p = p->next)
- {
- if(p == vstfx)
- {
- if(prev)
- {
+ for (p = vstfx_first, prev = NULL; p; prev = p, p = p->next) {
+ if (p == vstfx) {
+ if (prev) {
prev->next = p->next;
break;
}
}
}
- if (vstfx_first == vstfx)
+ if (vstfx_first == vstfx) {
vstfx_first = vstfx_first->next;
+ }
}
/*Get the XID of the plugin editor window*/
-int vstfx_get_XID (VSTFX* vstfx)
+int
+vstfx_get_XID (VSTState* vstfx)
{
int id;
- /*Wait for the lock to become free - otherwise
- the window might be in the process of being
- created and we get bad Window errors when trying
- to embed it in the GTK UI*/
+ /* Wait for the lock to become free - otherwise
+ the window might be in the process of being
+ created and we get bad Window errors when trying
+ to embed it in the GTK UI
+ */
pthread_mutex_lock(&vstfx->lock);
- /*The Window may be scheduled for creation
- but not actually created by the gui_event_loop yet -
-
- spin here until it has been activated. Possible
- deadlock if the window never gets activated but
- should not be called here if the window doesn't
- exist or will never exist*/
+ /* The Window may be scheduled for creation
+ but not actually created by the gui_event_loop yet -
+ spin here until it has been activated. Possible
+ deadlock if the window never gets activated but
+ should not be called here if the window doesn't
+ exist or will never exist
+ */
- while(!(vstfx->been_activated))
- usleep(1000);
+ while (!(vstfx->been_activated)) {
+ usleep (1000);
+ }
id = vstfx->xid;
- pthread_mutex_unlock(&vstfx->lock);
+ pthread_mutex_unlock (&vstfx->lock);
- /*Finally it might be safe to return the ID -
- problems will arise if we return either a zero ID
- and GTK tries to socket it or if we return an ID
- which hasn't yet become real to the server*/
+ /* Finally it might be safe to return the ID -
+ problems will arise if we return either a zero ID
+ and GTK tries to socket it or if we return an ID
+ which hasn't yet become real to the server
+ */
return id;
}
-float htonf (float v)
+float
+htonf (float v)
{
float result;
char * fin = (char*)&v;
@@ -830,7 +825,7 @@ float htonf (float v)
#if 0
-int vstfx_load_state (VSTFX* vstfx, char * filename)
+int vstfx_load_state (VSTState* vstfx, char * filename)
{
FILE* f = fopen (filename, "rb");
if(f)
diff --git a/gtk2_ardour/windows_vst_plugin_ui.cc b/gtk2_ardour/windows_vst_plugin_ui.cc
index dbd61b3268..1a966109ae 100644
--- a/gtk2_ardour/windows_vst_plugin_ui.cc
+++ b/gtk2_ardour/windows_vst_plugin_ui.cc
@@ -140,7 +140,7 @@ WindowsVSTPluginUI::forward_key_event (GdkEventKey* ev)
{
if (ev->type == GDK_KEY_PRESS) {
- FST* fst = vst->fst ();
+ VSTState* fst = vst->fst ();
pthread_mutex_lock (&fst->lock);
if (fst->n_pending_keys == (sizeof (fst->pending_keys) * sizeof (VSTKey))) {
diff --git a/libs/ardour/ardour/lxvst_plugin.h b/libs/ardour/ardour/lxvst_plugin.h
index 9384014100..f47bb140aa 100755
--- a/libs/ardour/ardour/lxvst_plugin.h
+++ b/libs/ardour/ardour/lxvst_plugin.h
@@ -87,7 +87,7 @@ class LXVSTPlugin : public ARDOUR::Plugin
int set_state (XMLNode const &, int);
AEffect * plugin () const { return _plugin; }
- VSTFX * vstfx () const { return _vstfx; }
+ VSTState * vstfx () const { return _vstfx; }
private:
@@ -103,8 +103,8 @@ private:
void add_state (XMLNode *) const;
VSTHandle * handle;
- VSTFX* _vstfx;
- AEffect* _plugin;
+ VSTState * _vstfx;
+ AEffect * _plugin;
bool been_resumed;
};
diff --git a/libs/ardour/ardour/vst_types.h b/libs/ardour/ardour/vst_types.h
index f441844e2d..9bc64b269f 100644
--- a/libs/ardour/ardour/vst_types.h
+++ b/libs/ardour/ardour/vst_types.h
@@ -69,4 +69,63 @@ struct _VSTHandle
typedef struct _VSTHandle VSTHandle;
+struct _VSTState
+{
+ AEffect* plugin;
+
+ /* Linux */
+ int linux_window; /* The plugin's parent X11 XWindow */
+ int linux_plugin_ui_window; /*The ID of the plugin UI window created by the plugin*/
+
+ /* Windows */
+ void* windows_window;
+
+ int xid; /* X11 XWindow */
+
+ int want_resize; /*Set to signal the plugin resized its UI*/
+ void* extra_data; /*Pointer to any extra data*/
+
+ void* event_callback_thisptr;
+ void (*eventProc) (void* event);
+
+ VSTHandle* handle;
+
+ int width;
+ int height;
+ int wantIdle;
+ int destroy;
+ int vst_version;
+ int has_editor;
+
+ int program_set_without_editor;
+
+ int want_program;
+ int want_chunk;
+ int n_pending_keys;
+ unsigned char* wanted_chunk;
+ int wanted_chunk_size;
+ int current_program;
+ float * want_params;
+ float * set_params;
+
+ VSTKey pending_keys[16];
+
+ int dispatcher_wantcall;
+ int dispatcher_opcode;
+ int dispatcher_index;
+ int dispatcher_val;
+ void * dispatcher_ptr;
+ float dispatcher_opt;
+ int dispatcher_retval;
+
+ struct _VSTState * next;
+ pthread_mutex_t lock;
+ pthread_cond_t window_status_change;
+ pthread_cond_t plugin_dispatcher_called;
+ pthread_cond_t window_created;
+ int been_activated;
+};
+
+typedef struct _VSTState VSTState;
+
#endif
diff --git a/libs/ardour/ardour/vstfx.h b/libs/ardour/ardour/vstfx.h
index 08534e408a..0f8772230b 100755
--- a/libs/ardour/ardour/vstfx.h
+++ b/libs/ardour/ardour/vstfx.h
@@ -18,93 +18,34 @@ void vstfx_set_error_function (void (*func)(const char *));
void vstfx_error (const char *fmt, ...);
-#include "ardour/vestige/aeffectx.h"
-
-typedef struct _VSTFX VSTFX;
-
-/*Structure used to describe the instance of VSTFX responsible for
- a particular plugin instance. These are connected together in a
- linked list*/
-
-struct _VSTFX
-{
- AEffect* plugin;
- int window; /* The plugin's parent X11 XWindow */
- int plugin_ui_window; /*The ID of the plugin UI window created by the plugin*/
- int xid; /* X11 XWindow */
-
- int want_resize; /*Set to signal the plugin resized its UI*/
- void* extra_data; /*Pointer to any extra data*/
-
- void* event_callback_thisptr;
- void (*eventProc) (void* event);
-
- VSTHandle* handle;
-
- int width;
- int height;
- int wantIdle;
- int destroy;
- int vst_version;
- int has_editor;
-
- int program_set_without_editor;
-
- int want_program;
- int want_chunk;
- int n_pending_keys;
- unsigned char* wanted_chunk;
- int wanted_chunk_size;
- int current_program;
- float *want_params;
- float *set_params;
-
- VSTKey pending_keys[16];
-
- int dispatcher_wantcall;
- int dispatcher_opcode;
- int dispatcher_index;
- int dispatcher_val;
- void * dispatcher_ptr;
- float dispatcher_opt;
- int dispatcher_retval;
-
- struct _VSTFX* next;
- pthread_mutex_t lock;
- pthread_cond_t window_status_change;
- pthread_cond_t plugin_dispatcher_called;
- pthread_cond_t window_created;
- int been_activated;
-};
-
/*API to vstfx*/
-extern int vstfx_launch_editor(VSTFX* vstfx);
-extern int vstfx_init (void* possible_hmodule);
+extern int vstfx_launch_editor (VSTState *);
+extern int vstfx_init (void *);
extern void vstfx_exit ();
extern VSTHandle * vstfx_load (const char*);
extern int vstfx_unload (VSTHandle *);
-extern VSTFX* vstfx_instantiate (VSTHandle *, audioMasterCallback, void *);
-extern void vstfx_close (VSTFX*);
+extern VSTState * vstfx_instantiate (VSTHandle *, audioMasterCallback, void *);
+extern void vstfx_close (VSTState*);
-extern int vstfx_create_editor (VSTFX* vstfx);
-extern int vstfx_run_editor (VSTFX*);
-extern void vstfx_destroy_editor (VSTFX*);
-extern int vstfx_get_XID (VSTFX*);
-extern void vstfx_move_window_into_view (VSTFX*);
+extern int vstfx_create_editor (VSTState *);
+extern int vstfx_run_editor (VSTState *);
+extern void vstfx_destroy_editor (VSTState *);
+extern int vstfx_get_XID (VSTState *);
+extern void vstfx_move_window_into_view (VSTState *);
-extern VSTInfo * vstfx_get_info (char *dllpathname);
+extern VSTInfo * vstfx_get_info (char *);
extern void vstfx_free_info (VSTInfo *);
-extern void vstfx_event_loop_remove_plugin (VSTFX* fst);
-extern int vstfx_call_dispatcher (VSTFX *vstfx, int opcode, int index, int val, void *ptr, float opt);
+extern void vstfx_event_loop_remove_plugin (VSTState *);
+extern int vstfx_call_dispatcher (VSTState *, int, int, int, void *, float);
/** Load a plugin state from a file.**/
-extern int vstfx_load_state (VSTFX* vstfx, char * filename);
+extern int vstfx_load_state (VSTState* vstfx, char * filename);
/** Save a plugin state to a file.**/
-extern bool vstfx_save_state (VSTFX* vstfx, char * filename);
+extern bool vstfx_save_state (VSTState* vstfx, char * filename);
#endif /* __vstfx_h__ */
diff --git a/libs/ardour/ardour/windows_vst_plugin.h b/libs/ardour/ardour/windows_vst_plugin.h
index 973c25e6b0..6de87aee89 100644
--- a/libs/ardour/ardour/windows_vst_plugin.h
+++ b/libs/ardour/ardour/windows_vst_plugin.h
@@ -30,8 +30,8 @@
#include "pbd/stateful.h"
#include "ardour/plugin.h"
-struct _FST;
-typedef struct _FST FST;
+struct _VSTState;
+typedef struct _VSTState VSTState;
struct _AEffect;
typedef struct _AEffect AEffect;
struct _VSTHandle;
@@ -87,7 +87,7 @@ class WindowsVSTPlugin : public ARDOUR::Plugin
int set_state (XMLNode const &, int);
AEffect * plugin () const { return _plugin; }
- FST * fst () const { return _fst; }
+ VSTState * fst () const { return _fst; }
private:
@@ -103,7 +103,7 @@ private:
void add_state (XMLNode *) const;
VSTHandle* handle;
- FST* _fst;
+ VSTState* _fst;
AEffect* _plugin;
bool been_resumed;
};
diff --git a/libs/ardour/vstfx.cc b/libs/ardour/vstfx.cc
index a150ead8ae..4cff1deb25 100755
--- a/libs/ardour/vstfx.cc
+++ b/libs/ardour/vstfx.cc
@@ -53,9 +53,10 @@ vstfx_handle_new ()
/*Create and return a pointer to a new vstfx instance*/
-VSTFX* vstfx_new ()
+VSTState *
+vstfx_new ()
{
- VSTFX* vstfx = (VSTFX*) calloc (1, sizeof (VSTFX));
+ VSTState* vstfx = (VSTState *) calloc (1, sizeof (VSTState));
/*Mutexes*/
@@ -72,8 +73,8 @@ VSTFX* vstfx_new ()
vstfx->n_pending_keys = 0;
vstfx->has_editor = 0;
vstfx->program_set_without_editor = 0;
- vstfx->window = 0;
- vstfx->plugin_ui_window = 0;
+ vstfx->linux_window = 0;
+ vstfx->linux_plugin_ui_window = 0;
vstfx->eventProc = NULL;
vstfx->extra_data = NULL;
vstfx->want_resize = 0;
@@ -270,10 +271,10 @@ vstfx_unload (VSTHandle* fhandle)
/*This instantiates a plugin*/
-VSTFX *
+VSTState *
vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
{
- VSTFX* vstfx = vstfx_new ();
+ VSTState* vstfx = vstfx_new ();
if(fhandle == NULL)
{
@@ -315,7 +316,7 @@ vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
/*Close a vstfx instance*/
-void vstfx_close (VSTFX* vstfx)
+void vstfx_close (VSTState* vstfx)
{
vstfx_destroy_editor(vstfx);
@@ -358,7 +359,7 @@ void vstfx_close (VSTFX* vstfx)
bool
-vstfx_save_state (VSTFX* vstfx, char * filename)
+vstfx_save_state (VSTState* vstfx, char * filename)
{
FILE* f = fopen (filename, "wb");
if (f)
@@ -460,7 +461,7 @@ vstfx_save_state (VSTFX* vstfx, char * filename)
/*Set up a call to the plugins 'dispatcher' function*/
-int vstfx_call_dispatcher (VSTFX *vstfx, int opcode, int index, int val, void *ptr, float opt)
+int vstfx_call_dispatcher (VSTState* vstfx, int opcode, int index, int val, void *ptr, float opt)
{
pthread_mutex_lock (&vstfx->lock);
diff --git a/libs/ardour/vstfxinfofile.cc b/libs/ardour/vstfxinfofile.cc
index e44e16f5c5..070c646dbe 100755
--- a/libs/ardour/vstfxinfofile.cc
+++ b/libs/ardour/vstfxinfofile.cc
@@ -257,7 +257,8 @@ static FILE* vstfx_infofile_for_write (char* dllpath)
return f;
}
-static int vstfx_can_midi(VSTFX *vstfx)
+static
+int vstfx_can_midi (VSTState* vstfx)
{
AEffect *plugin = vstfx->plugin;
@@ -274,7 +275,7 @@ static int vstfx_can_midi(VSTFX *vstfx)
}
static VSTInfo *
-vstfx_info_from_plugin (VSTFX *vstfx)
+vstfx_info_from_plugin (VSTState* vstfx)
{
VSTInfo* info = (VSTInfo*) malloc (sizeof (VSTInfo));
@@ -365,9 +366,9 @@ VSTInfo *
vstfx_get_info (char* dllpath)
{
FILE* infofile;
- VSTHandle *h;
- VSTFX *vstfx;
- VSTInfo *info;
+ VSTHandle* h;
+ VSTState* vstfx;
+ VSTInfo* info;
if ((infofile = vstfx_infofile_for_read (dllpath)) != 0) {
VSTInfo *info;
diff --git a/libs/fst/fst.h b/libs/fst/fst.h
index 545bfaf165..5313f5ee03 100644
--- a/libs/fst/fst.h
+++ b/libs/fst/fst.h
@@ -28,48 +28,6 @@ void fst_set_error_function (void (*func)(const char *));
void fst_error (const char *fmt, ...);
-typedef struct _FST FST;
-
-struct _FST
-{
- AEffect* plugin;
- void* window; /* win32 HWND */
- int xid; /* X11 XWindow */
- VSTHandle* handle;
- int width;
- int height;
- int wantIdle;
- int destroy;
- int vst_version;
- int has_editor;
-
- int program_set_without_editor;
- int want_program;
- int want_chunk;
- unsigned char *wanted_chunk;
- int wanted_chunk_size;
- int current_program;
- float *want_params;
- float *set_params;
-
- VSTKey pending_keys[16];
- int n_pending_keys;
-
- int dispatcher_wantcall;
- int dispatcher_opcode;
- int dispatcher_index;
- int dispatcher_val;
- void * dispatcher_ptr;
- float dispatcher_opt;
- int dispatcher_retval;
-
- struct _FST* next;
- pthread_mutex_t lock;
- pthread_cond_t window_status_change;
- pthread_cond_t plugin_dispatcher_called;
- int been_activated;
-};
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -80,29 +38,29 @@ extern void fst_exit ();
extern VSTHandle* fst_load (const char*);
extern int fst_unload (VSTHandle*);
-extern FST* fst_instantiate (VSTHandle*, audioMasterCallback amc, void* userptr);
-extern void fst_close (FST*);
+extern VSTState * fst_instantiate (VSTHandle *, audioMasterCallback amc, void* userptr);
+extern void fst_close (VSTState *);
-extern int fst_create_editor (FST* fst);
-extern int fst_run_editor (FST*);
-extern void fst_destroy_editor (FST*);
-extern int fst_get_XID (FST*);
-extern void fst_move_window_into_view (FST*);
+extern int fst_create_editor (VSTState* fst);
+extern int fst_run_editor (VSTState *);
+extern void fst_destroy_editor (VSTState *);
+extern int fst_get_XID (VSTState *);
+extern void fst_move_window_into_view (VSTState *);
extern VSTInfo *fst_get_info (char *dllpathname);
extern void fst_free_info (VSTInfo *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 );
+extern void fst_event_loop_remove_plugin (VSTState* fst);
+extern int fst_call_dispatcher (VSTState *, int, int, int, void *, float);
/**
* Load a plugin state from a file.
*/
-extern int fst_load_state (FST * fst, char * filename);
+extern int fst_load_state (VSTState *, char *);
/**
* Save a plugin state to a file.
*/
-extern int fst_save_state (FST * fst, char * filename);
+extern int fst_save_state (VSTState *, char *);
extern int wine_pthread_create (pthread_t* thread_id, const pthread_attr_t* attr, void *(*function)(void*), void* arg);
diff --git a/libs/fst/fstinfofile.c b/libs/fst/fstinfofile.c
index dec6db760a..4b5e95c2d1 100644
--- a/libs/fst/fstinfofile.c
+++ b/libs/fst/fstinfofile.c
@@ -148,7 +148,7 @@ static int fst_info_file_is_valid( char *dllpath ) {
}
static int
-fst_can_midi (FST *fst)
+fst_can_midi (VSTState* fst)
{
AEffect* plugin = fst->plugin;
int vst_version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, NULL, 0.0f);
@@ -165,7 +165,7 @@ fst_can_midi (FST *fst)
}
static VSTInfo *
-fst_info_from_plugin (FST* fst)
+fst_info_from_plugin (VSTState* fst)
{
VSTInfo* info = (VSTInfo *) malloc (sizeof (VSTInfo));
AEffect* plugin;
@@ -241,10 +241,10 @@ fst_get_info (char* dllpath)
} else {
- VSTHandle *h;
- FST *fst;
- VSTInfo *info;
- char *fstpath;
+ VSTHandle* h;
+ VSTState* fst;
+ VSTInfo* info;
+ char* fstpath;
if( !(h = fst_load( dllpath )) ) return NULL;
if( !(fst = fst_instantiate( h, simple_master_callback, NULL )) ) {
diff --git a/libs/fst/jackvst.h b/libs/fst/jackvst.h
index 28c6f05852..b496f68493 100644
--- a/libs/fst/jackvst.h
+++ b/libs/fst/jackvst.h
@@ -12,8 +12,8 @@ typedef struct _JackVST JackVST;
struct _JackVST {
jack_client_t *client;
- VSTHandle* handle;
- FST* fst;
+ VSTHandle * handle;
+ VSTState * fst;
float **ins;
float **outs;
jack_port_t *midi_port;
@@ -24,13 +24,6 @@ struct _JackVST {
int muted;
int current_program;
- int midi_map[128];
- volatile int midi_learn;
- volatile int midi_learn_CC;
- volatile int midi_learn_PARAM;
-
- int resume_called;
-
/* For VST/i support */
int want_midi;
diff --git a/libs/fst/vstwin.c b/libs/fst/vstwin.c
index 91a25e5852..00c5be2fc7 100644
--- a/libs/fst/vstwin.c
+++ b/libs/fst/vstwin.c
@@ -26,7 +26,7 @@ struct ERect{
static pthread_mutex_t plugin_mutex;
/** Head of linked list of all FSTs */
-static FST* fst_first = NULL;
+static VSTState* fst_first = NULL;
const char magic[] = "FST Plugin State v002";
@@ -68,10 +68,10 @@ my_window_proc (HWND w, UINT msg, WPARAM wp, LPARAM lp)
return DefWindowProcA (w, msg, wp, lp );
}
-static FST*
+static VSTState *
fst_new ()
{
- FST* fst = (FST*) calloc (1, sizeof (FST));
+ VSTState* fst = (VSTState *) calloc (1, sizeof (VSTState));
pthread_mutex_init (&fst->lock, NULL);
pthread_cond_init (&fst->window_status_change, NULL);
pthread_cond_init (&fst->plugin_dispatcher_called, NULL);
@@ -92,7 +92,7 @@ fst_handle_new ()
}
void
-maybe_set_program (FST* fst)
+maybe_set_program (VSTState* fst)
{
if (fst->want_program != -1) {
if (fst->vst_version >= 2) {
@@ -118,7 +118,7 @@ maybe_set_program (FST* fst)
DWORD WINAPI gui_event_loop (LPVOID param)
{
MSG msg;
- FST* fst;
+ VSTState* fst;
HMODULE hInst;
HWND window;
int i;
@@ -180,10 +180,10 @@ again:
if (fst->destroy) {
fprintf (stderr, "%s scheduled for destroy\n", fst->handle->name);
- if (fst->window) {
+ if (fst->windows_window) {
fst->plugin->dispatcher( fst->plugin, effEditClose, 0, 0, NULL, 0.0 );
- CloseWindow (fst->window);
- fst->window = NULL;
+ CloseWindow (fst->windows_window);
+ fst->windows_window = NULL;
fst->destroy = FALSE;
}
fst_event_loop_remove_plugin (fst);
@@ -193,7 +193,7 @@ again:
goto again;
}
- if (fst->window == NULL) {
+ if (fst->windows_window == NULL) {
if (fst_create_editor (fst)) {
fst_error ("cannot create editor for plugin %s", fst->handle->name);
fst_event_loop_remove_plugin (fst);
@@ -326,7 +326,7 @@ fst_exit ()
}
int
-fst_run_editor (FST* fst)
+fst_run_editor (VSTState* fst)
{
/* wait for the plugin editor window to be created (or not) */
@@ -334,12 +334,12 @@ fst_run_editor (FST* fst)
fst->has_editor = 1;
- if (!fst->window) {
+ if (!fst->windows_window) {
pthread_cond_wait (&fst->window_status_change, &fst->lock);
}
pthread_mutex_unlock (&fst->lock);
- if (!fst->window) {
+ if (!fst->windows_window) {
return -1;
}
@@ -347,7 +347,7 @@ fst_run_editor (FST* fst)
}
int
-fst_call_dispatcher (FST *fst, int opcode, int index, int val, void *ptr, float opt)
+fst_call_dispatcher (VSTState* fst, int opcode, int index, int val, void *ptr, float opt)
{
pthread_mutex_lock (&fst->lock);
fst->dispatcher_opcode = opcode;
@@ -364,7 +364,7 @@ fst_call_dispatcher (FST *fst, int opcode, int index, int val, void *ptr, float
}
int
-fst_create_editor (FST* fst)
+fst_create_editor (VSTState * fst)
{
HMODULE hInst;
HWND window;
@@ -401,12 +401,12 @@ fst_create_editor (FST* fst)
fst_error ("cannot set fst_ptr on window");
}
- fst->window = window;
+ fst->windows_window = window;
// fst->xid = (int) GetPropA (window, "__wine_x11_whole_window");
//printf( "effEditOpen......\n" );
- fst->plugin->dispatcher (fst->plugin, effEditOpen, 0, 0, fst->window, 0 );
+ fst->plugin->dispatcher (fst->plugin, effEditOpen, 0, 0, fst->windows_window, 0);
fst->plugin->dispatcher (fst->plugin, effEditGetRect, 0, 0, &er, 0 );
fst->width = er->right-er->left;
@@ -414,8 +414,8 @@ fst_create_editor (FST* fst)
//printf( "get rect ses... %d,%d\n", fst->width, fst->height );
//SetWindowPos (fst->window, 0, 9999, 9999, er->right-er->left+8, er->bottom-er->top+26, 0);
- SetWindowPos (fst->window, 0, 9999, 9999, 2, 2, 0);
- ShowWindow (fst->window, SW_SHOWNA);
+ SetWindowPos (fst->windows_window, 0, 9999, 9999, 2, 2, 0);
+ ShowWindow (fst->windows_window, SW_SHOWNA);
//SetWindowPos (fst->window, 0, 0, 0, er->right-er->left+8, er->bottom-er->top+26, SWP_NOMOVE|SWP_NOZORDER);
fst->xid = (int) GetPropA (window, "__wine_x11_whole_window");
@@ -427,19 +427,19 @@ fst_create_editor (FST* fst)
}
void
-fst_move_window_into_view (FST* fst)
+fst_move_window_into_view (VSTState* fst)
{
- if (fst->window) {
- SetWindowPos (fst->window, 0, 0, 0, fst->width, fst->height+24, 0);
- ShowWindow (fst->window, SW_SHOWNA);
+ if (fst->windows_window) {
+ SetWindowPos (fst->windows_window, 0, 0, 0, fst->width, fst->height + 24, 0);
+ ShowWindow (fst->windows_window, SW_SHOWNA);
}
}
void
-fst_destroy_editor (FST* fst)
+fst_destroy_editor (VSTState* fst)
{
pthread_mutex_lock (&fst->lock);
- if (fst->window) {
+ if (fst->windows_window) {
fprintf (stderr, "mark %s for destroy\n", fst->handle->name);
fst->destroy = TRUE;
//if (!PostThreadMessageA (gui_thread_id, WM_USER, 0, 0)) {
@@ -454,10 +454,10 @@ fst_destroy_editor (FST* fst)
}
void
-fst_event_loop_remove_plugin (FST* fst)
+fst_event_loop_remove_plugin (VSTState* fst)
{
- FST* p;
- FST* prev;
+ VSTState* p;
+ VSTState* prev;
for (p = fst_first, prev = NULL; p->next; prev = p, p = p->next) {
if (p == fst) {
@@ -601,17 +601,17 @@ fst_unload (VSTHandle* fhandle)
return 0;
}
-FST*
+VSTState*
fst_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
{
- FST* fst = fst_new ();
+ VSTState* fst = fst_new ();
pthread_mutex_lock (&plugin_mutex);
if (fst_first == NULL) {
fst_first = fst;
} else {
- FST* p = fst_first;
+ VSTState* p = fst_first;
while (p->next) {
p = p->next;
}
@@ -652,7 +652,7 @@ fst_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
}
void
-fst_close (FST* fst)
+fst_close (VSTState* fst)
{
fst_destroy_editor (fst);
@@ -665,7 +665,7 @@ fst_close (FST* fst)
}
int
-fst_get_XID (FST* fst)
+fst_get_XID (VSTState* fst)
{
return fst->xid;
}
@@ -791,7 +791,8 @@ int fst_load_state (FST * fst, char * filename)
}
#endif
-int fst_save_state (FST * fst, char * filename)
+int
+fst_save_state (VSTState * fst, char * filename)
{
FILE * f = fopen (filename, "wb");
int j;