From d8b2781ddc472d4499817f975ec1cbfcf1d0a2cc Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Thu, 9 Dec 2010 14:25:22 +0100 Subject: [PATCH] GESTimelineOperation: New abstract class for operations This is a new class for all timeline objects that both produce and consume data. The existing subclasses of it are now: * GESTimelineOverlay * GESTimelineTransition --- docs/libs/ges-docs.sgml | 1 + docs/libs/ges-sections.txt | 16 +++++++ docs/libs/ges.types | 1 + ges/Makefile.am | 2 + ges/ges-timeline-operation.c | 51 ++++++++++++++++++++++ ges/ges-timeline-operation.h | 82 +++++++++++++++++++++++++++++++++++ ges/ges-timeline-overlay.c | 6 +-- ges/ges-timeline-overlay.h | 7 ++- ges/ges-timeline-transition.c | 2 +- ges/ges-timeline-transition.h | 4 +- ges/ges-types.h | 3 ++ ges/ges.h | 3 +- 12 files changed, 167 insertions(+), 11 deletions(-) create mode 100644 ges/ges-timeline-operation.c create mode 100644 ges/ges-timeline-operation.h diff --git a/docs/libs/ges-docs.sgml b/docs/libs/ges-docs.sgml index ec3c9cbc5c..530daa5098 100644 --- a/docs/libs/ges-docs.sgml +++ b/docs/libs/ges-docs.sgml @@ -38,6 +38,7 @@ platform as well as Windows. It is released under the GNU Library General Public + diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt index 66a070d709..07ef695ae5 100644 --- a/docs/libs/ges-sections.txt +++ b/docs/libs/ges-sections.txt @@ -353,6 +353,22 @@ GES_TIMELINE_FILE_SOURCE_GET_CLASS GES_TYPE_TIMELINE_FILE_SOURCE +
+ges-timeline-operation +GESTimelineOperation +GESTimelineOperation + +GESTimelineOperationClass +GESTimelineOperationPrivate +GES_TIMELINE_OPERATION +GES_IS_TIMELINE_OPERATION +GES_TYPE_TIMELINE_OPERATION +ges_timeline_operation_get_type +GES_TIMELINE_OPERATION_CLASS +GES_IS_TIMELINE_OPERATION_CLASS +GES_TIMELINE_OPERATION_GET_CLASS +
+
ges-timeline-overlay GESTimelineOverlay diff --git a/docs/libs/ges.types b/docs/libs/ges.types index 3d79f51991..ad02ea7195 100644 --- a/docs/libs/ges.types +++ b/docs/libs/ges.types @@ -10,6 +10,7 @@ ges_text_valign_get_type ges_timeline_get_type ges_timeline_layer_get_type ges_timeline_object_get_type +ges_timeline_operation_get_type ges_timeline_overlay_get_type ges_timeline_pipeline_get_type ges_timeline_source_get_type diff --git a/ges/Makefile.am b/ges/Makefile.am index 5efb4f3281..4894192ef6 100644 --- a/ges/Makefile.am +++ b/ges/Makefile.am @@ -19,6 +19,7 @@ libges_@GST_MAJORMINOR@_la_SOURCES = \ ges-timeline-pipeline.c \ ges-timeline-source.c \ ges-timeline-file-source.c \ + ges-timeline-operation.c \ ges-timeline-transition.c \ ges-timeline-test-source.c \ ges-timeline-title-source.c \ @@ -57,6 +58,7 @@ libges_@GST_MAJORMINOR@include_HEADERS = \ ges-timeline-pipeline.h \ ges-timeline-source.h \ ges-timeline-file-source.h \ + ges-timeline-operation.h \ ges-timeline-transition.h \ ges-timeline-test-source.h \ ges-timeline-title-source.h \ diff --git a/ges/ges-timeline-operation.c b/ges/ges-timeline-operation.c new file mode 100644 index 0000000000..3dd3bb38e7 --- /dev/null +++ b/ges/ges-timeline-operation.c @@ -0,0 +1,51 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * 2009 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-timeline-operation + * @short_description: Base Class for operations in a #GESTimelineLayer + * + * Operations are any kind of object that both outputs AND consumes data. + */ + +#include "ges.h" +#include "ges-internal.h" +#include "ges-timeline-operation.h" + +G_DEFINE_ABSTRACT_TYPE (GESTimelineOperation, ges_timeline_operation, + GES_TYPE_TIMELINE_OBJECT); + +struct _GESTimelineOperationPrivate +{ + void *nada; +}; + +static void +ges_timeline_operation_class_init (GESTimelineOperationClass * klass) +{ + g_type_class_add_private (klass, sizeof (GESTimelineOperationPrivate)); +} + +static void +ges_timeline_operation_init (GESTimelineOperation * self) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + GES_TYPE_TIMELINE_OPERATION, GESTimelineOperationPrivate); +} diff --git a/ges/ges-timeline-operation.h b/ges/ges-timeline-operation.h new file mode 100644 index 0000000000..96e9ad133f --- /dev/null +++ b/ges/ges-timeline-operation.h @@ -0,0 +1,82 @@ +/* GStreamer Editing Services + * Copyright (C) 2010 Edward Hervey + * 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_TIMELINE_OPERATION +#define _GES_TIMELINE_OPERATION + +#include +#include +#include +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TIMELINE_OPERATION ges_timeline_operation_get_type() + +#define GES_TIMELINE_OPERATION(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE_OPERATION, GESTimelineOperation)) + +#define GES_TIMELINE_OPERATION_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE_OPERATION, GESTimelineOperationClass)) + +#define GES_IS_TIMELINE_OPERATION(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE_OPERATION)) + +#define GES_IS_TIMELINE_OPERATION_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE_OPERATION)) + +#define GES_TIMELINE_OPERATION_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE_OPERATION, GESTimelineOperationClass)) + +typedef struct _GESTimelineOperationPrivate GESTimelineOperationPrivate; + +/** + * GESTimelineOperation: + * + * The GESTimelineOperation subclass. Subclasses can access these fields. + */ +struct _GESTimelineOperation { + /*< private >*/ + GESTimelineObject parent; + + GESTimelineOperationPrivate *priv; + + /* Padding for API extension */ + gpointer _ges_reserved[GES_PADDING]; +}; + +/** + * GESTimelineOperationClass: + */ +struct _GESTimelineOperationClass { + /*< private >*/ + GESTimelineObjectClass parent_class; + + /*< private >*/ + /* Padding for API extension */ + gpointer _ges_reserved[GES_PADDING]; +}; + +GType ges_timeline_operation_get_type (void); + +G_END_DECLS + +#endif /* _GES_TIMELINE_OPERATION */ + diff --git a/ges/ges-timeline-overlay.c b/ges/ges-timeline-overlay.c index 23ebc51da7..09b4dab505 100644 --- a/ges/ges-timeline-overlay.c +++ b/ges/ges-timeline-overlay.c @@ -31,11 +31,11 @@ */ #include "ges-internal.h" -#include "ges-timeline-object.h" +#include "ges-timeline-operation.h" #include "ges-timeline-overlay.h" -G_DEFINE_TYPE (GESTimelineOverlay, ges_timeline_overlay, - GES_TYPE_TIMELINE_OBJECT); +G_DEFINE_ABSTRACT_TYPE (GESTimelineOverlay, ges_timeline_overlay, + GES_TYPE_TIMELINE_OPERATION); struct _GESTimelineOverlayPrivate { diff --git a/ges/ges-timeline-overlay.h b/ges/ges-timeline-overlay.h index 1db3d720c4..9be209f30b 100644 --- a/ges/ges-timeline-overlay.h +++ b/ges/ges-timeline-overlay.h @@ -23,7 +23,7 @@ #include #include -#include +#include G_BEGIN_DECLS @@ -52,8 +52,7 @@ typedef struct _GESTimelineOverlayPrivate GESTimelineOverlayPrivate; struct _GESTimelineOverlay { /*< private >*/ - - GESTimelineObject parent; + GESTimelineOperation parent; GESTimelineOverlayPrivate *priv; @@ -67,7 +66,7 @@ struct _GESTimelineOverlay { */ struct _GESTimelineOverlayClass { - GESTimelineObjectClass parent_class; + GESTimelineOperationClass parent_class; /*< private >*/ /* Padding for API extension */ diff --git a/ges/ges-timeline-transition.c b/ges/ges-timeline-transition.c index 892128fc3d..650acc4cb9 100644 --- a/ges/ges-timeline-transition.c +++ b/ges/ges-timeline-transition.c @@ -54,7 +54,7 @@ enum }; G_DEFINE_TYPE (GESTimelineTransition, ges_timeline_transition, - GES_TYPE_TIMELINE_OBJECT); + GES_TYPE_TIMELINE_OPERATION); static GESTrackObject *ges_tl_transition_create_track_object (GESTimelineObject * self, GESTrack * track); diff --git a/ges/ges-timeline-transition.h b/ges/ges-timeline-transition.h index 6e42f4b84b..97843de76e 100644 --- a/ges/ges-timeline-transition.h +++ b/ges/ges-timeline-transition.h @@ -52,7 +52,7 @@ typedef struct _GESTimelineTransitionPrivate GESTimelineTransitionPrivate; */ struct _GESTimelineTransition { /*< private >*/ - GESTimelineObject parent; + GESTimelineOperation parent; /*< public >*/ GESVideoTransitionType vtype; @@ -71,7 +71,7 @@ struct _GESTimelineTransition { struct _GESTimelineTransitionClass { /*< private >*/ - GESTimelineObjectClass parent_class; + GESTimelineOperationClass parent_class; /* Padding for API extension */ gpointer _ges_reserved[GES_PADDING]; diff --git a/ges/ges-types.h b/ges/ges-types.h index 387327089e..479129b2be 100644 --- a/ges/ges-types.h +++ b/ges/ges-types.h @@ -41,6 +41,9 @@ typedef struct _GESTimelineLayerClass GESTimelineLayerClass; typedef struct _GESTimelineObject GESTimelineObject; typedef struct _GESTimelineObjectClass GESTimelineObjectClass; +typedef struct _GESTimelineOperation GESTimelineOperation; +typedef struct _GESTimelineOperationClass GESTimelineOperationClass; + typedef struct _GESTimelinePipeline GESTimelinePipeline; typedef struct _GESTimelinePipelineClass GESTimelinePipelineClass; diff --git a/ges/ges.h b/ges/ges.h index 8be9a34f65..6a17ca1111 100644 --- a/ges/ges.h +++ b/ges/ges.h @@ -33,11 +33,12 @@ #include #include #include -#include #include #include +#include #include #include +#include #include #include #include -- 2.34.1