return res;
}
+static gint
+type_find_factory_rank_cmp (const GstPluginFeature * fac1,
+ const GstPluginFeature * fac2)
+{
+ if (G_LIKELY (fac1->rank != fac2->rank))
+ return fac2->rank - fac1->rank;
+
+ /* to make the order in which things happen more deterministic,
+ * sort by name when the ranks are the same. */
+ return strcmp (fac1->name, fac2->name);
+}
+
static GList *
gst_registry_get_element_factory_list (GstRegistry * registry)
{
GST_OBJECT_LOCK (registry);
- gst_registry_get_feature_list_or_create (registry,
- ®istry->private->typefind_factory_list,
- ®istry->private->tfl_cookie, GST_TYPE_TYPE_FIND_FACTORY);
+ if (G_UNLIKELY (gst_registry_get_feature_list_or_create (registry,
+ ®istry->private->typefind_factory_list,
+ ®istry->private->tfl_cookie, GST_TYPE_TYPE_FIND_FACTORY)))
+ registry->private->typefind_factory_list =
+ g_list_sort (registry->private->typefind_factory_list,
+ (GCompareFunc) type_find_factory_rank_cmp);
/* Return reffed copy */
list =
* Gets the list of all registered typefind factories. You must free the
* list using gst_plugin_feature_list_free.
*
+ * The returned factories are sorted by highest rank first, and then by
+ * factory name. (behaviour change since 0.10.26)
+ *
* Returns: the list of all registered #GstTypeFindFactory.
*/
GList *
#include "gsttypefindhelper.h"
-static gint
-type_find_factory_rank_cmp (const GstPluginFeature * fac1,
- const GstPluginFeature * fac2)
-{
- if (G_LIKELY (fac1->rank != fac2->rank))
- return fac2->rank - fac1->rank;
-
- /* to make the order in which things happen more deterministic,
- * sort by name when the ranks are the same. */
- return strcmp (fac1->name, fac2->name);
-}
-
/* ********************** typefinding in pull mode ************************ */
static void
find.get_length = helper_find_get_length;
}
- /* FIXME: we need to keep this list within the registry */
type_list = gst_type_find_factory_get_list ();
- type_list =
- g_list_sort (type_list, (GCompareFunc) type_find_factory_rank_cmp);
for (l = type_list; l; l = l->next) {
helper.factory = GST_TYPE_FIND_FACTORY (l->data);
/* FIXME: we need to keep this list within the registry */
type_list = gst_type_find_factory_get_list ();
- type_list =
- g_list_sort (type_list, (GCompareFunc) type_find_factory_rank_cmp);
for (l = type_list; l; l = l->next) {
helper.factory = GST_TYPE_FIND_FACTORY (l->data);
GST_LOG_OBJECT (obj, "finding caps for extension %s", extension);
type_list = gst_type_find_factory_get_list ();
- type_list =
- g_list_sort (type_list, (GCompareFunc) type_find_factory_rank_cmp);
for (l = type_list; l; l = g_list_next (l)) {
GstTypeFindFactory *factory;