gst: Use G_VALUE_COLLECT_INIT if available

This brings total call speedups between 5% and 25%.
gst_caps_set_simple_valist: +5%
gst_structure_set_valist: + 10%
gst_structure_id_set_valist: +25%
gst_tag_list_add_valist: +5%

Measured using valgrind when run over the discovery of 200 media files.

Fixes #610256
This commit is contained in:
Edward Hervey 2010-02-17 13:02:43 +01:00
parent 253ebab319
commit bbe26d36ba
4 changed files with 21 additions and 3 deletions

View file

@ -940,9 +940,12 @@ gst_caps_set_simple_valist (GstCaps * caps, const char *field, va_list varargs)
g_warning ("Don't use G_TYPE_DATE, use GST_TYPE_DATE instead\n");
type = GST_TYPE_DATE;
}
#ifndef G_VALUE_COLLECT_INIT
g_value_init (&value, type);
G_VALUE_COLLECT (&value, varargs, 0, &err);
#else
G_VALUE_COLLECT_INIT (&value, type, varargs, 0, &err);
#endif
if (G_UNLIKELY (err)) {
g_critical ("%s", err);
return;

View file

@ -388,8 +388,13 @@ gst_child_proxy_set_valist (GstObject * object,
if (!gst_child_proxy_lookup (object, name, &target, &pspec))
goto not_found;
#ifndef G_VALUE_COLLECT_INIT
g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
G_VALUE_COLLECT (&value, var_args, G_VALUE_NOCOPY_CONTENTS, &error);
#else
G_VALUE_COLLECT_INIT (&value, pspec->value_type, var_args,
G_VALUE_NOCOPY_CONTENTS, &error);
#endif
if (error)
goto cant_copy;

View file

@ -517,9 +517,12 @@ gst_structure_set_valist (GstStructure * structure,
g_warning ("Don't use G_TYPE_DATE, use GST_TYPE_DATE instead\n");
type = GST_TYPE_DATE;
}
#ifndef G_VALUE_COLLECT_INIT
g_value_init (&field.value, type);
G_VALUE_COLLECT (&field.value, varargs, 0, &err);
#else
G_VALUE_COLLECT_INIT (&field.value, type, varargs, 0, &err);
#endif
if (G_UNLIKELY (err)) {
g_critical ("%s", err);
return;
@ -587,9 +590,12 @@ gst_structure_id_set_valist (GstStructure * structure,
g_warning ("Don't use G_TYPE_DATE, use GST_TYPE_DATE instead\n");
type = GST_TYPE_DATE;
}
#ifndef G_VALUE_COLLECT_INIT
g_value_init (&field.value, type);
G_VALUE_COLLECT (&field.value, varargs, 0, &err);
#else
G_VALUE_COLLECT_INIT (&field.value, type, varargs, 0, &err);
#endif
if (G_UNLIKELY (err)) {
g_critical ("%s", err);
return;

View file

@ -957,8 +957,12 @@ gst_tag_list_add_valist (GstTagList * list, GstTagMergeMode mode,
g_warning ("unknown tag '%s'", tag);
return;
}
#ifndef G_VALUE_COLLECT_INIT
g_value_init (&value, info->type);
G_VALUE_COLLECT (&value, var_args, 0, &error);
#else
G_VALUE_COLLECT_INIT (&value, info->type, var_args, 0, &error);
#endif
if (error) {
g_warning ("%s: %s", G_STRLOC, error);
g_free (error);