annotate audacious/pluginenum.c @ 1938:1d9c1026d9f8 trunk

[svn] - DoubleSize support. This has bugs, the most notable one being that DoubleSize only works right if you restart the player. The second bug is rather obvious too. No osmosis skinengine. No TinyPlayer. Classic-esque skinengine only. This is because the doublesize algorithm hates you and wants you to go die in a fire.
author nenolod
date Sun, 05 Nov 2006 04:43:16 -0800
parents a6e6d3500c13
children 94a720c9bfef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
1 /* BMP - Cross-platform multimedia player
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
2 * Copyright (C) 2003-2004 BMP development team.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
3 *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
4 * Based on XMMS:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
5 * Copyright (C) 1998-2003 XMMS development team.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
6 *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
1460
411b4aaf928b [svn] fine
nemo
parents: 1459
diff changeset
8 * it under the terms of the GNU General Public License as published by
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
10 * (at your option) any later version.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
11 *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
15 * GNU General Public License for more details.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
16 *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
1459
705d4c089fce [svn] Fix postal code.
chainsaw
parents: 1458
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
20 */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
21
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
22 #ifdef HAVE_CONFIG_H
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
23 # include "config.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
24 #endif
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
25
1631
20ff61083530 [svn] - make audtool build
nenolod
parents: 1566
diff changeset
26 #ifndef SHARED_SUFFIX
20ff61083530 [svn] - make audtool build
nenolod
parents: 1566
diff changeset
27 # define SHARED_SUFFIX G_MODULE_SUFFIX
20ff61083530 [svn] - make audtool build
nenolod
parents: 1566
diff changeset
28 #endif
20ff61083530 [svn] - make audtool build
nenolod
parents: 1566
diff changeset
29
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
30 #include "pluginenum.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
31
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
32 #include <glib.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
33 #include <gmodule.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
34 #include <glib/gprintf.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
35 #include <string.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
36
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
37 #include "controlsocket.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
38 #include "main.h"
1653
a6e6d3500c13 [svn] - revert back to r2216
nenolod
parents: 1649
diff changeset
39 #include "mainwin.h"
538
e4e897d20791 [svn] remove libaudcore, we never did anything with it
nenolod
parents: 380
diff changeset
40 #include "playback.h"
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
41 #include "playlist.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
42 #include "util.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
43
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
44 #include "effect.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
45 #include "general.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
46 #include "input.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
47 #include "output.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
48 #include "visualization.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
49
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
50 const gchar *plugin_dir_list[] = {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
51 PLUGINSUBS,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
52 NULL
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
53 };
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
54
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
55 GHashTable *plugin_matrix = NULL;
1563
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
56 GList *lowlevel_list = NULL;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
57
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
58 static gint
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
59 inputlist_compare_func(gconstpointer a, gconstpointer b)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
60 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
61 const InputPlugin *ap = a, *bp = b;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
62 return strcasecmp(ap->description, bp->description);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
63 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
64
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
65 static gint
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
66 outputlist_compare_func(gconstpointer a, gconstpointer b)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
67 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
68 const OutputPlugin *ap = a, *bp = b;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
69 return strcasecmp(ap->description, bp->description);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
70 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
71
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
72 static gint
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
73 effectlist_compare_func(gconstpointer a, gconstpointer b)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
74 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
75 const EffectPlugin *ap = a, *bp = b;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
76 return strcasecmp(ap->description, bp->description);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
77 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
78
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
79 static gint
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
80 generallist_compare_func(gconstpointer a, gconstpointer b)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
81 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
82 const GeneralPlugin *ap = a, *bp = b;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
83 return strcasecmp(ap->description, bp->description);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
84 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
85
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
86 static gint
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
87 vislist_compare_func(gconstpointer a, gconstpointer b)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
88 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
89 const VisPlugin *ap = a, *bp = b;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
90 return strcasecmp(ap->description, bp->description);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
91 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
92
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
93 static gboolean
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
94 plugin_is_duplicate(const gchar * filename)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
95 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
96 GList *l;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
97 const gchar *basename = g_basename(filename);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
98
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
99 /* FIXME: messy stuff */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
100
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
101 for (l = ip_data.input_list; l; l = g_list_next(l))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
102 if (!strcmp(basename, g_basename(INPUT_PLUGIN(l->data)->filename)))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
103 return TRUE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
104
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
105 for (l = op_data.output_list; l; l = g_list_next(l))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
106 if (!strcmp(basename, g_basename(OUTPUT_PLUGIN(l->data)->filename)))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
107 return TRUE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
108
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
109 for (l = ep_data.effect_list; l; l = g_list_next(l))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
110 if (!strcmp(basename, g_basename(EFFECT_PLUGIN(l->data)->filename)))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
111 return TRUE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
112
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
113 for (l = gp_data.general_list; l; l = g_list_next(l))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
114 if (!strcmp(basename, g_basename(GENERAL_PLUGIN(l->data)->filename)))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
115 return TRUE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
116
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
117 for (l = vp_data.vis_list; l; l = g_list_next(l))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
118 if (!strcmp(basename, g_basename(VIS_PLUGIN(l->data)->filename)))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
119 return TRUE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
120
1563
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
121 for (l = lowlevel_list; l; l = g_list_next(l))
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
122 if (!strcmp(basename, g_basename(VIS_PLUGIN(l->data)->filename)))
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
123 return TRUE;
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
124
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
125 return FALSE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
126 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
127
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
128
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
129 #define PLUGIN_GET_INFO(x) ((PluginGetInfoFunc)(x))()
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
130 typedef Plugin * (*PluginGetInfoFunc) (void);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
131
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
132 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
133 input_plugin_init(Plugin * plugin)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
134 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
135 InputPlugin *p = INPUT_PLUGIN(plugin);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
136
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
137 p->get_vis_type = input_get_vis_type;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
138 p->add_vis_pcm = input_add_vis_pcm;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
139
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
140 /* Pretty const casts courtesy of XMMS's plugin.h legacy. Anyone
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
141 else thinks we could use a CONST macro to solve the warnings?
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
142 - descender */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
143 p->set_info = (void (*)(gchar *, gint, gint, gint, gint)) playlist_set_info;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
144 p->set_info_text = (void (*)(gchar *)) input_set_info_text;
1273
3b990c26fc46 [svn] - Support for the buffer indicator in playpaus.png that was apparently
nhjm449
parents: 906
diff changeset
145 p->set_status_buffering = (void (*)(gboolean)) input_set_status_buffering;
3b990c26fc46 [svn] - Support for the buffer indicator in playpaus.png that was apparently
nhjm449
parents: 906
diff changeset
146
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
147 ip_data.input_list = g_list_append(ip_data.input_list, p);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
148
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
149 g_hash_table_replace(plugin_matrix, g_path_get_basename(p->filename),
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
150 GINT_TO_POINTER(1));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
151 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
152
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
153 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
154 output_plugin_init(Plugin * plugin)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
155 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
156 OutputPlugin *p = OUTPUT_PLUGIN(plugin);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
157 op_data.output_list = g_list_append(op_data.output_list, p);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
158 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
159
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
160 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
161 effect_plugin_init(Plugin * plugin)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
162 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
163 EffectPlugin *p = EFFECT_PLUGIN(plugin);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
164 ep_data.effect_list = g_list_append(ep_data.effect_list, p);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
165 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
166
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
167 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
168 general_plugin_init(Plugin * plugin)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
169 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
170 GeneralPlugin *p = GENERAL_PLUGIN(plugin);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
171 p->xmms_session = ctrlsocket_get_session_id();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
172 gp_data.general_list = g_list_append(gp_data.general_list, p);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
173 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
174
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
175 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
176 vis_plugin_init(Plugin * plugin)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
177 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
178 VisPlugin *p = VIS_PLUGIN(plugin);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
179 p->xmms_session = ctrlsocket_get_session_id();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
180 p->disable_plugin = vis_disable_plugin;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
181 vp_data.vis_list = g_list_append(vp_data.vis_list, p);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
182 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
183
1563
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
184 static void
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
185 lowlevel_plugin_init(Plugin * plugin)
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
186 {
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
187 LowlevelPlugin *p = LOWLEVEL_PLUGIN(plugin);
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
188 lowlevel_list = g_list_append(lowlevel_list, p);
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
189 }
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
190
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
191 /* FIXME: Placed here (hopefully) temporarily - descender */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
192
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
193 typedef struct {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
194 const gchar *name;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
195 const gchar *id;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
196 void (*init)(Plugin *);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
197 } PluginType;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
198
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
199 static PluginType plugin_types[] = {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
200 { "input" , "get_iplugin_info", input_plugin_init },
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
201 { "output" , "get_oplugin_info", output_plugin_init },
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
202 { "effect" , "get_eplugin_info", effect_plugin_init },
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
203 { "general" , "get_gplugin_info", general_plugin_init },
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
204 { "visualization", "get_vplugin_info", vis_plugin_init },
1563
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
205 { "lowlevel" , "get_lplugin_info", lowlevel_plugin_init },
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
206 { NULL, NULL, NULL }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
207 };
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
208
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
209 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
210 add_plugin(const gchar * filename)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
211 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
212 PluginType *type;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
213 GModule *module;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
214 gpointer func;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
215
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
216 if (plugin_is_duplicate(filename))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
217 return;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
218
834
0bb30ec2bce9 [svn] - revert pluginenum change (did no good)
nenolod
parents: 833
diff changeset
219 if (!(module = g_module_open(filename, 0))) {
12
b03906396b3a [svn] Debugging notices.
nenolod
parents: 0
diff changeset
220 printf("Failed to load plugin (%s): %s\n",
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
221 filename, g_module_error());
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
222 return;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
223 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
224
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
225 for (type = plugin_types; type->name; type++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
226 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
227 if (g_module_symbol(module, type->id, &func)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
228 Plugin *plugin = PLUGIN_GET_INFO(func);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
229
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
230 plugin->handle = module;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
231 plugin->filename = g_strdup(filename);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
232 type->init(PLUGIN_GET_INFO(func));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
233
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
234 return;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
235 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
236 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
237
12
b03906396b3a [svn] Debugging notices.
nenolod
parents: 0
diff changeset
238 printf("Invalid plugin (%s)\n", filename);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
239 g_module_close(module);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
240 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
241
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
242 static gboolean
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
243 scan_plugin_func(const gchar * path, const gchar * basename, gpointer data)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
244 {
1631
20ff61083530 [svn] - make audtool build
nenolod
parents: 1566
diff changeset
245 if (!str_has_suffix_nocase(basename, SHARED_SUFFIX))
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
246 return FALSE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
247
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
248 if (!g_file_test(path, G_FILE_TEST_IS_REGULAR))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
249 return FALSE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
250
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
251 add_plugin(path);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
252
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
253 return FALSE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
254 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
255
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
256 static void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
257 scan_plugins(const gchar * path)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
258 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
259 dir_foreach(path, scan_plugin_func, NULL, NULL);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
260 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
261
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
262 void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
263 plugin_system_init(void)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
264 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
265 gchar *dir, **disabled;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
266 GList *node;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
267 OutputPlugin *op;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
268 InputPlugin *ip;
1566
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
269 LowlevelPlugin *lp;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
270 gint dirsel = 0, i = 0;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
271
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
272 if (!g_module_supported()) {
781
12c47704b4b5 [svn] Add error reporting for many places, patch by external contributor Derek
nenolod
parents: 687
diff changeset
273 report_error("Module loading not supported! Plugins will not be loaded.\n");
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
274 return;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
275 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
276
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
277 plugin_matrix = g_hash_table_new_full(g_str_hash, g_int_equal, g_free,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
278 NULL);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
279
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
280 #ifndef DISABLE_USER_PLUGIN_DIR
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
281 scan_plugins(bmp_paths[BMP_PATH_USER_PLUGIN_DIR]);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
282 /*
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
283 * This is in a separate loop so if the user puts them in the
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
284 * wrong dir we'll still get them in the right order (home dir
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
285 * first) - Zinx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
286 */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
287 while (plugin_dir_list[dirsel]) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
288 dir = g_build_filename(bmp_paths[BMP_PATH_USER_PLUGIN_DIR],
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
289 plugin_dir_list[dirsel++], NULL);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
290 scan_plugins(dir);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
291 g_free(dir);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
292 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
293 dirsel = 0;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
294 #endif
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
295
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
296 while (plugin_dir_list[dirsel]) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
297 dir = g_build_filename(PLUGIN_DIR, plugin_dir_list[dirsel++], NULL);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
298 scan_plugins(dir);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
299 g_free(dir);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
300 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
301
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
302 op_data.output_list = g_list_sort(op_data.output_list, outputlist_compare_func);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
303 if (!op_data.current_output_plugin
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
304 && g_list_length(op_data.output_list)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
305 op_data.current_output_plugin = op_data.output_list->data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
306 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
307
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
308 ip_data.input_list = g_list_sort(ip_data.input_list, inputlist_compare_func);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
309
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
310 ep_data.effect_list = g_list_sort(ep_data.effect_list, effectlist_compare_func);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
311 ep_data.enabled_list = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
312
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
313 gp_data.general_list = g_list_sort(gp_data.general_list, generallist_compare_func);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
314 gp_data.enabled_list = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
315
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
316 vp_data.vis_list = g_list_sort(vp_data.vis_list, vislist_compare_func);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
317 vp_data.enabled_list = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
318
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
319 general_enable_from_stringified_list(cfg.enabled_gplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
320 vis_enable_from_stringified_list(cfg.enabled_vplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
321 effect_enable_from_stringified_list(cfg.enabled_eplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
322
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
323 g_free(cfg.enabled_gplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
324 cfg.enabled_gplugins = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
325
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
326 g_free(cfg.enabled_vplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
327 cfg.enabled_vplugins = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
328
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
329 g_free(cfg.enabled_eplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
330 cfg.enabled_eplugins = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
331
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
332 for (node = op_data.output_list; node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
333 op = OUTPUT_PLUGIN(node->data);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
334 /*
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
335 * Only test basename to avoid problems when changing
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
336 * prefix. We will only see one plugin with the same
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
337 * basename, so this is usually what the user want.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
338 */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
339 if (!strcmp(g_basename(cfg.outputplugin), g_basename(op->filename)))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
340 op_data.current_output_plugin = op;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
341 if (op->init)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
342 op->init();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
343 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
344
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
345 for (node = ip_data.input_list; node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
346 ip = INPUT_PLUGIN(node->data);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
347 if (ip->init)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
348 ip->init();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
349 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
350
1566
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
351 for (node = lowlevel_list; node; node = g_list_next(node)) {
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
352 lp = LOWLEVEL_PLUGIN(node->data);
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
353 if (lp->init)
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
354 lp->init();
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
355 }
e513069caf71 [svn] - pls and m3u is now fully modular
nenolod
parents: 1563
diff changeset
356
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
357 if (cfg.disabled_iplugins) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
358 disabled = g_strsplit(cfg.disabled_iplugins, ":", 0);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
359 while (disabled[i]) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
360 g_hash_table_replace(plugin_matrix, disabled[i],
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
361 GINT_TO_POINTER(FALSE));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
362 i++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
363 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
364
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
365 g_free(disabled);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
366
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
367 g_free(cfg.disabled_iplugins);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
368 cfg.disabled_iplugins = NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
369 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
370 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
371
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
372 void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
373 plugin_system_cleanup(void)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
374 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
375 InputPlugin *ip;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
376 OutputPlugin *op;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
377 EffectPlugin *ep;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
378 GeneralPlugin *gp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
379 VisPlugin *vp;
1563
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
380 LowlevelPlugin *lp;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
381 GList *node;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
382
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
383 g_message("Shutting down plugin system");
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
384
906
704c0b2e5f6b [svn] - this should be it for now
nhjm449
parents: 834
diff changeset
385 if (bmp_playback_get_playing()) {
704c0b2e5f6b [svn] - this should be it for now
nhjm449
parents: 834
diff changeset
386 ip_data.stop = TRUE;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
387 bmp_playback_stop();
906
704c0b2e5f6b [svn] - this should be it for now
nhjm449
parents: 834
diff changeset
388 ip_data.stop = FALSE;
704c0b2e5f6b [svn] - this should be it for now
nhjm449
parents: 834
diff changeset
389 }
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
390
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
391 for (node = get_input_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
392 ip = INPUT_PLUGIN(node->data);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
393 if (ip && ip->cleanup) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
394 ip->cleanup();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
395 GDK_THREADS_LEAVE();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
396 while (g_main_iteration(FALSE));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
397 GDK_THREADS_ENTER();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
398 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
399 g_module_close(ip->handle);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
400 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
401
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
402 if (ip_data.input_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
403 g_list_free(ip_data.input_list);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
404
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
405 for (node = get_output_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
406 op = OUTPUT_PLUGIN(node->data);
309
b04ce1c98b6f [svn] Plugin cleanup functionality, via giacomo.
nenolod
parents: 284
diff changeset
407 if (op && op->cleanup) {
b04ce1c98b6f [svn] Plugin cleanup functionality, via giacomo.
nenolod
parents: 284
diff changeset
408 op->cleanup();
b04ce1c98b6f [svn] Plugin cleanup functionality, via giacomo.
nenolod
parents: 284
diff changeset
409 GDK_THREADS_LEAVE();
b04ce1c98b6f [svn] Plugin cleanup functionality, via giacomo.
nenolod
parents: 284
diff changeset
410 while (g_main_iteration(FALSE));
b04ce1c98b6f [svn] Plugin cleanup functionality, via giacomo.
nenolod
parents: 284
diff changeset
411 GDK_THREADS_ENTER();
b04ce1c98b6f [svn] Plugin cleanup functionality, via giacomo.
nenolod
parents: 284
diff changeset
412 }
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
413 g_module_close(op->handle);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
414 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
415
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
416 if (op_data.output_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
417 g_list_free(op_data.output_list);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
418
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
419 for (node = get_effect_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
420 ep = EFFECT_PLUGIN(node->data);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
421 if (ep && ep->cleanup) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
422 ep->cleanup();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
423 GDK_THREADS_LEAVE();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
424 while (g_main_iteration(FALSE));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
425 GDK_THREADS_ENTER();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
426 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
427 g_module_close(ep->handle);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
428 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
429
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
430 if (ep_data.effect_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
431 g_list_free(ep_data.effect_list);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
432
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
433 for (node = get_general_enabled_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
434 gp = GENERAL_PLUGIN(node->data);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
435 enable_general_plugin(g_list_index(gp_data.general_list, gp), FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
436 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
437
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
438 if (gp_data.enabled_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
439 g_list_free(gp_data.enabled_list);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
440
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
441 GDK_THREADS_LEAVE();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
442 while (g_main_iteration(FALSE));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
443 GDK_THREADS_ENTER();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
444
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
445 for (node = get_general_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
446 gp = GENERAL_PLUGIN(node->data);
650
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
447 if (gp && gp->cleanup) {
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
448 gp->cleanup();
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
449 GDK_THREADS_LEAVE();
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
450 while (g_main_iteration(FALSE));
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
451 GDK_THREADS_ENTER();
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
452 }
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
453 g_module_close(gp->handle);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
454 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
455
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
456 if (gp_data.general_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
457 g_list_free(gp_data.general_list);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
458
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
459 for (node = get_vis_enabled_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
460 vp = VIS_PLUGIN(node->data);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
461 enable_vis_plugin(g_list_index(vp_data.vis_list, vp), FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
462 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
463
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
464 if (vp_data.enabled_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
465 g_list_free(vp_data.enabled_list);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
466
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
467 GDK_THREADS_LEAVE();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
468 while (g_main_iteration(FALSE));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
469 GDK_THREADS_ENTER();
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
470
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
471 for (node = get_vis_list(); node; node = g_list_next(node)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
472 vp = VIS_PLUGIN(node->data);
650
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
473 if (vp && vp->cleanup) {
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
474 vp->cleanup();
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
475 GDK_THREADS_LEAVE();
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
476 while (g_main_iteration(FALSE));
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
477 GDK_THREADS_ENTER();
980d651da2fc [svn] Actually use the cleanup hooks on general & visualization plugins.
chainsaw
parents: 538
diff changeset
478 }
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
479 g_module_close(vp->handle);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
480 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
481
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
482 if (vp_data.vis_list)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
483 g_list_free(vp_data.vis_list);
1563
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
484
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
485 for (node = lowlevel_list; node; node = g_list_next(node)) {
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
486 lp = LOWLEVEL_PLUGIN(node->data);
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
487 if (lp && lp->cleanup) {
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
488 lp->cleanup();
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
489 GDK_THREADS_LEAVE();
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
490 while (g_main_iteration(FALSE));
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
491 GDK_THREADS_ENTER();
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
492 }
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
493 g_module_close(lp->handle);
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
494 }
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
495
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
496 if (lowlevel_list)
c4640c88942d [svn] - lowlevel plugin stuff
nenolod
parents: 1460
diff changeset
497 g_list_free(lowlevel_list);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
498 }