value: fix parsing of explicit value casts
authorMathieu Duponchelle <mathieu@centricular.com>
Wed, 17 Mar 2021 13:06:51 +0000 (14:06 +0100)
committerMathieu Duponchelle <mathieu@centricular.com>
Wed, 17 Mar 2021 13:11:39 +0000 (14:11 +0100)
Since acdb4ce03d525a18f6c351a040b8446c7bbd98bd , parsing of the
value for a property can use the pspec to determine what type
a value should be casted to.

However, this broke the case where the value is explicitly casted
to a type (eg <(float) 0.0>). In that situation, we want to respect
the casting decision, and only use the pspec to perform "implicit"
casts.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/881

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/772>

gst/gstvalue.c

index 607978c..66035a7 100644 (file)
@@ -2754,9 +2754,7 @@ _priv_gst_value_parse_value (gchar * str,
   /* check if there's a (type_name) 'cast' */
   type_name = NULL;
 
-  if (pspec) {
-    type = G_PARAM_SPEC_VALUE_TYPE (pspec);
-  } else if (*s == '(') {
+  if (*s == '(') {
     s++;
     while (g_ascii_isspace (*s))
       s++;
@@ -2782,6 +2780,8 @@ _priv_gst_value_parse_value (gchar * str,
       GST_WARNING ("invalid type");
       return FALSE;
     }
+  } else if (pspec) {
+    type = G_PARAM_SPEC_VALUE_TYPE (pspec);
   }
 
   while (g_ascii_isspace (*s))