structure: add function to fixate
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 15 Aug 2011 12:32:17 +0000 (14:32 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 15 Aug 2011 12:32:17 +0000 (14:32 +0200)
Add a function to fixate a structure and use it for the default fixate function
in gstpad.c.

gst/gstpad.c
gst/gststructure.c
gst/gststructure.h

index 5b258f8..4cfcea8 100644 (file)
@@ -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;
   }
 }
index 9f66bc9..b04236e 100644 (file)
@@ -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);
+}
index e96799e..41d4dfe 100644 (file)
@@ -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