Property Loading/Saving¶
To allow for an easy serializing/desrializing of gstreamer filter state tcambin and tcamsrc have gobject properties tcam-properties and tcam-properties-json.
You can use these properties to load/save the current tcam-properties state.
tcam-properties¶
The property tcam-properties allows for easy initialization at the command line.
E.g.:
gst-launch-1.0 tcambin tcam-properties=tcam,ExposureAuto=Off,ExposureTime=33333 ! ...
tcam-properties is of type GstStructure. You can read/write this structure via the gobject interface.
Setting several properties via GstStructure:
GstElement* source = ...;
// Create a new structure
GstStructure* new_property_struct = gst_structure_new_empty("tcam-properties");
// Change 2 properties so that we can see a 'difference'
gst_structure_set(new_property_struct,
"ExposureAuto", G_TYPE_STRING, "Off",
"ExposureTime", G_TYPE_DOUBLE, 35000.,
NULL);
GValue new_state = G_VALUE_INIT;
g_value_init(&new_state, GST_TYPE_STRUCTURE);
gst_value_set_structure(&new_state, new_property_struct);
// Set the new property settings
g_object_set_property(G_OBJECT(source), "tcam-properties", &new_state);
source = ...
new_property_struct = Gst.Structure.empty("tcam-properties")
new_property_struct.set_value("ExposureAuto", "Off")
new_property_struct.set_value("ExposureTime", 35000.0)
source.set_property("tcam-properties", new_state)
Reading the GstStructure of a opened device:
GstElement* src = ...;
// Initialize the GValue
GValue current_properties = G_VALUE_INIT;
g_value_init(¤t_properties, GST_TYPE_STRUCTURE);
// Get the GObject property
g_object_get_property(G_OBJECT(source), "tcam-properties", ¤t_properties);
// get a string to print the current property state
char* string = gst_structure_to_string(gst_value_get_structure(¤t_properties));
printf("Current properties:\n%s\n", string);
g_free(string); // free the string
g_value_unset(¤t_properties); // free the GstStructure in the GValue
source = ...
state = source.get_property("tcam-properties")
print(f"New state of device is:\n{state.to_string()}")
Note
If a property is locked when loading it, writing to the property is retried after all other properties are written. (This circumvents the problem of property order for e.g. “ExposureTime” and “ExposureAuto”)
Failed writing/reading of properties gets logged to the gstreamer log.
Writing to the property in GST_STATE_NULL sets an internal cache which gets applied in the state transition to GST_STATE_READY
tcam-properties-json¶
The property tcam-properties-json provides the current device properties as a json string.
A simple state dump would look like this:
{
"ExposureTime": 35000.0,
"ExposureAuto": "Off"
}
A Property consists out of the fields ‘name’ and ‘value’.
name is a string containing the property identifier.
value contains the actual value. The interpretation of this field is done automatically.
In the case of an error a message will the written to the GStreamer log. The property will be ignored.
Properties of the type ‘button’ are not added to a state description.