summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2011-08-15 14:32:17 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2011-08-15 14:32:17 +0200
commitbd20d2d19907f0474e55d1ca8447e182b307ba12 (patch)
tree4123d38967e9e4af425442ab03f95ee67749e8f3
parentd12738b4fa3e058a2cb0a51c3e61085ec2010ac5 (diff)
downloadgstreamer-bd20d2d19907f0474e55d1ca8447e182b307ba12.tar.gz
structure: add function to fixate
Add a function to fixate a structure and use it for the default fixate function in gstpad.c.
-rw-r--r--gst/gstpad.c17
-rw-r--r--gst/gststructure.c26
-rw-r--r--gst/gststructure.h1
3 files changed, 29 insertions, 15 deletions
diff --git a/gst/gstpad.c b/gst/gstpad.c
index 5b258f85bb..4cfcea85e4 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -2488,19 +2488,6 @@ no_peer:
}
}
-static gboolean
-default_fixate (GQuark field_id, const GValue * value, gpointer data)
-{
- GstStructure *s = data;
- GValue v = { 0 };
-
- if (gst_value_fixate (&v, value)) {
- gst_structure_id_set_value (s, field_id, &v);
- g_value_unset (&v);
- }
- return TRUE;
-}
-
static void
gst_pad_default_fixate (GstPad * pad, GstCaps * caps)
{
@@ -2509,7 +2496,7 @@ gst_pad_default_fixate (GstPad * pad, GstCaps * caps)
/* default fixation */
gst_caps_truncate (caps);
s = gst_caps_get_structure (caps, 0);
- gst_structure_foreach (s, default_fixate, s);
+ gst_structure_fixate (s);
}
/**
@@ -2630,7 +2617,7 @@ is_same_caps:
#endif
no_func:
{
- GST_DEBUG_OBJECT (pad, "no acceptcase function");
+ GST_DEBUG_OBJECT (pad, "no acceptcaps function");
return FALSE;
}
}
diff --git a/gst/gststructure.c b/gst/gststructure.c
index 9f66bc9901..b04236ea7d 100644
--- a/gst/gststructure.c
+++ b/gst/gststructure.c
@@ -3191,3 +3191,29 @@ gst_structure_is_subset (const GstStructure * subset,
return gst_structure_foreach ((GstStructure *) subset,
gst_caps_structure_is_subset_field, (gpointer) superset);
}
+
+static gboolean
+default_fixate (GQuark field_id, const GValue * value, gpointer data)
+{
+ GstStructure *s = data;
+ GValue v = { 0 };
+
+ if (gst_value_fixate (&v, value)) {
+ gst_structure_id_set_value (s, field_id, &v);
+ g_value_unset (&v);
+ }
+ return TRUE;
+}
+
+/**
+ * gst_structure_fixate:
+ * @structure: a #GstStructure
+ *
+ * Fixate all values in @structure using gst_value_fixate().
+ * @structure will be modified in-place and should be writable.
+ */
+void
+gst_structure_fixate (GstStructure * structure)
+{
+ gst_structure_foreach (structure, default_fixate, structure);
+}
diff --git a/gst/gststructure.h b/gst/gststructure.h
index e96799e508..41d4dfe077 100644
--- a/gst/gststructure.h
+++ b/gst/gststructure.h
@@ -251,6 +251,7 @@ gboolean gst_structure_can_intersect(const GstStructure *struct1
const GstStructure *struct2);
GstStructure* gst_structure_intersect (const GstStructure *struct1,
const GstStructure *struct2);
+void gst_structure_fixate (GstStructure *structure);
G_END_DECLS