mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 23:48:53 +00:00
subtitleoverlay: Refactor code to check if a property exists on an element
This commit is contained in:
parent
87a4cbd0e3
commit
cd11d68716
1 changed files with 32 additions and 39 deletions
|
@ -681,18 +681,25 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Must be called with subtitleoverlay lock! */
|
/* Must be called with subtitleoverlay lock! */
|
||||||
static void
|
static gboolean
|
||||||
gst_subtitle_overlay_set_fps (GstSubtitleOverlay * self)
|
_has_property_with_type (GObject * object, const gchar * property, GType type)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class;
|
GObjectClass *gobject_class;
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
|
gobject_class = G_OBJECT_GET_CLASS (object);
|
||||||
|
pspec = g_object_class_find_property (gobject_class, property);
|
||||||
|
return (pspec && pspec->value_type == type);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_subtitle_overlay_set_fps (GstSubtitleOverlay * self)
|
||||||
|
{
|
||||||
if (!self->parser || self->fps_d == 0)
|
if (!self->parser || self->fps_d == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gobject_class = G_OBJECT_GET_CLASS (self->parser);
|
if (!_has_property_with_type (G_OBJECT (self->parser), "video-fps",
|
||||||
pspec = g_object_class_find_property (gobject_class, "video-fps");
|
GST_TYPE_FRACTION))
|
||||||
if (!pspec || pspec->value_type != GST_TYPE_FRACTION)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self, "Updating video-fps property in parser");
|
GST_DEBUG_OBJECT (self, "Updating video-fps property in parser");
|
||||||
|
@ -709,15 +716,11 @@ _get_silent_property (GstElement * element, gboolean * invert)
|
||||||
} properties[] = { {
|
} properties[] = { {
|
||||||
"silent", FALSE}, {
|
"silent", FALSE}, {
|
||||||
"enable", TRUE}};
|
"enable", TRUE}};
|
||||||
GObjectClass *gobject_class;
|
|
||||||
GParamSpec *pspec;
|
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
gobject_class = G_OBJECT_GET_CLASS (element);
|
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (properties); i++) {
|
for (i = 0; i < G_N_ELEMENTS (properties); i++) {
|
||||||
pspec = g_object_class_find_property (gobject_class, properties[i].name);
|
if (_has_property_with_type (G_OBJECT (element), properties[i].name,
|
||||||
if (pspec && pspec->value_type == G_TYPE_BOOLEAN) {
|
G_TYPE_BOOLEAN)) {
|
||||||
*invert = properties[i].invert;
|
*invert = properties[i].invert;
|
||||||
return properties[i].name;
|
return properties[i].name;
|
||||||
}
|
}
|
||||||
|
@ -725,27 +728,6 @@ _get_silent_property (GstElement * element, gboolean * invert)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
_has_subtitle_encoding_property (GstElement * element)
|
|
||||||
{
|
|
||||||
GParamSpec *pspec;
|
|
||||||
|
|
||||||
pspec =
|
|
||||||
g_object_class_find_property (G_OBJECT_GET_CLASS (element),
|
|
||||||
"subtitle-encoding");
|
|
||||||
return (pspec && pspec->value_type == G_TYPE_STRING);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
_has_font_desc_property (GstElement * element)
|
|
||||||
{
|
|
||||||
GParamSpec *pspec;
|
|
||||||
|
|
||||||
pspec =
|
|
||||||
g_object_class_find_property (G_OBJECT_GET_CLASS (element), "font-desc");
|
|
||||||
return (pspec && pspec->value_type == G_TYPE_STRING);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_setup_parser (GstSubtitleOverlay * self)
|
_setup_parser (GstSubtitleOverlay * self)
|
||||||
{
|
{
|
||||||
|
@ -780,7 +762,8 @@ _setup_parser (GstSubtitleOverlay * self)
|
||||||
gst_object_unref (video_peer);
|
gst_object_unref (video_peer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_has_subtitle_encoding_property (self->parser))
|
if (_has_property_with_type (G_OBJECT (self->parser), "subtitle-encoding",
|
||||||
|
G_TYPE_STRING))
|
||||||
g_object_set (self->parser, "subtitle-encoding", self->encoding, NULL);
|
g_object_set (self->parser, "subtitle-encoding", self->encoding, NULL);
|
||||||
|
|
||||||
/* Try to set video fps on the parser */
|
/* Try to set video fps on the parser */
|
||||||
|
@ -808,9 +791,11 @@ _setup_renderer (GstSubtitleOverlay * self, GstElement * renderer)
|
||||||
} else {
|
} else {
|
||||||
self->silent_property =
|
self->silent_property =
|
||||||
_get_silent_property (renderer, &self->silent_property_invert);
|
_get_silent_property (renderer, &self->silent_property_invert);
|
||||||
if (_has_subtitle_encoding_property (renderer))
|
if (_has_property_with_type (G_OBJECT (renderer), "subtitle-encoding",
|
||||||
|
G_TYPE_STRING))
|
||||||
g_object_set (renderer, "subtitle-encoding", self->encoding, NULL);
|
g_object_set (renderer, "subtitle-encoding", self->encoding, NULL);
|
||||||
if (_has_font_desc_property (renderer))
|
if (_has_property_with_type (G_OBJECT (renderer), "font-desc",
|
||||||
|
G_TYPE_STRING))
|
||||||
g_object_set (renderer, "font-desc", self->font_desc, NULL);
|
g_object_set (renderer, "font-desc", self->font_desc, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1572,9 +1557,13 @@ gst_subtitle_overlay_set_property (GObject * object, guint prop_id,
|
||||||
GST_SUBTITLE_OVERLAY_LOCK (self);
|
GST_SUBTITLE_OVERLAY_LOCK (self);
|
||||||
g_free (self->font_desc);
|
g_free (self->font_desc);
|
||||||
self->font_desc = g_value_dup_string (value);
|
self->font_desc = g_value_dup_string (value);
|
||||||
if (self->overlay)
|
if (self->overlay
|
||||||
|
&& _has_property_with_type (G_OBJECT (self->overlay), "font-desc",
|
||||||
|
G_TYPE_STRING))
|
||||||
g_object_set (self->overlay, "font-desc", self->font_desc, NULL);
|
g_object_set (self->overlay, "font-desc", self->font_desc, NULL);
|
||||||
else if (self->renderer && _has_font_desc_property (self->renderer))
|
else if (self->renderer
|
||||||
|
&& _has_property_with_type (G_OBJECT (self->renderer), "font-desc",
|
||||||
|
G_TYPE_STRING))
|
||||||
g_object_set (self->renderer, "font-desc", self->font_desc, NULL);
|
g_object_set (self->renderer, "font-desc", self->font_desc, NULL);
|
||||||
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
||||||
break;
|
break;
|
||||||
|
@ -1582,10 +1571,14 @@ gst_subtitle_overlay_set_property (GObject * object, guint prop_id,
|
||||||
GST_SUBTITLE_OVERLAY_LOCK (self);
|
GST_SUBTITLE_OVERLAY_LOCK (self);
|
||||||
g_free (self->encoding);
|
g_free (self->encoding);
|
||||||
self->encoding = g_value_dup_string (value);
|
self->encoding = g_value_dup_string (value);
|
||||||
if (self->renderer && _has_subtitle_encoding_property (self->renderer))
|
if (self->renderer
|
||||||
|
&& _has_property_with_type (G_OBJECT (self->renderer),
|
||||||
|
"subtitle-encoding", G_TYPE_STRING))
|
||||||
g_object_set (self->renderer, "subtitle-encoding", self->encoding,
|
g_object_set (self->renderer, "subtitle-encoding", self->encoding,
|
||||||
NULL);
|
NULL);
|
||||||
if (self->parser && _has_subtitle_encoding_property (self->parser))
|
if (self->parser
|
||||||
|
&& _has_property_with_type (G_OBJECT (self->parser),
|
||||||
|
"subtitle-encoding", G_TYPE_STRING))
|
||||||
g_object_set (self->parser, "subtitle-encoding", self->encoding, NULL);
|
g_object_set (self->parser, "subtitle-encoding", self->encoding, NULL);
|
||||||
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
GST_SUBTITLE_OVERLAY_UNLOCK (self);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue