From: Seungha Yang Date: Fri, 23 Apr 2021 15:55:45 +0000 (+0900) Subject: framepositioner: Install operator property only when compositor is used X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eaaaf78090626e5c31da531798619be4091e4e94;p=platform%2Fupstream%2Fgst-editing-services.git 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: --- diff --git a/ges/gstframepositioner.c b/ges/gstframepositioner.c index 368b4c4..b332d82 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;