comparison audacious/pluginenum.c @ 1563:c4640c88942d trunk

[svn] - lowlevel plugin stuff
author nenolod
date Thu, 10 Aug 2006 20:35:10 -0700
parents 411b4aaf928b
children e513069caf71
comparison
equal deleted inserted replaced
1562:71c91ebdb55c 1563:c4640c88942d
47 PLUGINSUBS, 47 PLUGINSUBS,
48 NULL 48 NULL
49 }; 49 };
50 50
51 GHashTable *plugin_matrix = NULL; 51 GHashTable *plugin_matrix = NULL;
52 GList *lowlevel_list = NULL;
52 53
53 static gint 54 static gint
54 inputlist_compare_func(gconstpointer a, gconstpointer b) 55 inputlist_compare_func(gconstpointer a, gconstpointer b)
55 { 56 {
56 const InputPlugin *ap = a, *bp = b; 57 const InputPlugin *ap = a, *bp = b;
108 for (l = gp_data.general_list; l; l = g_list_next(l)) 109 for (l = gp_data.general_list; l; l = g_list_next(l))
109 if (!strcmp(basename, g_basename(GENERAL_PLUGIN(l->data)->filename))) 110 if (!strcmp(basename, g_basename(GENERAL_PLUGIN(l->data)->filename)))
110 return TRUE; 111 return TRUE;
111 112
112 for (l = vp_data.vis_list; l; l = g_list_next(l)) 113 for (l = vp_data.vis_list; l; l = g_list_next(l))
114 if (!strcmp(basename, g_basename(VIS_PLUGIN(l->data)->filename)))
115 return TRUE;
116
117 for (l = lowlevel_list; l; l = g_list_next(l))
113 if (!strcmp(basename, g_basename(VIS_PLUGIN(l->data)->filename))) 118 if (!strcmp(basename, g_basename(VIS_PLUGIN(l->data)->filename)))
114 return TRUE; 119 return TRUE;
115 120
116 return FALSE; 121 return FALSE;
117 } 122 }
170 p->xmms_session = ctrlsocket_get_session_id(); 175 p->xmms_session = ctrlsocket_get_session_id();
171 p->disable_plugin = vis_disable_plugin; 176 p->disable_plugin = vis_disable_plugin;
172 vp_data.vis_list = g_list_append(vp_data.vis_list, p); 177 vp_data.vis_list = g_list_append(vp_data.vis_list, p);
173 } 178 }
174 179
180 static void
181 lowlevel_plugin_init(Plugin * plugin)
182 {
183 LowlevelPlugin *p = LOWLEVEL_PLUGIN(plugin);
184 lowlevel_list = g_list_append(lowlevel_list, p);
185 }
175 186
176 /* FIXME: Placed here (hopefully) temporarily - descender */ 187 /* FIXME: Placed here (hopefully) temporarily - descender */
177 188
178 typedef struct { 189 typedef struct {
179 const gchar *name; 190 const gchar *name;
185 { "input" , "get_iplugin_info", input_plugin_init }, 196 { "input" , "get_iplugin_info", input_plugin_init },
186 { "output" , "get_oplugin_info", output_plugin_init }, 197 { "output" , "get_oplugin_info", output_plugin_init },
187 { "effect" , "get_eplugin_info", effect_plugin_init }, 198 { "effect" , "get_eplugin_info", effect_plugin_init },
188 { "general" , "get_gplugin_info", general_plugin_init }, 199 { "general" , "get_gplugin_info", general_plugin_init },
189 { "visualization", "get_vplugin_info", vis_plugin_init }, 200 { "visualization", "get_vplugin_info", vis_plugin_init },
201 { "lowlevel" , "get_lplugin_info", lowlevel_plugin_init },
190 { NULL, NULL, NULL } 202 { NULL, NULL, NULL }
191 }; 203 };
192 204
193 static void 205 static void
194 add_plugin(const gchar * filename) 206 add_plugin(const gchar * filename)
352 InputPlugin *ip; 364 InputPlugin *ip;
353 OutputPlugin *op; 365 OutputPlugin *op;
354 EffectPlugin *ep; 366 EffectPlugin *ep;
355 GeneralPlugin *gp; 367 GeneralPlugin *gp;
356 VisPlugin *vp; 368 VisPlugin *vp;
369 LowlevelPlugin *lp;
357 GList *node; 370 GList *node;
358 371
359 g_message("Shutting down plugin system"); 372 g_message("Shutting down plugin system");
360 373
361 if (bmp_playback_get_playing()) { 374 if (bmp_playback_get_playing()) {
455 g_module_close(vp->handle); 468 g_module_close(vp->handle);
456 } 469 }
457 470
458 if (vp_data.vis_list) 471 if (vp_data.vis_list)
459 g_list_free(vp_data.vis_list); 472 g_list_free(vp_data.vis_list);
460 } 473
474 for (node = lowlevel_list; node; node = g_list_next(node)) {
475 lp = LOWLEVEL_PLUGIN(node->data);
476 if (lp && lp->cleanup) {
477 lp->cleanup();
478 GDK_THREADS_LEAVE();
479 while (g_main_iteration(FALSE));
480 GDK_THREADS_ENTER();
481 }
482 g_module_close(lp->handle);
483 }
484
485 if (lowlevel_list)
486 g_list_free(lowlevel_list);
487 }