glsinkbin: validate property in internal sink

It might be the case that glgsinkbin would try to set a property to
its internal sink which doesn't exist in it, leading to a glib's
warning. For example, when playsink sets 'force-aspect-ratio' property
and glsinkbin has, as internal sink, appsink, which doesn't handle
that property.

The patch validates the incoming property to forward to internal sink
if it exists in the internal sink and both properties has the same
type.
This commit is contained in:
Víctor Manuel Jáquez Leal 2019-01-12 12:27:27 +01:00
parent a6552ee02e
commit b1df1000b1

View file

@ -343,6 +343,7 @@ gst_gl_sink_bin_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec) const GValue * value, GParamSpec * pspec)
{ {
GstGLSinkBin *self = GST_GL_SINK_BIN (object); GstGLSinkBin *self = GST_GL_SINK_BIN (object);
GParamSpec *sink_pspec;
switch (prop_id) { switch (prop_id) {
case PROP_SINK: case PROP_SINK:
@ -356,8 +357,17 @@ gst_gl_sink_bin_set_property (GObject * object, guint prop_id,
g_object_set_property (G_OBJECT (self->balance), pspec->name, value); g_object_set_property (G_OBJECT (self->balance), pspec->name, value);
break; break;
default: default:
if (self->sink) if (self->sink) {
g_object_set_property (G_OBJECT (self->sink), pspec->name, value); sink_pspec =
g_object_class_find_property (G_OBJECT_GET_CLASS (self->sink),
pspec->name);
if (sink_pspec
&& G_PARAM_SPEC_TYPE (sink_pspec) == G_PARAM_SPEC_TYPE (pspec)) {
g_object_set_property (G_OBJECT (self->sink), pspec->name, value);
} else {
GST_INFO ("Failed to set unmatched property %s", pspec->name);
}
}
break; break;
} }
} }