libs/base/typefindhelper: Remove useless typechecking in tight loop

The list against which we run the comparefunc will only contain
GstPluginFeature, therefore remove the 6 expensive type checks we do
for every single comparision.
This commit is contained in:
Edward Hervey 2009-10-18 17:17:17 +02:00
parent 7d86ad93a2
commit bb0918279f

View file

@ -41,15 +41,15 @@
#include "gsttypefindhelper.h"
static gint
type_find_factory_rank_cmp (gconstpointer fac1, gconstpointer fac2)
type_find_factory_rank_cmp (const GstPluginFeature * fac1,
const GstPluginFeature * fac2)
{
if (GST_PLUGIN_FEATURE (fac1)->rank != GST_PLUGIN_FEATURE (fac2)->rank)
return GST_PLUGIN_FEATURE (fac2)->rank - GST_PLUGIN_FEATURE (fac1)->rank;
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 (GST_PLUGIN_FEATURE_NAME (fac1),
GST_PLUGIN_FEATURE_NAME (fac2));
return strcmp (fac1->name, fac2->name);
}
/* ********************** typefinding in pull mode ************************ */
@ -281,7 +281,8 @@ gst_type_find_helper_get_range (GstObject * obj,
/* 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, type_find_factory_rank_cmp);
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);
@ -455,7 +456,8 @@ gst_type_find_helper_for_buffer (GstObject * obj, GstBuffer * buf,
/* 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, type_find_factory_rank_cmp);
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);
@ -504,7 +506,8 @@ gst_type_find_helper_for_extension (GstObject * obj, const gchar * extension)
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, type_find_factory_rank_cmp);
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;