diff --git a/ChangeLog b/ChangeLog index acb01df639..8d06cb59be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-02-27 Tim-Philipp Müller + + * libs/gst/base/gsttypefindhelper.c: (type_find_factory_rank_cmp), + (gst_type_find_helper): + Try typefinding factories with the highest rank first. + 2006-02-27 Tim-Philipp Müller * docs/libs/gstreamer-libs-docs.sgml: diff --git a/libs/gst/base/gsttypefindhelper.c b/libs/gst/base/gsttypefindhelper.c index 26328bedef..b568398351 100644 --- a/libs/gst/base/gsttypefindhelper.c +++ b/libs/gst/base/gsttypefindhelper.c @@ -40,9 +40,20 @@ #include "gsttypefindhelper.h" -/** - * typefind code here - */ +static gint +type_find_factory_rank_cmp (gconstpointer fac1, gconstpointer fac2) +{ + if (GST_PLUGIN_FEATURE (fac1)->rank != GST_PLUGIN_FEATURE (fac2)->rank) + return GST_PLUGIN_FEATURE (fac2)->rank - GST_PLUGIN_FEATURE (fac1)->rank; + + /* to make the order in which things happen more deterministic, + * sort by name when the ranks are the same. */ + return strcmp (GST_PLUGIN_FEATURE_NAME (fac1), + GST_PLUGIN_FEATURE_NAME (fac2)); +} + +/* ********************** typefinding in pull mode ************************ */ + typedef struct { GstPad *src; @@ -159,7 +170,9 @@ gst_type_find_helper (GstPad * src, guint64 size) g_return_val_if_fail (src != NULL, NULL); g_return_val_if_fail (GST_PAD_GETRANGEFUNC (src) != NULL, NULL); - walk = type_list = gst_type_find_factory_get_list (); + type_list = gst_type_find_factory_get_list (); + + type_list = g_list_sort (type_list, type_find_factory_rank_cmp); find.src = src; find.best_probability = 0; @@ -171,6 +184,8 @@ gst_type_find_helper (GstPad * src, guint64 size) gst_find.suggest = helper_find_suggest; gst_find.get_length = NULL; + walk = type_list; + while (walk) { GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (walk->data); @@ -248,18 +263,6 @@ buf_helper_find_suggest (gpointer data, guint prob, const GstCaps * caps) } } -static gint -type_find_factory_rank_cmp (gconstpointer fac1, gconstpointer fac2) -{ - if (GST_PLUGIN_FEATURE (fac1)->rank != GST_PLUGIN_FEATURE (fac2)->rank) - return GST_PLUGIN_FEATURE (fac2)->rank - GST_PLUGIN_FEATURE (fac1)->rank; - - /* to make the order in which things happen more deterministic, - * sort by name when the ranks are the same. */ - return strcmp (GST_PLUGIN_FEATURE_NAME (fac1), - GST_PLUGIN_FEATURE_NAME (fac2)); -} - /** * gst_type_find_helper_for_buffer: * @obj: object doing the typefinding, or NULL (used for logging)