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.