static gboolean xmms_xform_match (xmms_plugin_t *plugin, gpointer user_data) { xmms_xform_plugin_t *xform_plugin = (xmms_xform_plugin_t *) plugin; match_state_t *state = (match_state_t *) user_data; gint priority = 0; g_assert (plugin->type == XMMS_PLUGIN_TYPE_XFORM); XMMS_DBG ("Trying plugin '%s'", xmms_plugin_shortname_get (plugin)); if (!xmms_xform_plugin_supports (xform_plugin, state->out_type, &priority)) { return TRUE; } XMMS_DBG ("Plugin '%s' matched (priority %d)", xmms_plugin_shortname_get (plugin), priority); if (priority > state->priority) { if (state->match) { xmms_plugin_t *previous_plugin = (xmms_plugin_t *) state->match; XMMS_DBG ("Using plugin '%s' (priority %d) instead of '%s' (priority %d)", xmms_plugin_shortname_get (plugin), priority, xmms_plugin_shortname_get (previous_plugin), state->priority); } state->match = xform_plugin; state->priority = priority; } return TRUE; }
const char * xmms_xform_shortname (xmms_xform_t *xform) { return (xform->plugin) ? xmms_plugin_shortname_get ((xmms_plugin_t *) xform->plugin) : "unknown"; }
void xmms_xform_plugin_methods_set (xmms_xform_plugin_t *plugin, xmms_xform_methods_t *methods) { g_return_if_fail (plugin); g_return_if_fail (plugin->plugin.type == XMMS_PLUGIN_TYPE_XFORM); XMMS_DBG ("Registering xform '%s'", xmms_plugin_shortname_get ((xmms_plugin_t *) plugin)); memcpy (&plugin->methods, methods, sizeof (xmms_xform_methods_t)); }
void xmms_output_set_error (xmms_output_t *output, xmms_error_t *error) { g_return_if_fail (output); xmms_output_status_set (output, XMMS_PLAYBACK_STATUS_STOP); if (error) { xmms_log_error ("Output plugin %s reported error, '%s'", xmms_plugin_shortname_get ((xmms_plugin_t *)output->plugin), xmms_error_message_get (error)); } }
static xmms_xform_t * xmms_xform_new_effect (xmms_xform_t *last, xmms_medialib_entry_t entry, GList *goal_formats, const gchar *name) { xmms_plugin_t *plugin; xmms_xform_plugin_t *xform_plugin; xmms_xform_t *xform; gint priority; plugin = xmms_plugin_find (XMMS_PLUGIN_TYPE_XFORM, name); if (!plugin) { xmms_log_error ("Couldn't find any effect named '%s'", name); return last; } xform_plugin = (xmms_xform_plugin_t *) plugin; if (!xmms_xform_plugin_supports (xform_plugin, last->out_type, &priority)) { xmms_log_info ("Effect '%s' doesn't support format, skipping", xmms_plugin_shortname_get (plugin)); xmms_object_unref (plugin); return last; } xform = xmms_xform_new (xform_plugin, last, entry, goal_formats); if (xform) { xmms_object_unref (last); last = xform; } else { xmms_log_info ("Effect '%s' failed to initialize, skipping", xmms_plugin_shortname_get (plugin)); } xmms_xform_plugin_config_property_register (xform_plugin, "enabled", "0", NULL, NULL); xmms_object_unref (plugin); return last; }
/** * @internal * Lookup the value of a plugin's config property, given the property key. * @param[in] plugin The plugin * @param[in] key The property key (config path) * @return A config value * @todo config value <-> property fixup */ xmms_config_property_t * xmms_plugin_config_lookup (xmms_plugin_t *plugin, const gchar *key) { gchar path[XMMS_PLUGIN_SHORTNAME_MAX_LEN + 256]; xmms_config_property_t *prop; g_return_val_if_fail (plugin, NULL); g_return_val_if_fail (key, NULL); g_snprintf (path, sizeof (path), "%s.%s", xmms_plugin_shortname_get (plugin), key); prop = xmms_config_lookup (path); return prop; }
static gboolean xmms_main_client_list_foreach (xmms_plugin_t *plugin, gpointer data) { xmmsv_t *dict; GList **list = data; dict = xmmsv_build_dict ( XMMSV_DICT_ENTRY_STR ("name", xmms_plugin_name_get (plugin)), XMMSV_DICT_ENTRY_STR ("shortname", xmms_plugin_shortname_get (plugin)), XMMSV_DICT_ENTRY_STR ("version", xmms_plugin_version_get (plugin)), XMMSV_DICT_ENTRY_STR ("description", xmms_plugin_description_get (plugin)), XMMSV_DICT_ENTRY_INT ("type", xmms_plugin_type_get (plugin)), XMMSV_DICT_END); *list = g_list_prepend (*list, dict); return TRUE; }
/** * @internal * Register a config property for a plugin. * @param[in] plugin The plugin * @param[in] name The property name * @param[in] default_value The default value for the property * @param[in] cb A callback function to be executed when the property value * changes * @param[in] userdata Pointer to data to be passed to the callback * @todo config value <-> property fixup */ xmms_config_property_t * xmms_plugin_config_property_register (xmms_plugin_t *plugin, const gchar *name, const gchar *default_value, xmms_object_handler_t cb, gpointer userdata) { gchar fullpath[XMMS_PLUGIN_SHORTNAME_MAX_LEN + 256]; xmms_config_property_t *prop; g_return_val_if_fail (plugin, NULL); g_return_val_if_fail (name, NULL); g_return_val_if_fail (default_value, NULL); g_snprintf (fullpath, sizeof (fullpath), "%s.%s", xmms_plugin_shortname_get (plugin), name); prop = xmms_config_property_register (fullpath, default_value, cb, userdata); return prop; }