annotate Plugins/Effect/ladspa/ladspa.c @ 306:0e22e4ef781e trunk

[svn] Convert to configdb usage.
author chainsaw
date Sat, 17 Dec 2005 11:40:29 -0800
parents 08e4eb900f21
children d539e5c5f730
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
1 /* xmms_ladspa - use LADSPA plugins from XMMS
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
2 Copyright (C) 2002,2003 Nick Lamb <njl195@zepler.org.uk>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
3
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
7 (at your option) any later version.
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
8
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
12 GNU General Public License for more details.
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
13
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
15 along with this program; if not, write to the Free Software
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
17 */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
18
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
19 /* BMP-ladspa port by Giacomo Lozito <city_hunter@users.sf.net> */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
20
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
21 #include <stdlib.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
22 #include <stdio.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
23 #include <string.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
24 #include <float.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
25 #include <dlfcn.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
26 #include <dirent.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
27 #include <sys/types.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
28 #include <gtk/gtk.h>
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
29
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
30 #include <audacious/plugin.h>
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
31 #include <libaudacious/configdb.h>
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
32
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
33 #include "../../../config.h"
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
34 #include "ladspa.h"
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
35
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
36 #ifndef PATH_MAX
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
37 #define PATH_MAX 4096
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
38 #endif
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
39
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
40 #define PLUGIN_NAME "LADSPA host " VERSION
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
41
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
42 #define MAX_SAMPLES 8192
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
43 #define MAX_KNOBS 64
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
44
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
45 typedef struct {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
46 char *name;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
47 char *filename;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
48 long int id;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
49 long int unique_id;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
50 gboolean stereo;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
51 } ladspa_plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
52
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
53 typedef struct {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
54 void *library;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
55 char *filename;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
56 gboolean stereo;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
57 gboolean restored;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
58 const LADSPA_Descriptor *descriptor;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
59 LADSPA_Handle *handle; /* left or mono */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
60 LADSPA_Handle *handle2; /* right stereo */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
61 GtkWidget *window;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
62 guint timeout;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
63 GtkAdjustment *adjustments[MAX_KNOBS];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
64 LADSPA_Data knobs[MAX_KNOBS];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
65 } plugin_instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
66
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
67 static void start (void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
68 static void stop (void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
69 static int apply_effect (gpointer *d, gint length, AFormat afmt,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
70 gint srate, gint nch);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
71 static void configure(void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
72
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
73 static void restore (void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
74 static plugin_instance * add_plugin (ladspa_plugin *plugin);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
75 static void find_all_plugins(void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
76 static void find_plugins(char *path_entry);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
77 static ladspa_plugin *get_plugin_by_id(unsigned long id);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
78 static plugin_instance * load (char *filename, long int num);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
79 static void reboot_plugins (void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
80 static void boot_plugin (plugin_instance *instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
81 static void port_assign(plugin_instance *instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
82 static void shutdown (plugin_instance *instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
83 static void unload (plugin_instance *instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
84
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
85 static GtkWidget * make_plugin_clist(void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
86 static void make_run_clist(void);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
87 static void sort_column(GtkCList *clist, gint column, gpointer user_data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
88 static void select_plugin(GtkCList *clist, gint row, gint column,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
89 GdkEventButton *event, gpointer user_data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
90 static void unselect_plugin(GtkCList *clist, gint row, gint column,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
91 GdkEventButton *event, gpointer user_data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
92 static void add_plugin_clicked (GtkButton *button, gpointer user_data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
93 static void remove_plugin_clicked (GtkButton *button, gpointer user_data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
94 static void configure_plugin_clicked (GtkButton *button, gpointer user_data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
95
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
96 static void draw_plugin(plugin_instance *instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
97
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
98 static LADSPA_Data left[MAX_SAMPLES], right[MAX_SAMPLES], trash[MAX_SAMPLES];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
99
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
100 G_LOCK_DEFINE_STATIC(running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
101
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
102 static GSList *plugin_list, *running_plugins;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
103
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
104 static ladspa_plugin * selected_plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
105 static plugin_instance * selected_instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
106
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
107 static struct {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
108 AFormat afmt;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
109 gint srate;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
110 gint nch;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
111 gboolean ignore;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
112 gboolean running;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
113 gboolean initialised;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
114 } state = { 0, 0, 0, FALSE, FALSE};
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
115
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
116 static GtkWidget *config_window = NULL, *run_clist = NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
117
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
118 static EffectPlugin xmms_plugin = {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
119 NULL, NULL,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
120 PLUGIN_NAME,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
121 start,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
122 stop,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
123 NULL,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
124 configure,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
125 apply_effect
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
126 };
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
127
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
128 EffectPlugin *get_eplugin_info (void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
129 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
130 return &xmms_plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
131 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
132
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
133 static void start (void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
134 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
135 if (state.initialised == FALSE) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
136 restore();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
137 } else if (state.srate > 0) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
138 reboot_plugins();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
139 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
140 state.running = TRUE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
141 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
142
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
143 static void restore (void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
144 {
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
145 ConfigDb *db;
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
146 gint k, plugins= 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
147
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
148 db = bmp_cfg_db_open();
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
149
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
150 bmp_cfg_db_get_int(db, "ladspa", "plugins", &plugins);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
151 for (k= 0; k < plugins; ++k) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
152 gint id;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
153 int port, ports= 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
154 plugin_instance *instance;
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
155 gchar *section = g_strdup_printf("ladspa_plugin%d", k);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
156
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
157 bmp_cfg_db_get_int(db, section, "id", &id);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
158 instance = add_plugin(get_plugin_by_id(id));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
159 if (!instance) continue; /* couldn't load this plugin */
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
160 bmp_cfg_db_get_int(db, section, "ports", &ports);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
161 for (port= 0; port < ports && port < MAX_KNOBS; ++port) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
162 gchar *key = g_strdup_printf("port%d", port);
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
163 bmp_cfg_db_get_float(db, section, key, &(instance->knobs[port]));
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
164 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
165 instance->restored = TRUE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
166 g_free(section);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
167 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
168
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
169 state.initialised = TRUE;
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
170 bmp_cfg_db_close(db);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
171 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
172
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
173 static ladspa_plugin *get_plugin_by_id(unsigned long id)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
174 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
175 GSList *list;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
176 ladspa_plugin *plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
177
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
178 if (plugin_list == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
179 find_all_plugins();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
180 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
181
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
182 for (list= plugin_list; list != NULL; list = g_slist_next(list)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
183 plugin = (ladspa_plugin *) list->data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
184 if (plugin->unique_id == id) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
185 return plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
186 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
187 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
188
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
189 return NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
190 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
191
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
192 static void find_all_plugins (void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
193 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
194 char *ladspa_path, *directory;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
195
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
196 plugin_list = NULL; /* empty list */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
197 ladspa_path= getenv("LADSPA_PATH");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
198 if (ladspa_path == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
199 /* Fallback, look in obvious places */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
200 find_plugins("/usr/lib/ladspa");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
201 find_plugins("/usr/local/lib/ladspa");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
202 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
203 ladspa_path = g_strdup(ladspa_path);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
204
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
205 directory = strtok(ladspa_path, ":");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
206 while (directory != NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
207 find_plugins(directory);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
208 directory = strtok(NULL, ":");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
209 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
210 g_free(ladspa_path);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
211 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
212 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
213
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
214 static plugin_instance * load (char *filename, long int num)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
215 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
216 LADSPA_Descriptor_Function descriptor_fn;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
217 plugin_instance *instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
218
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
219 instance = g_new0(plugin_instance, 1);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
220
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
221 instance->filename = filename;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
222 instance->library = dlopen(filename, RTLD_NOW);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
223 if (instance->library == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
224 g_free(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
225 return NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
226 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
227 descriptor_fn = dlsym(instance->library, "ladspa_descriptor");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
228 if (descriptor_fn == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
229 g_free(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
230 return NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
231 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
232 instance->descriptor = descriptor_fn(num);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
233
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
234 return instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
235 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
236
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
237 static void unload (plugin_instance * instance)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
238 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
239 if (instance->window) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
240 gtk_widget_destroy(instance->window);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
241 instance->window = NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
242 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
243
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
244 if (instance->timeout) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
245 gtk_timeout_remove(instance->timeout);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
246 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
247
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
248 shutdown(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
249
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
250 if (instance->library) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
251 dlclose(instance->library);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
252 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
253 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
254
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
255 static void stop (void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
256 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
257 GSList *list;
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
258 ConfigDb *db;
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
259 gint plugins = 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
260
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
261 if (state.running == FALSE) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
262 return;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
263 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
264 state.running = FALSE;
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
265 db = bmp_cfg_db_open();
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
266 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
267 for (list= running_plugins; list != NULL; list = g_slist_next(list)) {
297
6862a829540c [svn] Use GTK_SIGNAL_FUNC() where needed and remove a totally random const qualifier.
chainsaw
parents: 280
diff changeset
268 plugin_instance *instance = (plugin_instance *) list->data;
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
269 gchar *section = g_strdup_printf("ladspa_plugin%d", plugins++);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
270 int port, ports= 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
271
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
272 bmp_cfg_db_set_int(db, section, "id", instance->descriptor->UniqueID);
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
273 bmp_cfg_db_set_string(db, section, "file", instance->filename);
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
274 bmp_cfg_db_set_string(db, section, "label", (gchar *)
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
275 instance->descriptor->Label);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
276
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
277 ports = instance->descriptor->PortCount;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
278 if (ports > MAX_KNOBS) ports = MAX_KNOBS;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
279 for (port= 0; port < ports; ++port) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
280 gchar *key = g_strdup_printf("port%d", port);
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
281 bmp_cfg_db_set_float(db, section, key, instance->knobs[port]);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
282 g_free(key);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
283 }
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
284 bmp_cfg_db_set_int(db, section, "ports", ports);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
285 g_free(section);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
286 shutdown (instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
287 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
288 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
289
306
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
290 bmp_cfg_db_set_int(db, "ladspa", "plugins", plugins);
0e22e4ef781e [svn] Convert to configdb usage.
chainsaw
parents: 301
diff changeset
291 bmp_cfg_db_close(db);
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
292 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
293
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
294 static void shutdown (plugin_instance *instance)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
295 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
296 const LADSPA_Descriptor * descriptor= instance->descriptor;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
297
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
298 if (instance->handle) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
299 if (descriptor->deactivate) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
300 descriptor->deactivate(instance->handle);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
301 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
302 descriptor->cleanup(instance->handle);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
303 instance->handle = NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
304 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
305 if (instance->handle2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
306 if (descriptor->deactivate) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
307 descriptor->deactivate(instance->handle2);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
308 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
309 descriptor->cleanup(instance->handle2);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
310 instance->handle2 = NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
311 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
312 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
313
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
314 static void boot_plugin (plugin_instance *instance)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
315 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
316 const LADSPA_Descriptor * descriptor = instance->descriptor;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
317
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
318 shutdown(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
319 instance->handle = descriptor->instantiate(descriptor, state.srate);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
320 if (state.nch > 1 && !instance->stereo) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
321 /* Create an additional instance */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
322 instance->handle2 = descriptor->instantiate(descriptor, state.srate);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
323 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
324
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
325 port_assign(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
326
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
327 if (descriptor->activate) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
328 descriptor->activate(instance->handle);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
329 if (instance->handle2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
330 descriptor->activate(instance->handle2);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
331 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
332 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
333 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
334
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
335 static void reboot_plugins (void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
336 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
337 GSList *list;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
338
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
339 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
340 for (list= running_plugins; list != NULL; list = g_slist_next(list)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
341 boot_plugin ((plugin_instance *) list->data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
342 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
343 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
344 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
345
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
346 static int apply_effect (gpointer *d, gint length, AFormat afmt,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
347 gint srate, gint nch)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
348 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
349 gint16 *raw16 = *d;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
350 GSList *list;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
351 plugin_instance *instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
352 int k;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
353
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
354 if (running_plugins == NULL || state.running == FALSE) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
355 return length;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
356 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
357
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
358 if (state.afmt != afmt || state.srate != srate || state.nch != nch) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
359 state.afmt = afmt;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
360 state.srate = srate;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
361 state.nch = nch;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
362
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
363 if (nch < 1 || nch > 2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
364 state.ignore = 1;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
365 else if (afmt == FMT_S16_NE)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
366 state.ignore = 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
367 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
368 else if (afmt == FMT_S16_LE)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
369 state.ignore = 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
370 #elif G_BYTE_ORDER == G_BIG_ENDIAN
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
371 else if (afmt == FMT_S16_BE)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
372 state.ignore = 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
373 #endif
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
374 else
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
375 state.ignore = 1;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
376
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
377 reboot_plugins();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
378 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
379
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
380 if (state.ignore || length > MAX_SAMPLES * 2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
381 return length;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
382 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
383
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
384 if (state.nch == 1) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
385 for (k= 0; k < length / 2; ++k) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
386 left[k] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
387 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
388 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
389 for (list= running_plugins; list != NULL; list = g_slist_next(list)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
390 instance = (plugin_instance *) list->data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
391 if (instance->handle) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
392 instance->descriptor->run(instance->handle, length / 2);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
393 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
394 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
395 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
396 for (k= 0; k < length / 2; ++k) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
397 raw16[k] = CLAMP((int) (left[k] * 32768.0f), -32768, 32767);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
398 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
399 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
400 for (k= 0; k < length / 2; k += 2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
401 left[k/2] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
402 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
403 for (k= 1; k < length / 2; k += 2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
404 right[k/2] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
405 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
406 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
407 for (list= running_plugins; list != NULL; list = g_slist_next(list)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
408 instance = (plugin_instance *) list->data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
409 if (instance->handle) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
410 instance->descriptor->run(instance->handle, length / 4);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
411 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
412 if (instance->handle2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
413 instance->descriptor->run(instance->handle2, length / 4);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
414 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
415 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
416 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
417 for (k= 0; k < length / 2; k += 2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
418 raw16[k] = CLAMP((int) (left[k/2] * 32768.0f), -32768, 32767);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
419 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
420 for (k= 1; k < length / 2; k += 2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
421 raw16[k] = CLAMP((int) (right[k/2] * 32768.0f), -32768, 32767);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
422 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
423 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
424
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
425 return length;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
426 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
427
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
428 static void port_assign(plugin_instance * instance) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
429 unsigned long port;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
430 unsigned long inputs= 0, outputs= 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
431 const LADSPA_Descriptor * plugin = instance->descriptor;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
432
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
433 for (port = 0; port < plugin->PortCount; ++port) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
434
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
435 if (LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[port])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
436 if (port < MAX_KNOBS) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
437 plugin->connect_port(instance->handle, port, &(instance->knobs[port]));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
438 if (instance->handle2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
439 plugin->connect_port(instance->handle2, port, &(instance->knobs[port]));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
440 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
441 plugin->connect_port(instance->handle, port, trash);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
442 if (instance->handle2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
443 plugin->connect_port(instance->handle2, port, trash);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
444 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
445
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
446 } else if (LADSPA_IS_PORT_AUDIO(plugin->PortDescriptors[port])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
447
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
448 if (LADSPA_IS_PORT_INPUT(plugin->PortDescriptors[port])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
449 if (inputs == 0) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
450 plugin->connect_port(instance->handle, port, left);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
451 if (instance->handle2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
452 plugin->connect_port(instance->handle2, port, right);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
453 } else if (inputs == 1 && instance->stereo) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
454 plugin->connect_port(instance->handle, port, right);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
455 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
456 plugin->connect_port(instance->handle, port, trash);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
457 if (instance->handle2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
458 plugin->connect_port(instance->handle2, port, trash);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
459 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
460 inputs++;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
461
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
462 } else if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[port])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
463 if (outputs == 0) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
464 plugin->connect_port(instance->handle, port, left);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
465 if (instance->handle2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
466 plugin->connect_port(instance->handle2, port, right);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
467 } else if (outputs == 1 && instance->stereo) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
468 plugin->connect_port(instance->handle, port, right);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
469 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
470 plugin->connect_port(instance->handle, port, trash);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
471 if (instance->handle2)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
472 plugin->connect_port(instance->handle2, port, trash);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
473 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
474 outputs++;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
475
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
476 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
477 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
478 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
479
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
480 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
481
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
482 static void find_plugins(char *path_entry)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
483 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
484 ladspa_plugin *plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
485 void *library = NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
486 char lib_name[PATH_MAX];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
487 LADSPA_Descriptor_Function descriptor_fn;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
488 const LADSPA_Descriptor *descriptor;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
489 DIR *dir;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
490 struct dirent *dirent;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
491 long int k;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
492 long int port, input, output;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
493
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
494 dir= opendir(path_entry);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
495 if (dir == NULL) return;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
496
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
497 while ((dirent= readdir(dir))) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
498 snprintf(lib_name, PATH_MAX, "%s/%s", path_entry, dirent->d_name);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
499 library = dlopen(lib_name, RTLD_LAZY);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
500 if (library == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
501 continue;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
502 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
503 descriptor_fn = dlsym(library, "ladspa_descriptor");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
504 if (descriptor_fn == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
505 dlclose(library);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
506 continue;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
507 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
508
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
509 for (k= 0;; ++k) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
510 descriptor= descriptor_fn(k);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
511 if (descriptor == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
512 break;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
513 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
514 plugin = g_new(ladspa_plugin, 1);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
515 plugin->name= g_strdup(descriptor->Name);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
516 plugin->filename= g_strdup(lib_name);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
517 plugin->id= k;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
518 plugin->unique_id= descriptor->UniqueID;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
519 for (input = output = port = 0; port < descriptor->PortCount; ++port) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
520 if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[port])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
521 if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[port]))
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
522 input++;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
523 if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[port]))
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
524 output++;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
525 } else if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[port])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
526 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
527 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
528 if (input >= 2 && output >= 2) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
529 plugin->stereo= TRUE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
530 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
531 plugin->stereo= FALSE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
532 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
533 plugin_list = g_slist_prepend(plugin_list, plugin);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
534 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
535 dlclose(library);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
536 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
537
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
538 closedir(dir);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
539 return;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
540 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
541
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
542 static void value_changed(GtkAdjustment *adjustment, gpointer *user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
543 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
544 LADSPA_Data *data = (LADSPA_Data *) user_data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
545
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
546 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
547 *data = (LADSPA_Data) adjustment->value;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
548 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
549 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
550
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
551 static void toggled(GtkToggleButton *togglebutton, gpointer *user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
552 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
553 LADSPA_Data *data = (LADSPA_Data *) user_data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
554
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
555 if (gtk_toggle_button_get_active(togglebutton)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
556 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
557 *data = (LADSPA_Data) 1.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
558 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
559 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
560 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
561 *data = (LADSPA_Data) -1.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
562 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
563 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
564 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
565
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
566 static int update_instance (gpointer data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
567 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
568 plugin_instance *instance = (plugin_instance *) data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
569 unsigned long k;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
570
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
571 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
572 for (k = 0; k < MAX_KNOBS && k < instance->descriptor->PortCount; ++k) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
573 if (LADSPA_IS_PORT_OUTPUT(instance->descriptor->PortDescriptors[k])
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
574 && LADSPA_IS_PORT_CONTROL(instance->descriptor->PortDescriptors[k])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
575 instance->adjustments[k]->value = instance->knobs[k];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
576 gtk_adjustment_value_changed(instance->adjustments[k]);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
577 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
578 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
579 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
580 return TRUE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
581 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
582
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
583 static void draw_plugin(plugin_instance *instance)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
584 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
585 const LADSPA_Descriptor *plugin = instance->descriptor;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
586 const LADSPA_PortRangeHint *hints = plugin->PortRangeHints;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
587 LADSPA_Data fact, min, max, step, start;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
588 int dp;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
589 unsigned long k;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
590 gboolean no_ui = TRUE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
591 GtkWidget *widget, *vbox, *hbox;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
592 GtkObject *adjustment;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
593
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
594 if (instance->window != NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
595 /* Just show window */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
596 gtk_widget_show(instance->window);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
597 return;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
598 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
599
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
600 instance->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
601 gtk_window_set_title(GTK_WINDOW(instance->window), plugin->Name);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
602
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
603 vbox= gtk_vbox_new(FALSE, 3);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
604
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
605 for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
606 if (! LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k]))
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
607 continue;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
608 no_ui = FALSE;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
609 hbox = gtk_hbox_new(FALSE, 3);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
610 widget = gtk_label_new(plugin->PortNames[k]);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
611 gtk_container_add(GTK_CONTAINER(hbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
612
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
613 if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
614 widget = gtk_toggle_button_new_with_label("Press");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
615 gtk_signal_connect(GTK_OBJECT(widget), "toggled",
297
6862a829540c [svn] Use GTK_SIGNAL_FUNC() where needed and remove a totally random const qualifier.
chainsaw
parents: 280
diff changeset
616 GTK_SIGNAL_FUNC(toggled), &(instance->knobs[k]));
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
617 gtk_container_add(GTK_CONTAINER(hbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
618 gtk_container_add(GTK_CONTAINER(vbox), hbox);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
619 continue;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
620 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
621
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
622 if (LADSPA_IS_HINT_SAMPLE_RATE(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
623 fact = state.srate ? state.srate : 44100.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
624 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
625 fact = 1.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
626 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
627
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
628 if (LADSPA_IS_HINT_BOUNDED_BELOW(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
629 min= hints[k].LowerBound * fact;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
630 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
631 min= -10000.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
632 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
633
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
634 if (LADSPA_IS_HINT_BOUNDED_ABOVE(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
635 max= hints[k].UpperBound * fact;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
636 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
637 max= 10000.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
638 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
639
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
640 /* infinity */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
641 if (10000.0f <= max - min) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
642 dp = 1;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
643 step = 5.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
644
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
645 /* 100.0 ... lots */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
646 } else if (100.0f < max - min) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
647 dp = 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
648 step = 5.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
649
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
650 /* 10.0 ... 100.0 */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
651 } else if (10.0f < max - min) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
652 dp = 1;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
653 step = 0.5f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
654
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
655 /* 1.0 ... 10.0 */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
656 } else if (1.0f < max - min) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
657 dp = 2;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
658 step = 0.05f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
659
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
660 /* 0.0 ... 1.0 */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
661 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
662 dp = 3;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
663 step = 0.005f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
664 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
665
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
666 if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
667 dp = 0;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
668 if (step < 1.0f) step = 1.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
669 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
670
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
671 if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
672 start = min;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
673 } else if (LADSPA_IS_HINT_DEFAULT_LOW(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
674 start = min * 0.75f + max * 0.25f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
675 } else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
676 start = min * 0.5f + max * 0.5f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
677 } else if (LADSPA_IS_HINT_DEFAULT_HIGH(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
678 start = min * 0.25f + max * 0.75f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
679 } else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
680 start = max;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
681 } else if (LADSPA_IS_HINT_DEFAULT_0(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
682 start = 0.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
683 } else if (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
684 start = 1.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
685 } else if (LADSPA_IS_HINT_DEFAULT_100(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
686 start = 100.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
687 } else if (LADSPA_IS_HINT_DEFAULT_440(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
688 start = 440.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
689 } else if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
690 start = min;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
691 } else if (max >= 0.0f && min <= 0.0f) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
692 start = 0.0f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
693 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
694 start = min * 0.5f + max * 0.5f;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
695 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
696
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
697 if (instance->restored) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
698 start = instance->knobs[k];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
699 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
700 instance->knobs[k] = start;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
701 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
702 adjustment = gtk_adjustment_new(start, min, max, step, step * 10.0, 0.0);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
703 instance->adjustments[k] = GTK_ADJUSTMENT(adjustment);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
704 widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), step, dp);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
705 if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
706 gtk_widget_set_sensitive(widget, FALSE);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
707 } else {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
708 gtk_signal_connect(adjustment, "value-changed",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
709 GTK_SIGNAL_FUNC(value_changed), &(instance->knobs[k]));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
710 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
711 gtk_container_add(GTK_CONTAINER(hbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
712 widget = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
713 gtk_scale_set_digits(GTK_SCALE(widget), dp);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
714 if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k])) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
715 gtk_widget_set_sensitive(widget, FALSE);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
716 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
717 gtk_container_add(GTK_CONTAINER(hbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
718
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
719 gtk_container_add(GTK_CONTAINER(vbox), hbox);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
720 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
721
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
722 if (no_ui) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
723 widget = gtk_label_new("This LADSPA plugin has no user controls");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
724 gtk_container_add(GTK_CONTAINER(vbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
725 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
726
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
727 instance->timeout = gtk_timeout_add(100, update_instance, instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
728
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
729 gtk_container_add(GTK_CONTAINER(instance->window), vbox);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
730
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
731 gtk_signal_connect (GTK_OBJECT (instance->window), "delete_event",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
732 GTK_SIGNAL_FUNC (gtk_widget_hide_on_delete), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
733 gtk_widget_show_all(instance->window);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
734 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
735
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
736 static void sort_column(GtkCList *clist, gint column, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
737 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
738 gtk_clist_set_sort_column(clist, column);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
739 gtk_clist_sort(clist);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
740 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
741
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
742 static void unselect_instance(GtkCList *clist, gint row, gint column,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
743 GdkEventButton *event, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
744 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
745 selected_instance= NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
746 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
747
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
748 static void select_instance(GtkCList *clist, gint row, gint column,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
749 GdkEventButton *event, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
750 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
751 selected_instance= (plugin_instance *) gtk_clist_get_row_data(clist, row);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
752 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
753
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
754 static void reorder_instance(GtkCList *clist, gint from, gint to,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
755 gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
756 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
757 void *data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
758
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
759 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
760 data = g_slist_nth_data(running_plugins, from);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
761 running_plugins= g_slist_remove(running_plugins, data);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
762 running_plugins= g_slist_insert(running_plugins, data, to);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
763 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
764 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
765
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
766 static void make_run_clist(void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
767 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
768 char * titles[1] = { "Name" };
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
769 GSList *list;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
770
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
771 run_clist = gtk_clist_new_with_titles(1, titles);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
772 gtk_clist_column_titles_passive(GTK_CLIST (run_clist));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
773 gtk_clist_set_reorderable(GTK_CLIST (run_clist), TRUE);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
774 gtk_signal_connect(GTK_OBJECT(run_clist), "select-row",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
775 GTK_SIGNAL_FUNC(select_instance), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
776 gtk_signal_connect(GTK_OBJECT(run_clist), "unselect-row",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
777 GTK_SIGNAL_FUNC(unselect_instance), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
778 gtk_signal_connect(GTK_OBJECT(run_clist), "row-move",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
779 GTK_SIGNAL_FUNC(reorder_instance), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
780
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
781 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
782 for (list= running_plugins; list != NULL; list = g_slist_next(list)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
783 gint row;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
784 gchar *line[1];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
785 plugin_instance *instance = (plugin_instance *) list->data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
786
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
787 line[0] = (char *) instance->descriptor->Name;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
788 row = gtk_clist_append(GTK_CLIST (run_clist), line);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
789 gtk_clist_set_row_data(GTK_CLIST (run_clist), row, (gpointer) instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
790 gtk_clist_select_row(GTK_CLIST(run_clist), row, 0);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
791 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
792 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
793 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
794
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
795 static plugin_instance * add_plugin (ladspa_plugin *plugin)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
796 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
797 plugin_instance *instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
798 char * line[1];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
799 gint row;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
800
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
801 if (plugin == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
802 return NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
803 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
804
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
805 instance = load(plugin->filename, plugin->id);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
806 if (instance == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
807 return NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
808 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
809
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
810 instance->stereo = plugin->stereo;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
811 if (state.srate && state.running) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
812 /* Jump right in */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
813 boot_plugin(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
814 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
815
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
816 if (run_clist) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
817 line[0] = (char *) instance->descriptor->Name;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
818 row = gtk_clist_append(GTK_CLIST (run_clist), line);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
819 gtk_clist_set_row_data(GTK_CLIST (run_clist), row, (gpointer) instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
820 gtk_clist_select_row(GTK_CLIST(run_clist), row, 0);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
821 draw_plugin(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
822 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
823 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
824 running_plugins = g_slist_append(running_plugins, instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
825 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
826
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
827 return instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
828 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
829
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
830
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
831 static void unselect_plugin(GtkCList *clist, gint row, gint column,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
832 GdkEventButton *event, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
833 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
834 selected_plugin= NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
835 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
836
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
837 static void select_plugin(GtkCList *clist, gint row, gint column,
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
838 GdkEventButton *event, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
839 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
840 selected_plugin = (ladspa_plugin *) gtk_clist_get_row_data(clist, row);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
841 gtk_clist_unselect_all(GTK_CLIST(run_clist));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
842 if (event->type == GDK_2BUTTON_PRESS) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
843 /* Double click */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
844 add_plugin(selected_plugin);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
845 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
846 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
847
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
848 static GtkWidget * make_plugin_clist(void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
849 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
850 ladspa_plugin *plugin;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
851 GSList *list;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
852 GtkWidget *clist;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
853 char number[14];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
854 char * titles[2] = { "UID", "Name" };
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
855 char * line[2];
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
856 gint row;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
857
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
858 find_all_plugins();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
859
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
860 clist = gtk_clist_new_with_titles(2, titles);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
861 gtk_clist_column_titles_active(GTK_CLIST (clist));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
862 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
863 gtk_clist_set_sort_column(GTK_CLIST (clist), 1);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
864
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
865 for (list= plugin_list; list != NULL; list = g_slist_next(list)) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
866 plugin = (ladspa_plugin *) list->data;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
867 snprintf(number, sizeof(number), "%ld", plugin->unique_id);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
868 line[0] = number;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
869 line[1] = plugin->name;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
870 row = gtk_clist_append(GTK_CLIST (clist), line);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
871 gtk_clist_set_row_data(GTK_CLIST (clist), row, (gpointer) plugin);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
872 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
873 gtk_clist_sort(GTK_CLIST (clist));
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
874
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
875 gtk_signal_connect(GTK_OBJECT(clist), "click-column",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
876 GTK_SIGNAL_FUNC(sort_column), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
877 gtk_signal_connect(GTK_OBJECT(clist), "select-row",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
878 GTK_SIGNAL_FUNC(select_plugin), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
879 gtk_signal_connect(GTK_OBJECT(clist), "unselect-row",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
880 GTK_SIGNAL_FUNC(unselect_plugin), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
881
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
882 return clist;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
883 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
884
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
885 static void add_plugin_clicked (GtkButton *button, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
886 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
887 add_plugin(selected_plugin);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
888 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
889
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
890 static void remove_plugin_clicked (GtkButton *button, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
891 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
892 plugin_instance *instance = selected_instance;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
893 gint row;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
894
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
895 if (instance == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
896 return;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
897 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
898 row = gtk_clist_find_row_from_data(GTK_CLIST(run_clist), (gpointer) instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
899 gtk_clist_remove(GTK_CLIST(run_clist), row);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
900
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
901 G_LOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
902 running_plugins = g_slist_remove(running_plugins, instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
903 unload(instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
904 G_UNLOCK (running_plugins);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
905 selected_instance= NULL;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
906 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
907
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
908 static void configure_plugin_clicked (GtkButton *button, gpointer user_data)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
909 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
910 if (selected_instance) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
911 draw_plugin(selected_instance);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
912 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
913 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
914
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
915 static void configure(void)
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
916 {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
917 GtkWidget *widget, *vbox, *hbox, *bbox, *frame;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
918
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
919 if (config_window) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
920 /* just show the window */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
921 gtk_widget_show(config_window);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
922 return;
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
923 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
924
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
925 config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
926 vbox= gtk_vbox_new(FALSE, 0);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
927 hbox= gtk_hbox_new(TRUE, 0);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
928
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
929 frame= gtk_frame_new("Installed plugins");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
930 widget = gtk_scrolled_window_new(NULL, NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
931 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
932 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
933 gtk_container_add(GTK_CONTAINER(widget), make_plugin_clist());
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
934 gtk_container_add(GTK_CONTAINER(frame), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
935 gtk_container_add(GTK_CONTAINER(hbox), frame);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
936
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
937
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
938 frame= gtk_frame_new("Running plugins");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
939 widget = gtk_scrolled_window_new(NULL, NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
940 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
941 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
942 if (run_clist == NULL) {
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
943 make_run_clist();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
944 }
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
945 gtk_container_add(GTK_CONTAINER(widget), run_clist);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
946 gtk_container_add(GTK_CONTAINER(frame), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
947 gtk_container_add(GTK_CONTAINER(hbox), frame);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
948 gtk_container_add(GTK_CONTAINER(vbox), hbox);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
949
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
950 /* Buttons */
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
951 bbox = gtk_hbutton_box_new();
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
952 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
953 widget = gtk_button_new_with_label("Add");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
954 gtk_signal_connect(GTK_OBJECT(widget), "clicked",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
955 GTK_SIGNAL_FUNC(add_plugin_clicked), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
956 gtk_box_pack_end_defaults(GTK_BOX(bbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
957 widget = gtk_button_new_with_label("Remove");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
958 gtk_signal_connect(GTK_OBJECT(widget), "clicked",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
959 GTK_SIGNAL_FUNC(remove_plugin_clicked), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
960 gtk_box_pack_end_defaults(GTK_BOX(bbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
961 widget = gtk_button_new_with_label("Configure");
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
962 gtk_signal_connect(GTK_OBJECT(widget), "clicked",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
963 GTK_SIGNAL_FUNC(configure_plugin_clicked), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
964 gtk_box_pack_end_defaults(GTK_BOX(bbox), widget);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
965
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
966 gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
967
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
968 gtk_container_add(GTK_CONTAINER(config_window), vbox);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
969
280
374a11c096d2 [svn] typo fix
nenolod
parents: 277
diff changeset
970 gtk_window_set_title(GTK_WINDOW(config_window), "LADSPA Plugin Catalog");
277
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
971 gtk_widget_set_usize(config_window, 380, 400);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
972 gtk_signal_connect (GTK_OBJECT (config_window), "delete_event",
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
973 GTK_SIGNAL_FUNC (gtk_widget_hide_on_delete), NULL);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
974
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
975 gtk_widget_show_all(config_window);
0cf2cc6d0fe5 [svn] Ladspa host module for Audacious.
nenolod
parents:
diff changeset
976 }