From: <tp...@ke...> - 2007-07-08 14:12:15
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: tpm Date: Sun Jul 08 2007 14:12:07 UTC Log message: * gst/gststructure.c: (gst_structure_parse_value): When deserialising foo=bar without a type cast, check if it's a boolean before falling back to a string type, otherwise things like audiotestsrc ! audio/x-raw-int,signed=true ! fakesink won't work, because the filtercaps end up having a signed=(string)true field, which causes problems later when intersection caps. * tests/check/gst/gststructure.c: (GST_START_TEST): Add a unit test for this. Modified files: . : ChangeLog gst : gststructure.c tests/check/gst : gststructure.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.3313&r2=1.3314 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gststructure.c.diff?r1=1.83&r2=1.84 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/tests/check/gst/gststructure.c.diff?r1=1.12&r2=1.13 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.3313 retrieving revision 1.3314 diff -u -d -r1.3313 -r1.3314 --- ChangeLog 6 Jul 2007 21:50:02 -0000 1.3313 +++ ChangeLog 8 Jul 2007 14:11:52 -0000 1.3314 @@ -1,3 +1,15 @@ +2007-07-08 Tim-Philipp Müller <tim at centricular dot net> + + * gst/gststructure.c: (gst_structure_parse_value): + When deserialising foo=bar without a type cast, check if it's a + boolean before falling back to a string type, otherwise things like + audiotestsrc ! audio/x-raw-int,signed=true ! fakesink won't work, + because the filtercaps end up having a signed=(string)true field, + which causes problems later when intersection caps. + * tests/check/gst/gststructure.c: (GST_START_TEST): + Add a unit test for this. 2007-07-06 Sebastian Dröge <sl...@ci...> Reviewed by: Stefan Kost <en...@us...> Index: gststructure.c RCS file: /cvs/gstreamer/gstreamer/gst/gststructure.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -d -r1.83 -r1.84 --- gststructure.c 9 Jan 2007 15:38:58 -0000 1.83 +++ gststructure.c 8 Jul 2007 14:11:53 -0000 1.84 @@ -1769,10 +1769,12 @@ *value_end = 0; if (type == G_TYPE_INVALID) { GType try_types[] = - { G_TYPE_INT, G_TYPE_DOUBLE, GST_TYPE_FRACTION, G_TYPE_STRING }; + { G_TYPE_INT, G_TYPE_DOUBLE, GST_TYPE_FRACTION, G_TYPE_BOOLEAN, + G_TYPE_STRING + }; int i; - for (i = 0; i < 4; i++) { + for (i = 0; i < G_N_ELEMENTS (try_types); i++) { g_value_init (value, try_types[i]); ret = gst_value_deserialize (value, value_s); if (ret) RCS file: /cvs/gstreamer/gstreamer/tests/check/gst/gststructure.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- gststructure.c 2 Jul 2006 08:26:48 -0000 1.12 +++ gststructure.c 8 Jul 2007 14:11:53 -0000 1.13 @@ -107,6 +107,14 @@ fail_unless ((val = gst_structure_get_value (structure, "value")) != NULL); fail_unless (G_VALUE_HOLDS_STRING (val)); gst_structure_free (structure); + s = "test-string,value=true"; + structure = gst_structure_from_string (s, NULL); + fail_if (structure == NULL, "Could not get structure from string %s", s); + fail_unless ((val = gst_structure_get_value (structure, "value")) != NULL); + fail_unless (G_VALUE_HOLDS_BOOLEAN (val)); + fail_unless_equals_int (g_value_get_boolean (val), TRUE); + gst_structure_free (structure); } GST_END_TEST; |