From bd20d2d19907f0474e55d1ca8447e182b307ba12 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 15 Aug 2011 14:32:17 +0200 Subject: [PATCH] structure: add function to fixate Add a function to fixate a structure and use it for the default fixate function in gstpad.c. --- gst/gstpad.c | 17 ++--------------- gst/gststructure.c | 26 ++++++++++++++++++++++++++ gst/gststructure.h | 1 + 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/gst/gstpad.c b/gst/gstpad.c index 5b258f8..4cfcea8 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 9f66bc9..b04236e 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 e96799e..41d4dfe 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 -- 2.7.4