diff options
author | Seungha Yang <seungha@centricular.com> | 2021-04-24 00:55:45 +0900 |
---|---|---|
committer | Seungha Yang <seungha@centricular.com> | 2021-05-15 01:36:44 +0900 |
commit | eaaaf78090626e5c31da531798619be4091e4e94 (patch) | |
tree | 83bfa8872d1761b1c3b7a481630424c81c63e91e | |
parent | 60856d5a6fdd8a7b9cb1492197d3aa201a43828d (diff) |
framepositioner: Install operator property only when compositor is used
Other compositor/mixer elements might not have the property. For instance,
d3d11compositor and glvideomixer define graphics API specific blending
properties, instead of simple "operator" one.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/242>
-rw-r--r-- | ges/gstframepositioner.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/ges/gstframepositioner.c b/ges/gstframepositioner.c index 368b4c49..b332d827 100644 --- a/ges/gstframepositioner.c +++ b/ges/gstframepositioner.c @@ -93,16 +93,21 @@ gst_compositor_operator_get_type_and_default_value (int *default_operator_value) GParamSpec *pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (compositorPad), "operator"); + GType ret = 0; - *default_operator_value = - g_value_get_enum (g_param_spec_get_default_value (pspec)); - g_return_val_if_fail (pspec, G_TYPE_NONE); + if (pspec) { + *default_operator_value = + g_value_get_enum (g_param_spec_get_default_value (pspec)); + g_return_val_if_fail (pspec, G_TYPE_NONE); + + ret = pspec->value_type; + } gst_element_release_request_pad (compositor, compositorPad); gst_object_unref (compositorPad); gst_object_unref (compositor); - return pspec->value_type; + return ret; } static void @@ -451,10 +456,11 @@ gst_frame_positioner_dispose (GObject * object) static void gst_frame_positioner_class_init (GstFramePositionerClass * klass) { - int default_operator_value; + int default_operator_value = 0; GType operator_gtype = gst_compositor_operator_get_type_and_default_value (&default_operator_value); + guint n_pspecs = PROP_LAST; GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstBaseTransformClass *base_transform_class = @@ -536,13 +542,18 @@ gst_frame_positioner_class_init (GstFramePositionerClass * klass) * * The blending operator for the source. */ - properties[PROP_OPERATOR] = - g_param_spec_enum ("operator", "Operator", - "Blending operator to use for blending this pad over the previous ones", - operator_gtype, default_operator_value, - (G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); + if (operator_gtype) { + properties[PROP_OPERATOR] = + g_param_spec_enum ("operator", "Operator", + "Blending operator to use for blending this pad over the previous ones", + operator_gtype, default_operator_value, + (G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | + GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS)); + } else { + n_pspecs--; + } - g_object_class_install_properties (gobject_class, PROP_LAST, properties); + g_object_class_install_properties (gobject_class, n_pspecs, properties); gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass), "frame positioner", "Metadata", @@ -708,7 +719,7 @@ static gboolean gst_frame_positioner_meta_init (GstMeta * meta, gpointer params, GstBuffer * buffer) { - int default_operator_value; + int default_operator_value = 0; GstFramePositionerMeta *smeta; smeta = (GstFramePositionerMeta *) meta; |