ges: Add new features for textoverlay outline and shadow 67/275467/2
authorHaesu Gwon <haesu.gwon@samsung.com>
Wed, 25 May 2022 08:37:53 +0000 (17:37 +0900)
committerHaesu Gwon <haesu.gwon@samsung.com>
Wed, 25 May 2022 09:50:44 +0000 (09:50 +0000)
[Version] 1.20.0-23
[Issue Type] New feature

Change-Id: I7ff059402e286b980e4ce83a181b32a4fa1c0672

packaging/gstreamer.spec
subprojects/gst-editing-services/ges/ges-text-overlay-clip.c
subprojects/gst-editing-services/ges/ges-text-overlay-clip.h
subprojects/gst-editing-services/ges/ges-text-overlay.c
subprojects/gst-editing-services/ges/ges-text-overlay.h
subprojects/gst-editing-services/meson.build

index 605aa0294b58af35720b8ccb9b0291e5baee2ef2..270b99e87fa7096d4f48da887262d7471ba25fa6 100644 (file)
@@ -60,7 +60,7 @@
 
 Name:           %{_name}
 Version:        1.20.0
-Release:        22
+Release:        23
 Summary:        Streaming-Media Framework Runtime
 License:        LGPL-2.0+
 Group:          Multimedia/Framework
index 72d826509e9e5c02f6b4732ffe6936f1eb97373f..062060db1502669563a6ff4f6f9e03ce7c2dc329 100644 (file)
@@ -50,6 +50,10 @@ struct _GESTextOverlayClipPrivate
   guint32 color;
   gdouble xpos;
   gdouble ypos;
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  gboolean outline;
+  gboolean shadow;
+#endif
 };
 
 enum
@@ -62,6 +66,10 @@ enum
   PROP_COLOR,
   PROP_XPOS,
   PROP_YPOS,
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  PROP_OUTLINE,
+  PROP_SHADOW
+#endif
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GESTextOverlayClip, ges_text_overlay_clip,
@@ -99,6 +107,14 @@ ges_text_overlay_clip_get_property (GObject * object, guint property_id,
     case PROP_YPOS:
       g_value_set_double (value, priv->ypos);
       break;
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+    case PROP_OUTLINE:
+      g_value_set_boolean (value, priv->outline);
+      break;
+    case PROP_SHADOW:
+      g_value_set_boolean (value, priv->shadow);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
   }
@@ -132,6 +148,14 @@ ges_text_overlay_clip_set_property (GObject * object, guint property_id,
     case PROP_YPOS:
       ges_text_overlay_clip_set_ypos (uriclip, g_value_get_double (value));
       break;
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+    case PROP_OUTLINE:
+      ges_text_overlay_clip_set_outline (uriclip, g_value_get_boolean (value));
+      break;
+    case PROP_SHADOW:
+      ges_text_overlay_clip_set_shadow (uriclip, g_value_get_boolean (value));
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
   }
@@ -236,6 +260,28 @@ ges_text_overlay_clip_class_init (GESTextOverlayClipClass * klass)
   g_object_class_install_property (object_class, PROP_YPOS,
       g_param_spec_double ("ypos", "Ypos", "The vertical position",
           0, 1, 0.5, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  /**
+   * GESTextOverlayClip:outline:
+   *
+   * The draw outline of the text
+   */
+
+  g_object_class_install_property (object_class, PROP_OUTLINE,
+      g_param_spec_boolean ("draw-outline", "Outline", "The draw outline",
+          FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+  /**
+   * GESTextOverlayClip:shadow:
+   *
+   * The draw shadow of the text
+   */
+
+  g_object_class_install_property (object_class, PROP_SHADOW,
+      g_param_spec_boolean ("draw-shadow", "Shadow", "The draw shadow",
+          FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+#endif
 }
 
 static void
@@ -252,6 +298,10 @@ ges_text_overlay_clip_init (GESTextOverlayClip * self)
   self->priv->color = G_MAXUINT32;
   self->priv->xpos = 0.5;
   self->priv->ypos = 0.5;
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  self->priv->outline = FALSE;
+  self->priv->shadow = FALSE;
+#endif
 }
 
 /**
@@ -453,6 +503,60 @@ ges_text_overlay_clip_set_ypos (GESTextOverlayClip * self, gdouble position)
   }
 }
 
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+/**
+ * ges_text_overlay_clip_set_outline:
+ * @self: the #GESTextOverlayClip* to set
+ * @position: The outline @self is being set to
+ *
+ * Sets the draw outline of the text.
+ */
+void
+ges_text_overlay_clip_set_outline (GESTextOverlayClip * self, gboolean outline)
+{
+  GList *tmp;
+
+  GST_DEBUG ("self:%p, outline:%d", self, outline);
+
+  self->priv->outline = outline;
+
+  for (tmp = GES_CONTAINER_CHILDREN (self); tmp; tmp = tmp->next) {
+    GESTrackElement *trackelement = (GESTrackElement *) tmp->data;
+
+    if (ges_track_element_get_track (trackelement)->type ==
+        GES_TRACK_TYPE_VIDEO)
+      ges_text_overlay_set_outline (GES_TEXT_OVERLAY (trackelement),
+          self->priv->outline);
+  }
+}
+
+/**
+ * ges_text_overlay_clip_set_shadow:
+ * @self: the #GESTextOverlayClip* to set
+ * @position: The shadow @self is being set to
+ *
+ * Sets the draw shadow of the text.
+ */
+void
+ges_text_overlay_clip_set_shadow (GESTextOverlayClip * self, gboolean shadow)
+{
+  GList *tmp;
+
+  GST_DEBUG ("self:%p, shadow:%d", self, shadow);
+
+  self->priv->shadow = shadow;
+
+  for (tmp = GES_CONTAINER_CHILDREN (self); tmp; tmp = tmp->next) {
+    GESTrackElement *trackelement = (GESTrackElement *) tmp->data;
+
+    if (ges_track_element_get_track (trackelement)->type ==
+        GES_TRACK_TYPE_VIDEO)
+      ges_text_overlay_set_shadow (GES_TEXT_OVERLAY (trackelement),
+          self->priv->shadow);
+  }
+}
+#endif
+
 /**
  * ges_text_overlay_clip_get_text:
  * @self: a #GESTextOverlayClip
@@ -540,6 +644,38 @@ ges_text_overlay_clip_get_xpos (GESTextOverlayClip * self)
   return self->priv->xpos;
 }
 
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+/**
+ * ges_text_overlay_clip_get_outline:
+ * @self: a #GESTextOverlayClip
+ *
+ * Get the draw outline used by @source.
+ *
+ * Returns: The draw outline used by @source.
+ */
+
+const gboolean
+ges_text_overlay_clip_get_outline (GESTextOverlayClip * self)
+{
+  return self->priv->outline;
+}
+
+/**
+ * ges_text_overlay_clip_get_shadow:
+ * @self: a #GESTextOverlayClip
+ *
+ * Get the draw shadow used by @source.
+ *
+ * Returns: The draw shadow used by @source.
+ */
+
+const gboolean
+ges_text_overlay_clip_get_shadow (GESTextOverlayClip * self)
+{
+  return self->priv->shadow;
+}
+#endif
+
 /**
  * ges_text_overlay_clip_get_ypos:
  * @self: a #GESTextOverlayClip
@@ -574,6 +710,10 @@ ges_text_overlay_clip_create_track_element (GESClip * clip, GESTrackType type)
     ges_text_overlay_set_color ((GESTextOverlay *) res, priv->color);
     ges_text_overlay_set_xpos ((GESTextOverlay *) res, priv->xpos);
     ges_text_overlay_set_ypos ((GESTextOverlay *) res, priv->ypos);
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+    ges_text_overlay_set_outline ((GESTextOverlay *) res, priv->outline);
+    ges_text_overlay_set_shadow ((GESTextOverlay *) res, priv->shadow);
+#endif
   }
 
   return res;
index d12c165c2d6200acae4d878f63ba49b49b067ead..0612fc5a2ec3e244fd08c8e447cc5db80b09ed8d 100644 (file)
@@ -86,6 +86,16 @@ GES_API void
 ges_text_overlay_clip_set_ypos (GESTextOverlayClip * self,
     gdouble position);
 
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+GES_API void
+ges_text_overlay_clip_set_outline (GESTextOverlayClip * self,
+    gboolean outline);
+
+GES_API void
+ges_text_overlay_clip_set_shadow (GESTextOverlayClip * self,
+    gboolean shadow);
+#endif
+
 GES_API
 const gchar *ges_text_overlay_clip_get_text (GESTextOverlayClip * self);
 
@@ -105,6 +115,14 @@ ges_text_overlay_clip_get_xpos (GESTextOverlayClip * self);
 GES_API const gdouble
 ges_text_overlay_clip_get_ypos (GESTextOverlayClip * self);
 
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+GES_API const gboolean
+ges_text_overlay_clip_get_outline (GESTextOverlayClip * self);
+
+GES_API const gboolean
+ges_text_overlay_clip_get_shadow (GESTextOverlayClip * self);
+#endif
+
 GES_API GESTextHAlign
 ges_text_overlay_clip_get_halignment (GESTextOverlayClip * self);
 
index 2c95fa358f7d6dba8e68c435351e7e04769b4a5b..c2f7a7aecb9de020aa008e37fecd84c7dfbe5707 100644 (file)
@@ -42,6 +42,10 @@ struct _GESTextOverlayPrivate
   guint32 color;
   gdouble xpos;
   gdouble ypos;
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  gboolean outline;
+  gboolean shadow;
+#endif
   GstElement *text_el;
 };
 
@@ -93,6 +97,10 @@ ges_text_overlay_init (GESTextOverlay * self)
   self->priv->color = G_MAXUINT32;
   self->priv->xpos = 0.5;
   self->priv->ypos = 0.5;
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  self->priv->outline = FALSE;
+  self->priv->shadow = FALSE;
+#endif
 }
 
 static void
@@ -150,6 +158,9 @@ ges_text_overlay_create_element (GESTrackElement * track_element)
   GESTextOverlay *self = GES_TEXT_OVERLAY (track_element);
   const gchar *child_props[] =
       { "xpos", "ypos", "deltax", "deltay", "auto-resize", "outline-color",
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+    "draw-outline", "draw-shadow",
+#endif
     NULL
   };
 
@@ -169,6 +180,10 @@ ges_text_overlay_create_element (GESTrackElement * track_element)
   g_object_set (text, "color", (guint) self->priv->color, NULL);
   g_object_set (text, "xpos", (gdouble) self->priv->xpos, NULL);
   g_object_set (text, "ypos", (gdouble) self->priv->ypos, NULL);
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+  g_object_set (text, "draw-outline", (gboolean) self->priv->outline, NULL);
+  g_object_set (text, "draw-shadow", (gboolean) self->priv->shadow, NULL);
+#endif
 
   ges_track_element_add_children_props (track_element, text, NULL, NULL,
       child_props);
@@ -325,6 +340,42 @@ ges_text_overlay_set_ypos (GESTextOverlay * self, gdouble position)
     g_object_set (self->priv->text_el, "ypos", position, NULL);
 }
 
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+/**
+ * ges_text_overlay_set_outline:
+ * @self: the #GESTextOverlay* to set
+ * @position: The draw outline @self is being set to
+ *
+ * Sets the outline of the text.
+ */
+void
+ges_text_overlay_set_outline (GESTextOverlay * self, gboolean outline)
+{
+  GST_DEBUG ("self:%p, outline:%d", self, outline);
+
+  self->priv->outline = outline;
+  if (self->priv->text_el)
+    g_object_set (self->priv->text_el, "draw-outline", outline, NULL);
+}
+
+/**
+ * ges_text_overlay_set_shadow:
+ * @self: the #GESTextOverlay* to set
+ * @position: The draw shadow @self is being set to
+ *
+ * Sets the shadow of the text.
+ */
+void
+ges_text_overlay_set_shadow (GESTextOverlay * self, gboolean shadow)
+{
+  GST_DEBUG ("self:%p, shadow:%d", self, shadow);
+
+  self->priv->shadow = shadow;
+  if (self->priv->text_el)
+    g_object_set (self->priv->text_el, "draw-shadow", shadow, NULL);
+}
+#endif
+
 /**
  * ges_text_overlay_get_text:
  * @self: a GESTextOverlay
@@ -423,6 +474,36 @@ ges_text_overlay_get_ypos (GESTextOverlay * self)
   return self->priv->ypos;
 }
 
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+/**
+ * ges_text_overlay_get_outline:
+ * @self: a GESTextOverlay
+ *
+ * Get the outline used by @source.
+ *
+ * Returns: The text outline used by @source.
+ */
+const gboolean
+ges_text_overlay_get_outline (GESTextOverlay * self)
+{
+  return self->priv->outline;
+}
+
+/**
+ * ges_text_overlay_get_shadow:
+ * @self: a GESTextOverlay
+ *
+ * Get the shadow used by @source.
+ *
+ * Returns: The text shadow used by @source.
+ */
+const gboolean
+ges_text_overlay_get_shadow (GESTextOverlay * self)
+{
+  return self->priv->shadow;
+}
+#endif
+
 /**
  * ges_text_overlay_new:
  *
index 559c53da87775f6b2b15b09c51b861c144505515..afeb1f6b48c655ba236a0d0e5bdf1a368c0af809 100644 (file)
@@ -79,7 +79,14 @@ void ges_text_overlay_set_ypos (GESTextOverlay * self,
 
 GES_DEPRECATED
 GESTextOverlay *ges_text_overlay_new (void);
-
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+GES_API
+void ges_text_overlay_set_outline (GESTextOverlay * self,
+    gboolean outline);
+GES_API
+void ges_text_overlay_set_shadow (GESTextOverlay * self,
+    gboolean shadow);
+#endif
 GES_API
 const gchar *ges_text_overlay_get_text (GESTextOverlay * self);
 GES_API
@@ -96,5 +103,11 @@ GES_API
 const gdouble ges_text_overlay_get_xpos (GESTextOverlay * self);
 GES_API
 const gdouble ges_text_overlay_get_ypos (GESTextOverlay * self);
+#ifdef TIZEN_FEATURE_GES_TEXT_OVERLAY
+GES_API
+const gboolean ges_text_overlay_get_outline (GESTextOverlay * self);
+GES_API
+const gboolean ges_text_overlay_get_shadow (GESTextOverlay * self);
+#endif
 
 G_END_DECLS
index b41da36a555f29307f873d6b6bb69231adebfa1b..ce2fcf9758295be8858332618a725fa4305d0a69 100644 (file)
@@ -219,6 +219,7 @@ endif
 
 # TIZEN BUILD OPTION
 cdata.set('TIZEN_FEATURE_GES_DISABLE_HW_CODEC', true)
+cdata.set('TIZEN_FEATURE_GES_TEXT_OVERLAY', true)
 # TIZEN BUILD OPTION end
 
 ges_c_args = ['-DHAVE_CONFIG_H', '-DG_LOG_DOMAIN="GES"']