From 076c610f8020d36e36ad0a9e1b9035b261e823aa Mon Sep 17 00:00:00 2001 From: Brandon Lewis Date: Wed, 23 Jun 2010 16:30:18 +0200 Subject: [PATCH] check in GESTrackVideoOverlay --- docs/libs/ges-sections.txt | 19 ++++ ges/Makefile.am | 2 + ges/ges-track-video-overlay.c | 215 ++++++++++++++++++++++++++++++++++++++++++ ges/ges-track-video-overlay.h | 94 ++++++++++++++++++ ges/ges-types.h | 5 + 5 files changed, 335 insertions(+) create mode 100644 ges/ges-track-video-overlay.c create mode 100644 ges/ges-track-video-overlay.h diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt index 1bf0506..0ffb143 100644 --- a/docs/libs/ges-sections.txt +++ b/docs/libs/ges-sections.txt @@ -500,3 +500,22 @@ GES_TRACK_OVERLAY_GET_CLASS GES_TYPE_TRACK_OVERLAY +
+ges-track-video-overlay +GESTrackOverlay +GESTrackVideoOverlay +GESTrackVideoOverlayClass +ges_track_video_overlay_get_type +ges_track_video_overlay_new +ges_track_video_overlay_set_font_desc +ges_track_video_overlay_set_halignment +ges_track_video_overlay_set_text +ges_track_video_overlay_set_valignment + +GES_IS_TRACK_VIDEO_OVERLAY +GES_IS_TRACK_VIDEO_OVERLAY_CLASS +GES_TRACK_VIDEO_OVERLAY +GES_TRACK_VIDEO_OVERLAY_CLASS +GES_TRACK_VIDEO_OVERLAY_GET_CLASS +GES_TYPE_TRACK_VIDEO_OVERLAY +
diff --git a/ges/Makefile.am b/ges/Makefile.am index 63abfcd..43b2d89 100644 --- a/ges/Makefile.am +++ b/ges/Makefile.am @@ -35,6 +35,7 @@ libges_@GST_MAJORMINOR@_la_SOURCES = \ ges-track-video-title-source.c \ ges-track-audio-title-source.c \ ges-track-overlay.c \ + ges-track-video-overlay.c \ ges-utils.c libges_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/ges/ @@ -68,6 +69,7 @@ libges_@GST_MAJORMINOR@include_HEADERS = \ ges-track-video-title-source.h \ ges-track-audio-title-source.h \ ges-track-overlay.h \ + ges-track-video-overlay.h \ ges-utils.h libges_@GST_MAJORMINOR@_la_CFLAGS = -I$(top_srcdir) $(GST_PROFILE_CFLAGS) $(GST_DISCOVERER_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) diff --git a/ges/ges-track-video-overlay.c b/ges/ges-track-video-overlay.c new file mode 100644 index 0000000..bb4c0c1 --- /dev/null +++ b/ges/ges-track-video-overlay.c @@ -0,0 +1,215 @@ +/* GStreamer Editing Services + * Copyright (C) 2010 Brandon Lewis + * 2010 Nokia Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:ges-track-source + * @short_description: Base Class for single-media sources + */ + +#include "ges-internal.h" +#include "ges-track-object.h" +#include "ges-track-video-title-source.h" +#include "ges-track-video-overlay.h" + +G_DEFINE_TYPE (GESTrackVideoOverlay, ges_track_video_overlay, + GES_TYPE_TRACK_OVERLAY); + +enum +{ + PROP_0, +}; + +static void ges_track_video_overlay_dispose (GObject * object); + +static void ges_track_video_overlay_finalize (GObject * object); + +static void ges_track_video_overlay_get_property (GObject * object, guint + property_id, GValue * value, GParamSpec * pspec); + +static void ges_track_video_overlay_set_property (GObject * object, guint + property_id, const GValue * value, GParamSpec * pspec); + +static GstElement *ges_track_video_overlay_create_element (GESTrackOverlay + * self); + +static void +ges_track_video_overlay_class_init (GESTrackVideoOverlayClass * klass) +{ + GObjectClass *object_class; + GESTrackOverlayClass *bg_class; + + object_class = G_OBJECT_CLASS (klass); + bg_class = GES_TRACK_OVERLAY_CLASS (klass); + + object_class->get_property = ges_track_video_overlay_get_property; + object_class->set_property = ges_track_video_overlay_set_property; + object_class->dispose = ges_track_video_overlay_dispose; + object_class->finalize = ges_track_video_overlay_finalize; + + bg_class->create_element = ges_track_video_overlay_create_element; +} + +static void +ges_track_video_overlay_init (GESTrackVideoOverlay * self) +{ + self->text = NULL; + self->font_desc = g_strdup (DEFAULT_FONT_DESC); + self->text_el = NULL; + self->halign = DEFAULT_HALIGNMENT; + self->valign = DEFAULT_VALIGNMENT; +} + +static void +ges_track_video_overlay_dispose (GObject * object) +{ + GESTrackVideoOverlay *self = GES_TRACK_VIDEO_OVERLAY (object); + if (self->text) { + g_free (self->text); + } + + if (self->font_desc) { + g_free (self->font_desc); + } + + if (self->text_el) { + g_object_unref (self->text_el); + self->text_el = NULL; + } + + G_OBJECT_CLASS (ges_track_video_overlay_parent_class)->dispose (object); +} + +static void +ges_track_video_overlay_finalize (GObject * object) +{ + G_OBJECT_CLASS (ges_track_video_overlay_parent_class)->finalize (object); +} + +static void +ges_track_video_overlay_get_property (GObject * object, + guint property_id, GValue * value, GParamSpec * pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_track_video_overlay_set_property (GObject * object, + guint property_id, const GValue * value, GParamSpec * pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static GstElement * +ges_track_video_overlay_create_element (GESTrackOverlay * object) +{ + //GESTrackVideoOverlay *self = GES_TRACK_VIDEO_OVERLAY (object); + + return gst_element_factory_make ("identity", NULL); +} + +/** + * ges_track_video_overlay_set_text: + * @self: the #GESTrackVideoOverlay* to set text on + * @text: the text to render. an internal copy of this text will be + * made. + * + * Sets the text this track object will render. + * + */ + +void +ges_track_video_overlay_set_text (GESTrackVideoOverlay * self, + const gchar * text) +{ + if (self->text) + g_free (self->text); + + self->text = g_strdup (text); + if (self->text_el) + g_object_set (self->text_el, "text", text, NULL); +} + +/** + * ges_track_video_overlay_set_font_desc: + * @self: the #GESTrackVideoOverlay + * @font_desc: the pango font description + * + * Sets the text this track object will render. + * + */ + +void +ges_track_video_overlay_set_font_desc (GESTrackVideoOverlay * self, + const gchar * font_desc) +{ + if (self->font_desc) + g_free (self->font_desc); + + self->font_desc = g_strdup (font_desc); + GST_LOG ("setting font-desc to '%s'", font_desc); + if (self->text_el) + g_object_set (self->text_el, "font-desc", font_desc, NULL); +} + +/** + * ges_track_video_overlay_valignment: + * @self: the #GESTrackVideoOverlay* to set text on + * @valign: #GESTrackVideoTitleSrcVAlign + * + * Sets the vertical aligment of the text. + */ +void +ges_track_video_overlay_set_valignment (GESTrackVideoOverlay * self, + GESTrackVideoTitleSrcVAlign valign) +{ + self->valign = valign; + GST_LOG ("set valignment to: %d", valign); + if (self->text_el) + g_object_set (self->text_el, "valignment", valign, NULL); +} + +/** + * ges_track_video_overlay_halignment: + * @self: the #GESTrackVideoOverlay* to set text on + * @halign: #GESTrackVideoTitleSrcHAlign + * + * Sets the vertical aligment of the text. + */ +void +ges_track_video_overlay_set_halignment (GESTrackVideoOverlay * self, + GESTrackVideoTitleSrcHAlign halign) +{ + self->halign = halign; + GST_LOG ("set halignment to: %d", halign); + if (self->text_el) + g_object_set (self->text_el, "halignment", halign, NULL); +} + +GESTrackVideoOverlay * +ges_track_video_overlay_new (void) +{ + return g_object_new (GES_TYPE_TRACK_VIDEO_OVERLAY, NULL); +} diff --git a/ges/ges-track-video-overlay.h b/ges/ges-track-video-overlay.h new file mode 100644 index 0000000..457ebf0 --- /dev/null +++ b/ges/ges-track-video-overlay.h @@ -0,0 +1,94 @@ +/* GStreamer Editing Services + * Copyright (C) 2010 Brandon Lewis + * 2010 Nokia Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TRACK_VIDEO_OVERLAY +#define _GES_TRACK_VIDEO_OVERLAY + +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TRACK_VIDEO_OVERLAY ges_track_video_overlay_get_type() + +#define GES_TRACK_VIDEO_OVERLAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TRACK_VIDEO_OVERLAY, GESTrackVideoOverlay)) + +#define GES_TRACK_VIDEO_OVERLAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TRACK_VIDEO_OVERLAY, GESTrackVideoOverlayClass)) + +#define GES_IS_TRACK_VIDEO_OVERLAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TRACK_VIDEO_OVERLAY)) + +#define GES_IS_TRACK_VIDEO_OVERLAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TRACK_VIDEO_OVERLAY)) + +#define GES_TRACK_VIDEO_OVERLAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TRACK_VIDEO_OVERLAY, GESTrackVideoOverlayClass)) + +/** + * GESTrackVideoOverlay: + * @parent: parent + * + */ +struct _GESTrackVideoOverlay { + GESTrackOverlay parent; + + /*< private >*/ + gchar *text; + gchar *font_desc; + gint halign; + gint valign; + GstElement *text_el; +}; + +/** + * GESTrackVideoOverlayClass: + * @parent_class: parent class + */ + +struct _GESTrackVideoOverlayClass { + GESTrackOverlayClass parent_class; + + /*< private >*/ +}; + +GType ges_track_video_overlay_get_type (void); + +void ges_track_video_overlay_set_text(GESTrackVideoOverlay *self, const + gchar *text); + +void ges_track_video_overlay_set_font_desc(GESTrackVideoOverlay *self, + const gchar *font_desc); + +void ges_track_video_overlay_set_halignment(GESTrackVideoOverlay + *self, GESTrackVideoTitleSrcHAlign halgn); + +void ges_track_video_overlay_set_valignment(GESTrackVideoOverlay + *self, GESTrackVideoTitleSrcVAlign valign); + +GESTrackVideoOverlay* ges_track_video_overlay_new (void); + +G_END_DECLS + +#endif /* _GES_TRACK_VIDEO_OVERLAY */ + diff --git a/ges/ges-types.h b/ges/ges-types.h index ae92d76..0b9c8f5 100644 --- a/ges/ges-types.h +++ b/ges/ges-types.h @@ -108,4 +108,9 @@ typedef struct _GESTrackOverlay GESTrackOverlay; typedef struct _GESTrackOverlayClass GESTrackOverlayClass; +typedef struct _GESTrackVideoOverlay GESTrackVideoOverlay; +typedef struct _GESTrackVideoOverlayClass + GESTrackVideoOverlayClass; + + #endif /* __GES_TYPES_H__ */ -- 2.7.4