/** * @internal */ static gboolean xmms_output_format_set (xmms_output_t *output, xmms_stream_type_t *fmt) { g_return_val_if_fail (output, FALSE); g_return_val_if_fail (fmt, FALSE); XMMS_DBG ("Setting format!"); if (!xmms_output_plugin_format_set_always (output->plugin)) { if (output->format && xmms_stream_type_match (output->format, fmt)) { XMMS_DBG ("audio formats are equal, not updating"); return TRUE; } xmms_object_unref (output->format); xmms_object_ref (fmt); output->format = fmt; return xmms_output_plugin_method_format_set (output->plugin, output, output->format); } else { if (output->format && !xmms_stream_type_match (output->format, fmt)) { xmms_object_unref (output->format); xmms_object_ref (fmt); output->format = fmt; } if (!output->format) { xmms_object_unref (output->format); xmms_object_ref (fmt); output->format = fmt; } return xmms_output_plugin_method_format_set (output->plugin, output, output->format); } }
gboolean xmms_xform_plugin_supports (const xmms_xform_plugin_t *plugin, xmms_stream_type_t *st, gint *priority) { GList *t; g_return_val_if_fail (st, FALSE); g_return_val_if_fail (plugin, FALSE); g_return_val_if_fail (priority, FALSE); for (t = plugin->in_types; t; t = g_list_next (t)) { xmms_config_property_t *config_priority; const gchar *type_name; gchar *config_key; if (!xmms_stream_type_match (t->data, st)) { continue; } type_name = xmms_stream_type_get_str (t->data, XMMS_STREAM_TYPE_NAME); config_key = g_strconcat ("priority.", type_name, NULL); config_priority = xmms_plugin_config_lookup ((xmms_plugin_t *) plugin, config_key); g_free (config_key); if (config_priority) { *priority = xmms_config_property_get_int (config_priority); } else { *priority = XMMS_STREAM_TYPE_PRIORITY_DEFAULT; } return TRUE; } return FALSE; }
static gboolean has_goalformat (xmms_xform_t *xform, GList *goal_formats) { const xmms_stream_type_t *current; gboolean ret = FALSE; GList *n; current = xmms_xform_get_out_stream_type (xform); for (n = goal_formats; n; n = g_list_next (n)) { xmms_stream_type_t *goal_type = n->data; if (xmms_stream_type_match (goal_type, current)) { ret = TRUE; break; } } if (!ret) { XMMS_DBG ("Not in one of %d goal-types", g_list_length (goal_formats)); } return ret; }