Mercurial > audlegacy
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 } |
