Commit 684e4b59 authored by Seungha Yang's avatar Seungha Yang 🐑
Browse files

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.
parent 355d986d
Pipeline #307465 waiting for manual action with stages
in 30 seconds
......@@ -86,22 +86,25 @@ gst_compositor_operator_get_type_and_default_value (int *default_operator_value)
{
GstElement *compositor =
gst_element_factory_create (ges_get_compositor_factory (), NULL);
GstPad *compositorPad = gst_element_get_request_pad (compositor, "sink_%u");
GParamSpec *pspec =
g_object_class_find_property (G_OBJECT_GET_CLASS (compositorPad),
"operator");
GType ret = 0;
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);
*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 +454,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 +540,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",
......@@ -705,7 +714,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;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment