static xmms_xform_t * add_effects (xmms_xform_t *last, xmms_medialib_entry_t entry, GList *goal_formats) { gint effect_no; for (effect_no = 0; TRUE; effect_no++) { xmms_config_property_t *cfg; gchar key[64]; const gchar *name; g_snprintf (key, sizeof (key), "effect.order.%i", effect_no); cfg = xmms_config_lookup (key); if (!cfg) { break; } name = xmms_config_property_get_string (cfg); if (!name[0]) { continue; } last = xmms_xform_new_effect (last, entry, goal_formats, name); } return last; }
xmms_xform_t * xmms_xform_chain_setup_url_session (xmms_medialib_t *medialib, xmms_medialib_session_t *session, xmms_medialib_entry_t entry, const gchar *url, GList *goal_formats, gboolean rehash) { xmms_xform_t *last; xmms_plugin_t *plugin; xmms_xform_plugin_t *xform_plugin; gboolean add_segment = FALSE; gint priority; last = chain_setup (medialib, entry, url, goal_formats); if (!last) { return NULL; } /* first check that segment plugin is available in the system */ plugin = xmms_plugin_find (XMMS_PLUGIN_TYPE_XFORM, "segment"); xform_plugin = (xmms_xform_plugin_t *) plugin; /* if segment plugin input is the same as current output, include it * for collecting additional duration metadata on audio entries */ if (xform_plugin) { add_segment = xmms_xform_plugin_supports (xform_plugin, last->out_type, &priority); xmms_object_unref (plugin); } /* add segment plugin to the chain if it can be added */ if (add_segment) { last = xmms_xform_new_effect (last, entry, goal_formats, "segment"); if (!last) { return NULL; } } /* if not rehashing, also initialize all the effect plugins */ if (!rehash) { last = add_effects (last, entry, goal_formats); if (!last) { return NULL; } } chain_finalize (session, last, entry, url, rehash); return last; }