set property value from a string
Gary Metalle
Gary.Metalle at rvl.co.uk
Thu Jul 23 12:58:37 UTC 2020
Just for completeness I sussed out the problem with validating a property value...
The return value from g_param_value_validate()? returns TRUE if it had to modify the value in order to keep the value within the bounds for the property and FALSE if the value you passed in was already good.
I think it's slightly confusing that a call to a function called g_param_value_validate? returns a FALSE value when it is given a valid parameter to validate, but never mind, once you understand how it works, it's easy.
I ignore the return value if it's FALSE and print out a whinge warning if TRUE that the property value has been set to a different (but valid) value compared to the requested value which was invalid.
Gary.
________________________________
From: gstreamer-devel <gstreamer-devel-bounces at lists.freedesktop.org> on behalf of Gary Metalle <Gary.Metalle at rvl.co.uk>
Sent: 23 July 2020 12:51
To: Discussion of the development of and with GStreamer
Subject: Re: set property value from a string
Hi Matt
Yes thanks for that, it seems to work fine. I actually used gst_util_set_value_from_string() which is a close relative.
I am having trouble checking whether the converted value is within bounds though, g_param_value_validate() always seems to return FALSE. I can live without checking for the moment, but if anyone spots anything obvious, let me know:
GValue prop_value = G_VALUE_INIT;
GParamSpec *realParamSpec;
realParamSpec = g_object_class_find_property(G_OBJECT_GET_CLASS("x264enc), "bitrate");
if (realParamSpec) {
g_value_init(&prop_value, G_PARAM_SPEC_VALUE_TYPE(realParamSpec));
gst_util_set_value_from_string(&prop_value, "500");
if (g_param_value_validate(realParamSpec, &prop_value)) {
// this is good
} else {
// not within bounds
}
} else // property doesn't exist
________________________________
From: Matthew Waters <ystreet00 at gmail.com>
Sent: 23 July 2020 11:04
To: Discussion of the development of and with GStreamer; Gary Metalle
Subject: Re: set property value from a string
gst_parse_launch() uses gst_util_set_object_arg(): https://gstreamer.freedesktop.org/documentation/gstreamer/gstutils.html?gi-language=c#gst_util_set_object_arg
On 23/7/20 8:00 pm, Gary Metalle wrote:
Is there a way to set a property value from a given string, i.e convert from G_STRING to whatever type is required for that property?
I have a string such as the following:
"byte-stream=TRUE rc-lookahead=0 tune=zerolatency speed-preset=ultrafast sync-lookahead=0"
That I split up into name/value pairs and then need to set each property.
I first use g_object_class_find_property() to find out if the named property exists and this is ok and it returns a GParamSpec which tells me the type of the property.
I've tried using g_value_transform() but this only seems to be able to cope with simple stuff like converting a double to an int etc. Is there no simple way to convert say a string of "TRUE" to a gboolean?
I have also tried g_param_convert() but didn't get anywhere with that either.
Someone must be doing it somehow because if you pass a pipeline string to gst_parse_launch() then it has to cope with this. It would be easy to custom write something for "TRUE"/"FALSE" to gboolean but not so for the enum types and the x264enc plugin has quite a few of those.
On a positive note I think g_param_value_validate() works when you want to check that a given value is within the range for the defined property, but it implies you've converted it to the correct type first.
_______________________________________________
gstreamer-devel mailing list
gstreamer-devel at lists.freedesktop.org<mailto:gstreamer-devel at lists.freedesktop.org>
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20200723/1370b3fc/attachment.htm>
More information about the gstreamer-devel
mailing list